Posts Tagged ‘例外’

例外処理の分岐と文字化けメール送信

2009年11月29日 at 4:20 AM  Author: admin

 今日は珍しく朝から没頭してしまって、歯医者の予約があったのをすっかり忘れてしまった。気が付いたのは夜になってから・・・月曜日電話しとこう。さて、昨日できなかった、例外処理での分岐(エラー分岐)ができた。難しい理屈は???だが、グルグルで見つけた、サンプルファイル達を見てたら気が付いた。継承した Exceptionから独自例外を MyException で作成し、例外を発生させたい箇所(エラー発生箇所)に定義するまでは良かったが、 catch句を定義する場所がアカンかった。オリジナルcatch の下に独自 catchを定義していた。逆なんだね。コレが。オリジナルを継承しているから、例外が発生した時に、最初にオリジナル catch にかかってしまうと、すべてそこで catch されちゃうって事だよね?うん、多分そうだ。昨日の夜中に散々 トライ&エラー を繰り返したが、今朝になってみると、あっさりと解決した。やっぱー、人間寝て、頭を休める事も大事なんだな。

 さて、今日もドツボにハマッった。それは、メール送信エンコード・・・そう、文字化け。その前に、メール送信テストをするので、当然、ローカル環境にてメール受信できなければテストができないので、開発環境の XAMPP に付属していた、Mercury の設定で少々苦労してしまった。そんな設定必要ないのに、一生懸命外部メール送信設定で時間を費やしてしまった。フッと、「そんな設定必要ないじゃん!ローカルでやるのに」っと。Mercury にユーザーを追加して、メールソフトから localhost へ接続。いとも簡単に接続・送受信できちゃいました。さて、気を良くした私でしたが、PHPから送信されたメール内容はバケバケ状態。やっぱし・・・で、毎度お世話になります、グルグル先生からサンプル集め。あーしてこーしてと、試行錯誤の結果、どーしても本文だけがバケますね。「なんで?」まぁ、どっかのエンコードが違っているハズなんだが、それが分からん。悪戦苦闘しつつ毎度ながらのトライ&エラーで、結局のところ、本文エンコードに $body = base64_encode($body) の指定を外したらうまくいった。でも、よくよく考えてみると、何故、本文に 64エンコードなんだろう?サンプルには「本文がメールで読めるように」との解説があったが、これはアカン。文字がバケる。そんあこんなでメール送信用スクリプトをまとめてみました。


//内部エンコードを設定
mb_language(”Ja”);
mb_internal_encoding(”ISO-2022-JP”);

//本文エンコード
$body = mb_convert_encoding($body,”ISO-2022-JP”,”UTF-8″);

//件名エンコード
$subject = mb_convert_encoding($subject,”ISO-2022-JP”,”UTF-8″);
$subject = mb_encode_mimeheader($subject,”ISO-2022-JP”);

//ヘッダーエンコード(\n がバケる・・・何故?)
$header .= “From:” . $admin . “\r”;
$header .= “Content-Type: text/plain;charset=ISO-2022-JP\r”;
$header .= “Content-Transfer-Encoding: 7bit\r”;
$header .= “MIME-Version: 1.0\r”;
$header .= “X-Mailer:PHP/” . phpversion() . “\r”;
$header .= “To:” . $to . “\r”;

//メール送信
mail($to,$subject,$body,$header);

以上。でも、まだまだまだまだ、分からぬ事だらけですな。ひとつの事を達成するには、アレコレとクリアしなければならない事が、いろいろたくさんある・・・楽しいけど疲れる毎日です。そうそう、今日ははよ寝ようと思っていたのに、こんな時間になってしまった・・・なかなか思うように進まねーな。



オブジェクト指向で書き直し

2009年11月28日 at 4:09 AM  Author: admin

 今まで書いたスクリプトをオブジェクト指向メインで書き直す事にした。
昨日書いたデータベース接続~データ抽出スクリプトを仕上げて、エラー処理には例外(exceptions) 処理を加えて何とかできた。なんかプログラムっぽく書けて少々満足かな?でも、例外処理の catch 句を複数指定して、エラー処理を分別させようと思ったが、うまくイカン・・・Exceptionクラスの継承・・・???はぁ~、今日は挫折。もう寝よう。そうそう、最近タイピングのミスタッチが多くなったような気がする。年のせいかな~・・・また、タイプウェルにお世話になろうか!