ChatzillaでFirefoxでIRCを

やっぱプログラム関連でわかんないことはMLでも聴けるんだけど、EthnaとかだったらIRCで聴いちゃうってのもレスポンスの早さからいって捨てがたい。
でも、会社では最近いろいろセキュリティ関連のことが厳しくなり、ソフトの簡単にインストールできない。
っつうことで、Firefoxのアドオンでないかな?って探したらやっぱあった。
もうーなんでも出来るのな、Firefoxで。
Mozilla の IRC

んで、細かい設定はこちら↓を参考。
2008-01-30 - pouda::memo

あと、Ethnaは%Ethnaってチャンネル名なんだけど、普通は#Ethnaなの。
このチャンネル名の%と#の違いについては↓こちらを参照。
Q: チャンネル名先頭の記号の#と%はどう違うのですか?また、&や+などもありますが、どういう違いがありますか?

っつうことで、久しぶりにEthnaのIRCにお邪魔しまーす。

PHPのmail関数が利用できない

毎日わからないことと格闘の日々です。

タイトルの件も数時間使って解決できず、家に帰っても寝るにも寝れず、家からホスティング会社に問い合わせのメールをしちゃったぐらいです。

で、格闘の記録。

まず、いつも使っているEthnaのMailSenderでメールを送信しても送れないので、Ethna_MailSenderのソースを追ったら、PHPのmail関数を使っていることが判明。
初めてEthnaのソース(アプリ側だけ)をUTF-8にした影響か?と思ったんですが、文字化けとかしてしまうならまだしも、メール自体が送れないってのは変だなと思って、返り値をvar_dumpしてみたら、falseが返ってきました。

こりゃおかしいなと思って、PHPの公式マニュアルに書いてあるようなシンプル&非常に単純なmail関数でもこけるので、こりゃEthnaとかUTF-8とかの次元じゃないことがわかりました。

mail()でメールが送信できるかどうかの確認手順 - よくきたWiki
で、上記のサイトを参考にして問題の切り分けを行ったところ、すべて無事出来ました。
・phpのmail関数は正しいメールデータを生成している
・phpのsendmail_pathで指定されているsendmailのコマンドで入力すると、メールが送られる。

PHPをインストールした時点でsendmailが特定のディレクトリに存在しないと、うまく動かない?時もあるとかないとかってことでしたが、見た感じ動かせるようにインストールはされてる感じがしました。(phpinfo()見た感じでは)

で、なんとなく権限っぽいのかなと思ったのですが、そんなにいじくりまわしていないサーバー状態で、PHPのmail関数が動かないってことは、他のアプリケーション(Xoopsとか)のメール機能も使えないだろうと踏み、ホスティング会社に聞くことにしました。

だって、もうお手上げだから・・・。

そしたら、以下のメールが返ってきました。

メールを送信するケースの場合(CGIからの送信など)送信元のホスト名は
apache@メインホスト名となってしまいます。

CGIプログラムなどできちんとemvelope-fromなどにきちんとサーバーに
設定されたメールアドレスをセットしていただいていれば特に問題はないのですが
そうでない場合、apache@メインホスト名のメールアドレスが
元々定義されていない為にエラーとなってしまいます。

弊社側にてこちらの設定を解除させていただきましたので
送信をお試しいただきますようお願い申し上げます。


結論を良いますと出来ました。
ん~さすがプロ。
すばらしい。
で、折角なのでどこを触ったのか聞いてみました。

設定変更を行った項目は以下の通りでございます。

/etc/mail/virtusertable

ファイル内に以下の項目がございます。

@メインホストドメイン名 error:nouser User unknown

