プロが教えるわが家の防犯対策術!

はじめまして。SOGURINと申します。
こちらでの質問は初めてですので何卒宜しくお願いします。

いろいろ調べましたが、解決策が見つからなかったので、ご質問させてください。

【現象】
空メール受信でPHP起動し、送信者に対して自動返信メールを送るプログラムを組んでいます。
/etc/aliasesに起動するphpのファイル名を設定してプログラムを起動する所までは順調です。

返信内容の別ファイル(SJISで保存)からタイトルと本文を読み込んで、
送信前にタイトルをJIS変換させる記述を入れると、プログラムがこの記述で止まってしまいます(おそらく)。
$title = mb_convert_encoding($title,"JIS","SJIS");

※(おそらく)と言うのは。。
エラーログを出そうとしてもエラーログ出力されないので、多分そうだろうと言う事です。
if(!$title = mb_convert_encoding($title,"JIS","SJIS")){
$output = "関数エラー";
log_up($output,$LOGFILE);
exit;
}
確実に言えるのは、上記で、
$titleのmb_convert_encodingの記述を外してそのまま送ると、文字化けしたメールが届く。
mb_convert_encodingの記述を入れると、メールは届かない
と言う事です。

これまでに似たような話題はありましたが、
・mb_stringを入れてコンパイルしないといけない点に関しては、phpinfo()で、
「'--enable-mbstring'」とありましたのでインストールされているのか。と。。
・他のプログラムで画面上で操作して、mb_convert_encodingでJIS変換⇒メール送信
という機能は使ってますが普通に動いてます。

ということで、サーバーとしてmb_convert_encodingが動かない環境と言うわけでは無いと思うのですが、通常起動の時はmb_convert_encodingが正常に動作して、
自動起動の時だけmb_convert_encodingでプログラムが止まってしまう事に関して、他に原因として考えられることがありますでしょうか?

A 回答 (5件)

読み込まれている php.ini(Configuration File Path) は意図したものになってますか?


mbstring.dllの警告ということは、意図しない設定ファイルが読み込まれているのではと。

設定ファイル
http://search.net-newbie.com/php/configuration.h …

コマンドラインオプション
http://d.hatena.ne.jp/maru_cc/20080214/1203007176

この回答への補足

レス有難うございます。
どうも、モジュール版のPHPと、CLI版PHPの実行ファイルがあり、コマンドラインからの実行はCLI版が動作するようです。
調べてみると、モジュール版の方にはconfigure時に、mbstringがインストールされているが、CLI版にはされてないみたいです。
php.iniから呼ばれているmbstring.dll自体がサーバー内に存在しません。。ちなみにlinuxなので、ネット等で調べるとmbstring.soがあるはずなんですが、それもサーバー内に無いみたいです。
それが原因のようです。

補足日時:2008/05/04 16:53
    • good
    • 0

自動起動というか、コマンドラインから実行時の問題では?


php -f hoge.php で実行すると、phpinfo、mbstring関数は正常ですか?
phpのエラーログにはなにも出ないのでしょうか?

この回答への補足

ご回答有難うございます。
いろいろ調べていますが、仰るとおり、コマンドラインの実行時の
問題のようです。上記コマンドで実行した場合、
[28-Apr-2008 21:24:53] PHP Warning: Unable to load dynamic library '/usr/lib/ap
ache/php/php_mbstring.dll' - /usr/lib/apache/php/php_mbstring.dll: cannot open s
hared object file: No such file or directory in Unknown on line 0
と、PHPのエラーログが出ました。
モジュール版(WEBから実行)のPHPはmbstringが使えて、CLI版(コマンド実行)のPHPはダメとか言う問題のようです。

コマンドからそのモジュール版の方のPHPを実行する事って可能なのでしょうか?

補足日時:2008/04/28 20:52
    • good
    • 0

error: safesasl(/etc/sasldb) failed: Group readable file


こいつが原因ですね^^;;;

http://www.google.co.jp/search?hl=ja&q=error%3A+ …
http://micho.mimora.com/sendmail.txt
ここの7.の項目が参考になるかと思います。

この回答への補足

ありがとうございます。
参考にして、「saslを使えるように」してみました。
そして、自動起動PGを動かしてみましたが。。
確かに、saslのエラーは/var/log/maillogには出てこなくなりましたが、残りの2つのエラーは出てくるみたいです。
自動返信のメールも来ません。
だから。。mb_stringが正常に動かなくなる原因とは違うのでしょうか。。

補足日時:2008/04/24 22:08
    • good
    • 0

(snip.)


log_up($output,$LOGFILE);
exit; // <- ここに流れてきてるんじゃないですか?
}

$titleが空文字列であれば当然mb_convert_encoding()の結果も空文字列であり、結果的に論理否定と判断されifの中に入っている、と言う状態な気がします。
空メールに題名入れる人もいない気がしますし^^;
exit自体要らないような気が。

仕様でそういう風になっているのであればスルーしてくだされ^^;

この回答への補足

レスありがとうございます。

まあ。。exit;はいらないかもしれませんが。。
入れなくても、結果は同じです。
log_upと言う関数で$LOGFILEと言うファイルに"関数エラー"という文字列が書き込まれるはずなんですが、書き込まれずに終わっています。
※ちなみにこの関数自体は、ちゃんと動いてます。。

補足日時:2008/04/24 18:02
    • good
    • 0

>エラーログを出そうとしてもエラーログ出力されないので、多分そうだろうと言う事です。



「/var/log/maillog」にエラーが記述されていませんか?

この回答への補足

テストしてみました。mb_convert_encodingを入れたときは、
「/var/log/maillog」に、次の3行が書き込まれました。

Apr 24 18:48:59 servername sendmail[27110]: error: safesasl(/etc/sasldb) failed: Group readable file
Apr 24 18:48:59 servername sendmail[27130]: m3O9mxh27130: from=<空メールした人のアドレス>, size=316, class=0, nrcpts=1, msgid=<20080424181031089377.614b@0016E68C232E>, proto=SMTP, daemon=MTA, relay=mmrky018p01c.softbank.ne.jp [000.000.204.84]
Apr 24 18:48:59 servername sendmail[27131]: m3O9mxh27130: to=|"/hoge/hoge/hoge/web/demo/automail/自動起動PG.php", ctladdr=<自動起動用メール宛先> (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=30028, dsn=2.0.0, stat=Sent

まあ、自動起動PG.phpで何らかのエラーが起こったということだと思いますが。。内容はよくわかりませんでした。
はっきりしたのは、「やっぱり自動起動でmb_convert_encodingを使うとエラーになる。」と言う事でしょうか。。

補足日時:2008/04/24 18:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!