5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

タグ: PHP

  • マインドマップ - xmind

    最近お付き合いしている会社の営業さんから、マインドマップでまとめられた資料が届く。その会社は、記事録から資料をマインドマップでまとめているようです。

    マインドマップは何だかおもしろそうということで、を買い込み、試しに書いてみると、やはりおもしろい。そこで、簡単にマインドマップを書けるツールを探していましたら、ヒットしたのはFreeMindXMind

    FreeMindが定番らしいのですが、XMindを選択。XMindは普通のアプリケーションだけではなく、Eclipseのプラグインでも提供されるのが気に入った。それと、EnterとTabキーでどんどんトピックを追加できるのが便利。ただ、トピックをマウスで移動するのがわかりにくい。

    システムの要求仕様を頭から叩き出すに使えそうです。

    娘にマインドマップをちょっと教えたら、自分でどんどん書き出した。彼女は絵が書くのが好きなので、イメージがほとんど占める楽しいマインドマップになっていました。

    マインドマップは、登録商標らしいので、本来なら丸Rが必要? ちょっとこの辺りがやらしいところ。

  • WordPress2.7にアップデート

    WordPressが2.7をリリースされましたので、アップデートしました。今回もWordPress Automatic Upgradeを使って簡単にアップデートです。3分の作業で完了です。

    ユーザー側の見た目は全く変わりません。当たり前?

    管理者側は相当変わっています。ダッシュボードは全然違っている。これはインパクトが大きい。ほとんど日本語化されているので(これは、前のバージョンから引き継がれたものか?)、英語がダメというWordPress管理者でも心配ない。これから、いろいろ触ってみます。

    そういえば、WordPressネタとして、携帯電話のプラグインをインストールしようとしたら、PHP5専用で動きませんでした。使っているレンタルサーバーは、まだPHP4なのです。9月位にPHP5にサーバーバージョンアップするという案内が来ましたが、いまだにバージョンアップしていないようです。予定は10月にバージョンアップする予定でしたが、案内ページも止まっています。現在、サーバー会社に問い合わせ中。

    この会社は、相変わらずの仕事をしています。なぜサーバー会社を換えないかというと、移行が面倒だから。それだけ。しかし、これからは考えなければいけないかも。

  • 同時に2つ進行

    午前中は、母の病院へ付き添ったり、インフルエンザの予防接種をしたりで外出。午後からは溜まっている仕事を片付けることにします。

    しかし、うまくいかないもの。片付けている途中で、同時に2人のお客様から対応依頼の連絡。

    一つは2年前に作ったシステムの改修。0880で始まるフリーダイヤルの番号がページに反映されないとのこと。

    もう一つは、今度セミナーを行うので案内のバナーを貼り付けてほしいとのこと。

    (さらに…)

  • ASP.NETに遊ばれて

    この何週間か、ASP.NETでプログラムを作っています。しかも、C#で。

    退社したメンバーの引き継ぎで、今ASP.NETで動作しているシステムの拡張の案件です。

    なかなか手強い。

    最近はPHPで開発する案件が多く、ASP.NETやC#のような厳しい環境だと辛いところがあります。だって、変数を宣言しなければいけないのですよ(当たり前か・・・)。

    これまでもCとかC++とかで開発したことがありますが、PHPのようなスクリプト言語にどっぷり使ってしまうと、コンパイルエラーが出るたびにため息が出てしまいます。

    しかも、サーバーに公開するときは、ビルドしたDLLをアップしなければいけない。

    IISからLAN上にある別サーバーのファイルをアタッチするのも、どうしていいかわからなかったし(いまは、ようやく解決済み)、LAMPに慣れた人間はいっぱいいっぱい・・・。

    とりあえず形にはなったけど、これから実機でテストです。

  • ブログをaccata.comのサーバーに移動しました – WordPressブログを移行した話し

    そろそろ借りているメインのドメインのサーバーの残りサイズが少なくなってきましたので、別に借りているaccata.comのサーバーに移動しました。

    accata.comは、アンドワークスの名前を使えない何でもありのサービスで使っています。例えば、お客さんが利用するメーリングリストのサービスとか、SSLでフォーム入力したいとか。

    今回の作業のメモです。WordpressからWordpressへのブログの移行ですので簡単かと思っていましたが、そうではなかったです。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/04/30 10:35時点 | Amazon調べ)

    なんやかんやでWordPressのサイト構築で躓くのは、PHPのプログラミングなのでした。

    まず、accata.comにWordpressをインストールします。これは5分程度の簡単な作業です。ここまで問題なし。あとはブログデータの移行です。

    WordPressのエクスポート/インポート機能でブログデータを移行してみました。無事に移行できました。しかし、大きな問題が。記事番号が改めて採番されてしまうようです。これではドメインとパスと変えただけでは、正しいaccata.comのページにアクセスできません。サーバーのリダイレクションの設定で、昔のドメインでアクセスしたときに、accata.comにある記事に自動的に移動してくれません。

    次にWordpressのMySQLテーブルを移行してみます。サーバーにインストールしているphpMyAdminを使えば簡単。しかし、accata.comにアクセスしてみると、404のページが見つからないエラーになります。

    悩むこと1時間、Wordpressの設定にある「ブログのアドレス (URL)」の設定が原因でした。Wordpressのサイト管理にはアクセスできませんので、直接MySQLのテーブルのデータをいじることで対応。wp_optionsテーブルのoprion_name項目がhomeのレコードをaccata.comに設定。これでアクセスできるようになりました。

    しかし、トップページから各ページにアクセスと、違うページが表示されてしまいます。これは、パーマリンク構造を数字ベースにしているため、.htaccessのRewriteで設定されているパスが違っているのが原因でした。

    一度、パーマリンク構造をデフォルトに戻して、各ページにアクセスできることを確認。その後、数字ページに設定して、.htaccessを書き換えることで無事に元に戻りました。

    最後に、古いドメインのWebサーバーに、ブログのディレクトリにアクセスされたら、accata.comのサーバーにリダイレクトするように設定しました。これは、リンク切れ対策です。

    以上で設定完了。これでaccata.comのサーバーにブログが構築できました。おそらく、この記事もaccata.comから配信されていることでしょう。

  • やっとプログラム完成です。

    2週間位かけて、1本プログラムを作成しました。

    内容は、値をフォームから受け取って、確認ページで表示して、OKならPOSTで別のサイトに送り込むという、言ってしまえば簡単なものです。

    しかし、作成に時間がかかりました。

    正常の処理は簡単です。CakePHPを使って1日ほどで動きます。しかし、エラーのチェックがとても面倒。

    エラーチェックはCakePHPのvalidates()で行えばいいのですが、なにせ項目数が多いので、とても大変でした。それでも、validates()のおかげで数は多いのですが、まとまって見やすいです。先日の全角の文字数の判定の件もありましたが、正規表現でのチェックもたくさん使っています。

    後は、データベースが止まったときの異常系のエラーはどうするかとか、不正な値が入った来たときとか、細々としたエラーのチェックを行っています。

    今回はエラーの処理で7割くらいコードを書いています。

  • 1時間だけ「第29回全市全郡コンテスト」に参加した話し

    前述のように運動会参加してから、第29回全市全郡コンテストに参加。1時間だけですが。ただの参加賞狙い。

    10局交信していただく。半分くらいクラブコールでした。

    しかし、いい加減なコールサインの聞き取りでDUPE(重複交信)して撃沈。いまだにR/Lを聞き取れなくてイヤになります。情けない。まだまだですね。

    zlogから電子ログを出力してJARLに提出。この辺は時間は5分ほどで完了。簡単です。

    zlog_to_hamlogという変換ソフトを使って、ついでにzlogからTurbo HAMLOGにログをインポート。こちらも簡単。

    ただし、相手の運用場所(QTH)をコードから自動変換してくれない(やり方がわかない)ので、一つづつ変換してあげる。これはTurbo HAMLOGの機能(コードで下矢印のカーソルキーを押すだけ)があるので、これも簡単。

    以上、簡単にソフト使って簡単にできるのは、PCをいじって20年の杵柄といったところでしょうか・・・。

    この記事に記載したすべてのソフトの開発者に感謝。

    著:加納勉, 編集:Webon編集部
    ¥480 (2025/04/23 15:16時点 | Amazon調べ)
    CQ出版
    ¥1,650 (2025/04/27 16:31時点 | Amazon調べ)

    電波を出すには必ずアマチュア無線の国家資格が必要です。電波法令を守って楽しみましょう。

  • リモートデスクトップで失敗してしまう話し

    青山オフィスあるPCにリモートデスクトップ接続がつながらなくなる。どうしてもそのPCでからサーバーにアップしなければいけないファイルがあるので、本日は青山オフィスまで行く。心当たりがある・・・。

    原因は、そのPCからVPNでサーバーに接続していて、リモートデスクトップ接続を切断してしまったのが原因。

    青山オフィスに行ってVPN接続を切断。無事にファイルのアップが完了。

    VPN接続のタイムアウトで勝手に切断なんてしてくれないのでしょうか?

    サーバー管理がうるさくなったせいか、直接サーバーにFTPで接続できなくなってきた。scpもsshで端末を利用できてしまうので使用禁止。これって意外と手間がかかるのです。

    VPNで接続してからFTPでファイルをアップしかできないので、サーバー上のサイト構築では苦労する。設定ファイルをいじるだけでも面倒。

    そこで利用しているのはWS-FTP LEという昔から使っている古いFTPクライアントソフトです。このソフトを使うとFTPで接続したリモートのファイルを、テキストエディタ(普段使っている秀丸)で編集できる。サーバー固有の設定ファイルはこれでいじってしまいます。

    もちろんサーバーの管理者権限をいただけるはずはないので、Apacheのhttpd.confやPHPのphp.iniの設定は、お手数ですがサーバー運用会社の管理者にお願いする。今回は大きなデータをデータベースに初期投入する必要はありませんが、もしある場合はお願いしなければいけません。管理者に嫌がれようが(実際には面倒らしくて嫌がれます)、こればかりしょうがない。

    著:大竹 龍史, 著:山本 道子
    ¥2,950 (2025/04/24 12:29時点 | Amazon調べ)
    著:Piro, 編集:日経Linux
    ¥2,178 (2025/04/29 16:34時点 | Amazon調べ)
    著:三宅 英明, 著:大角 祐介
    ¥2,970 (2025/04/24 12:29時点 | Amazon調べ)
  • QdmailでCakePHPのViewで送ると文字化けする話し

    現在、CakePHPのサイトを作成していますが、メールを送信する処理があります。今まですとmb_send_mail()を使ったクラスを用意していましたが、せっかくCakePHPを使っているということで、Qdmailというコンポーネントを使ってみました。

    PCに送るには問題なし。しかし、携帯電話宛のメールは文字化けします。

    調べてみると、cakeText()メソッドでViewを使うとUTF8で送信しているようです。Viewを使わず直接text()メソッドを使ってテキストで送ると、正常にiso-2022-jpで送ってくれます。

    Qdmailのサイトで調べて、charsetBody()メソッドでiso-2022-jpを指定してもだめ。テンプレートファイルをJISにしたら携帯電話で読めるようになるが、パラメータをアサインすると文字化け。1時間ほど悩む。

    Googleで「Qdmail cakephp 文字化け」で検索してみるとありました。ここのサイトでヒントが見つかりました。

    cakeText()メソッドの第5パラメータで iso-2022-jp を指定すればOK。Qdmailのマニュアルには見つかりませんでした。

    Qdmailのサイトには、非常に詳しくマニュアルが載っています。今回はこれを信じたのがいけなかった。ソースコードが読めるのなら、ソースコードを読まなければいけません。しかしQdmailのソースコードは、コメントが少ないので読みづらい。コメントの中にコードが埋まっている私とは大違い。

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)
  • 全角文字は2バイトではないのでした、という話し

    タイトルの件、考えてみれば当たり前なのですが、お客さんからの仕様で引っかかりました。ここでいう全角文字は、マルチバイト文字のこと。

    フォームに文字を入力する処理で、入力した文字の長さをチェックする処理が必要です。そこで文字長でチェックするか、バイトでチェックするか。

    これをCakePHPのバリデーションで用意しているmaxLengthのルールでチェックしたところ、何も考えずに内部コードのバイト長でチェックしていまいます。これをお客様から指摘されました。希望としては、全角文字を2バイトでチェックして欲しいとのこと。

    例えば、「あああ」は6バイトではなく9バイトとして判定されます。これは内部のコードがUTF-8だからです。CakePHPのバリデーションで正しく文字数で判定するには、maxLengthの処理をmb_strlen()で変更してあげます。詳細な対応方法は、こちらのサイトをご覧ください。

    ここで簡単な実験です。こんなコードと結果です。

    <?php
    $str = "あああ";
    echo(strlen($str)); // 9
    echo(mb_strlen($str));  // 9
    echo(mb_strlen($str, 'UTF-8'));  // 3
    echo(mb_strlen(mb_convert_encoding($str, 'SJIS', 'UTF-8'), 'SJIS')); // 3
    echo(strlen(mb_convert_encoding($str, 'SJIS', 'UTF-8')));  // 6
    ?>

    UTF-8のままですと、全角文字は2バイトにはなりません。しかも、正しく文字コードをしてあげないと正しい文字数になりません。

    一旦、シフトJISに変換してあげて、mb_stringではないstrlen()で全角文字を2バイトで計算してくれます。

    昔の人間ですと、どうしても全角=2バイト、半角=1バイトと考えてしまうのですが、この考え方は古いかもしれませんね。

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)