この項目を無効にし(#に拠るコメントアウト)
以下のコマンドからデータベースの再起動をおこないました。

# vnewvirtmaps


「virtusertable」と「error:nouser User unknown」で検索してもなかなか出てこないので、どういったものなのか良くわかりませんが、要はapache@hoge.comってメールアドレスがないので、no userってことで、エラーになってたってことですな。

なんとなくphpの環境関数で「sendmail_from」ってのが「no value」になっていたので、そこになにかしらセットしておけばよかったのかなと思っていましたが、それじゃああんまりにも不便だろうと思っていたら、やっぱりありました↓。
PHPでメール送信する場合にメールサーバで拒否されないために (ITプロフェッショナル部)

・・・奥が深い、また勉強になりました。

あ~いつか試そうかな。
あ~疲れた。

PHP4.4.x+MySQL4.1.X+Ethna2.3.2+UTF-8

仕事でPHP4.4.x+MySQL4.1.X+Ethna2.3.2で文字コードはUTF-8という環境でシステムを作ることに。
結構苦労したのでメモ。

■UTF-8について
なんとなくオシャレだなとは思っていたのですが、EthnaがEUC-JPがデフォルトなので特にUTF-8で作りたいとは思っていませんでした。
が、Javascriptを絡ませようとするとUTF-8の方が使い勝手が良いので、敵に回した時にどっちがやっかいかなと考えた時に、経験不足のJavascriptってことになりました。
あと、のちのち全文検索する可能性もあったので、以下のサイトを参考にしたいってのもありました。
MySQL FULLTEXT + Ngram : LIKE検索より数十倍高速な、お手軽 日本語全文検索 について|blog|たたみラボ

■PHP
htaccessファイルに以下の記入して設置。
ActionFormのfilter周りがinternal_encodingを見ているので。
php_value mbstring.language "Japanese"
php_value mbstring.internal_encoding "UTF-8"


■EthnaのUTF-8化
皆さん考えることは同じなようで、たくさんのページが出てきましたが結局ここを参考にしました。
ずんWiki - PHP/Ethna/UTF-8化

デバッグ時のPHPの内部エラーメッセージもUTF-8化するには以下のサイトを参考にEthna.phpを触ります。
エラーメッセージがEUC-JPで書かれているのでそれをUTF-8で送るようにする。

※2007/9/20追記
上記参考サイトの二つを適用すると、アクションフォームでのエラーメッセージが一部文字化けするという事態が発生します。
で、Ethna.phpで追加する一文を以下のように変更すると直ります。
- $message = mb_convert_encoding($message, 'UTF-8', 'EUC-JP');
+ $message = mb_convert_encoding($message, 'UTF-8', 'UTF-8,EUC-JP');


あと、以下のファイルも変更しておくと文字化けしません。
@Ethna/tpl/unittest.tpl
@Ethna/tpl/info.tpl

charset=EUC-JP
↓
charset=UTF-8


■MySQL4.1
一番怖かったのがMySQL4.1系。
あまりの怖さに手を出したくなかったのですが、こればっかりはしょうがないです。
ますは、以下のサイトを参考にMySQLを設定。
MySQL4.1系UTF-8の場合 - phpspot

あと、環境は違いますがphpMyAdmin使っていたので、以下のサイトも参考になりました。
artful xampp:Mysqlに関するPHPMyAdminの文字化け

あとはEthnaの方でAppObjectを使っていたので、以下のサイトを参考にSET NAMES utf8をセット。
GRANADA Hatena - EthnaでAppObjectを使うときデータベースの文字コードを指定する

※2007/09/20追記
getObject('Hoge', 'hogeid', '1111')
みたいにgetObjectと同時に引数で値を取得する際に文字化け発覚。
親のコンストラクタでセットしちゃってるみたいなので、子のコンストラクタへ親のコンストラクタを丸ごと持ってきて、以下のように2行追加。

$this->my_db_rw =& $db_list['rw'];
$this->my_db_ro =& $db_list['ro'];
// XXX: app objはdb typeを知らなくても動くべき
$this->my_db_type = $this->my_db_rw->getType();

+ // utf-8対応
+ $this->db->query("SET NAMES utf8");



いやあ、大変だ。。。

EthnaのMailSenderを使うと変なヘッダーが表示されてしまう

Ethnaを2.3.2へバージョンアップしてみたところ、以下のヘッダーらしき行が本文に表示されるようになってしまいました。

Content-Type: text/plain; charset=iso-2022-jp


同じことで悩んでいる人もいた。
ITT-WEB - Ethna_MailSenderでMailヘッダが分割される。

ソースを追っても良くわからず、IRCで投げても良くわからず、qmailのせいなんじゃないかという結論に達しました。
なんだか、headerが複数行にまたがる場合は、改行コードがLFじゃないとおかしくなるとかならないとか。
通常のメールだとEthnaの場合3行分出力されるんですが、これを2行にしたらちゃんと送信できた。
ん~怪しい。
そんな制限無いはずだし。

改行コードはCRLFでって
Ethna_MailSenderクラスの206行目当たりを以下の通りに
-$header_line = str_replace("\n", "\r\n", $header_line);
+//$header_line = str_replace("\n", "\r\n", $header_line);

これで一先ずちゃんとメールが送られるようになったのですが、これは強引な策らしいです。(IRCの皆様談)

なんとなくWindowsサーバーだと変なことになりそうなので、以下のように変更しても良いかも。
        // 改行コードを CRLF に
/*      qmailのバグ対応
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
            $body = str_replace("\n", "\r\n", $body);
        }
        $header_line = str_replace("\n", "\r\n", $header_line);
*/
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
            $body = str_replace("\n", "\r\n", $body);
            $header_line = str_replace("\n", "\r\n", $header_line);
        }

ま、Linuxサーバで動かしていれば一緒のことだけど。


qmail以外だとちゃんと動くのかいつか検証したいです。
2.3.1まではまったく同じコードでうまく動いていたんだけどね・・・。

EthnaのActionFormのカスタムチェックを複数指定する方法

EthnaActionFormカスタムチェックを複数指定する方法
'custom' => 'checkMailaddress,checkDuplicateHoge',

こんな感じでOK。
optionとかみたいに、array()使わなくても良いんですね。
公式ドキュメントでは見つからなかったので、ソース見ました。

アーカイブ

2010

2009

2008

2007

コンタクト

longkey1[at]gmail[dot]com