実は一般公開はしてないんだけど、2年前、ウチのバンドのメンバー専用にコミュニケーションサイトをPHPで自作したの。
基本はPCとケータイ、双方からアクセスできる掲示板サイト。
それに簡易メーリングリスト機能を取り付けたやつ。
要は誰かが掲示板に書き込むと、メンバー全員に同じ内容のメールが届く仕掛け。
もちろん送らない選択もできるようにしてある。
あと自分でも頑張ったなと思うのは、管理ページにアクセスして次の練習日と場所、一言を入力すると、サイトのトップページに入力した内容のバナーが自動作成されてスクロール表示され、練習日の3日前になるとメンバー全員にリマインダーメールが自動送付されるって機能。
当時はバリバリとスクリプトを書いてたから勢いで作れたけど、今じゃもう無理ですな(^^;)。
ソース読み返してもそんな面倒くさいコード書いた記憶がない!
でも2年前はPHPを知ったばっかりの頃で、自分でそういう機能を組み上げるのが面白かったんだろうと思う(遠い目)。
ただ、ひとつだけ、当時からちょっとした不具合を抱えてた。
原因が分からなかったのと、再現性がなく、致命的な問題でもなかったのでそのままにしていたんだが・・・。
文字化け。
たまにサイトから送信されるメールが文字化けをしてたのですよ。
でも掲示板サイトの文字は化けていないので、届いたメールが読めなくても、ワンクリックして掲示板サイトに飛べばその内容はすぐにわかるようになってるんだよね。
なので今までそんな気にしなかったんだけど・・・でも・・・丸々2年そのままにしておくってのは、う〜ん、さすがの僕も気が引けるって感じで・・・ムムムッと、やっと重い腰を上げるに至りました(^^;)。
で、昨日の午前中、色々ネットでググって調べてみたんだけど、どうも「これが原因!」ってのがわからない。
言われるがまま、試しに色々スクリプトを書き直したりしたんだけど、文字化けが直るどころかもっとひどい状態になってしまったorz...。
で、右往左往しながら結局辿り着いたのがこのサイトでした。
携帯にメール送信すると文字化けする
文字コードとか改行コードってちょっとややこしいんだよね。
WinとMacではそれぞれ違うし、Linuxでも違う。
ウェブサイトの文字も、それを扱うサーバーやクライアントPCの出自によってコードがバラバラだったりする!
ホントこれが困るのよ。
Winや昔のMac、ケータイ用のウェブサイトはSJISの文字コードで作られてるけど、UNIXやLinux、今のMac用のサイトはEUC-JPという文字コードが主流です。
さすがに最近はUTF-8で統一させようとする動きはあるみたいだけど・・・それはそれで色々と問題があるらしい(^^;)。
ケータイ以外の、最近のPC用ブラウザーはみんな自動的に文字コードを切り替えて表示するから、サイトを閲覧するにはほとんど問題ないんだけどね。
大きな問題が出るのはウェブサーバーからメールを扱うときなんですよ。
これが曲者なのでございます。
実はメールで使う文字コードはISO-2022-JPってやつ。
当然、SJISやEUC-JPを扱ってるウェブサーバーから、文字データを直接メールサーバーに渡したりなんかしたら大変なことになってしまう。
全部文字化けです。
なので、その間にエンコード作業を入れこんで、文字を変換させる必要があるわけです。
PHPの関数でいうと、それを行うのがmb_convert_encodingってやつ。
2年前、その当該スクリプトを書いたときも、この関数を「テキトー」に使って文字コードを変換してたのでありました。
どのくらいテキトーとか言うと・・・。
「あ。さっきは文字化けしてたけど今回はちゃんと送れた。よかった〜成功成功!あ。でも今送ったやつが文字化けしたな・・・まあいいや。サーバーの調子が今イチなのかな。うん。そのうちなんとかなるわ。なるなる。ほらなった〜!今度は成功!」
・・・っていうぐらいテキトーでした。
ごめんなさいorz...。
実は僕はここで大きな間違いをしていたのでした。
PHPは基本的によくできる子なので、メールを送信する前にわざわざ文字コードをmb_convert_encodingでISO-2022-JPに直さなくてもよかったらしいのです。
なんと、メールサーバに送信を受け渡す関数、mb_send_mailがエンコードも含めて一手に引き受けてくれていたようなのです。
ウ〜ン。
つまり僕は2重にエンコード作業をしていたと。
しかもエンコードする文字コードの種類も間違ってたっぽいしorz...。
あ〜救いようがございません。
まあでもとりあえずこれで文字化けの原因が判明したわけで。
早速コードを書き直して、約2年ぶりにこのサイトのバージョンを0.01上げました(^^;)。
先日、長年の懸案事項であった編集作業が一段落した。
つっても身内の結婚式DVDだけど(^^;)。
しかもまだもう一本別編集もあるし。
本当に「とりあえず」一段落ってところかもしれん。
でもあれだ。
そのおかげでMotionを以前よりも理解できた。
とにかく素早く効果を入れられるようにはなったはず(^^;)。
それについては非常によかった(仕事しろよ!自分)。
で、差し迫った編集作業が一段落したところで、まずは伸びに伸びてた「3人寄れば何とやら」の更新作業をしようと思い、iMacにPHP環境を新たにインストールしたんだけど・・・これが何故かパーミッションエラー。
httpd.confをいじくってもローカルフォルダーにアクセスできない?
え?って感じ。
何なんだ?
PHP5にしたからか?
Marc Liyanage - Software - Mac OS X Packages - PHP
chmodでディレクトリのパーミッションを色々試してみてもまるでダメ。
Apatchを再起動させてもウンともスンとも言わない。
PHP5の再インストールも全く効果無し
本当に何なんだ?
ネットで情報を集めてもトント解決策が見えてこないし。
う〜む。
アップルのサポートページへ飛んでみたりしてもダメ。
なんだかんだで昨日の夕方からこの今の時間まで時間を潰してしまった・・・。
こんなことって初めて・・・。
と、突然ふと思った。
これはもしやFileVaultのせいではなかろうかと。
ユーザディレクトリ全体が暗号化されてる中に、サイトのディレクトリも入ってる。
で、早速これを解除すると・・・ドンピシャ。
PHP5は何事もなかったかのようにスマートに動きましたとさ。
貴重な時間を返せ!!!orz...。
つかこれは「灯台下暗し」に関する例示の話ということだな・・・。
ほぼ1年ぶりぐらいでPHP触りました。
いやあ、久しぶりでしたなあ。
きっかけはこのネパール記事(^^;)。
jizo.net: 今、ネパールで何が起こっているのか?!
このコメント部分でヒントをいただき、思いつきで簡単なスクリプトを書いたら問題なく動いたので、ちゃんとしたUIを付けてみた次第です。
中身は全然大したことないんですが、PHPの細かな癖をもうすっかり忘れてて・・・「PHP_SELF」の書式の勘違いなんかで3時間くらい悩みましたorz...。
でもウェブアプリ作るのってオモロいですなあ。
初心者なりにワクワクする。
F-BASIC(v3.0)での糞ソフト作りを思い出したりなんかして。
まあ趣味でやってるから楽しんだろうけども(^^;)。
今回のアプリ、利用する人ってかなり稀だと思いますけど、もしも使用された方がいたら、その感想や改善案、不具合、気づいたことなどをココに書き込んでみてください(現在のところWin環境未確認)。
よろしくお願いします。
IPアドレスを判別して重アクセスを無視するやつ。
というか別のサイトで作ったのを流用しただけなんだが(^^;)。
gif素材は上記のサイトで調達。
ここのサイトの素材は、シンプルで上品なものばかりなので重宝している。
それにしてもブログのインデックスファイルってPHPの拡張子にできるのね。
サーバーが対応してれば当然そうなのかもしれないけど。
知らなかったよ。
これでかなり可能性が広がったことになる。