• 締切済み

空メールサービスの自動返信機能プログラム内でmb_convert_encodingが動作しない

はじめまして。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でプログラムが止まってしまう事に関して、他に原因として考えられることがありますでしょうか?

みんなの回答

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.5

読み込まれている php.ini(Configuration File Path) は意図したものになってますか? mbstring.dllの警告ということは、意図しない設定ファイルが読み込まれているのではと。 設定ファイル http://search.net-newbie.com/php/configuration.html#configuration.file コマンドラインオプション http://d.hatena.ne.jp/maru_cc/20080214/1203007176

SOGURIN
質問者

補足

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

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.4

自動起動というか、コマンドラインから実行時の問題では? php -f hoge.php で実行すると、phpinfo、mbstring関数は正常ですか? phpのエラーログにはなにも出ないのでしょうか?

SOGURIN
質問者

補足

ご回答有難うございます。 いろいろ調べていますが、仰るとおり、コマンドラインの実行時の 問題のようです。上記コマンドで実行した場合、 [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を実行する事って可能なのでしょうか?

  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

error: safesasl(/etc/sasldb) failed: Group readable file こいつが原因ですね^^;;; http://www.google.co.jp/search?hl=ja&q=error%3A+safesasl&btnG=%E6%A4%9C%E7%B4%A2&lr= http://micho.mimora.com/sendmail.txt ここの7.の項目が参考になるかと思います。

SOGURIN
質問者

補足

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

  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

(snip.) log_up($output,$LOGFILE); exit; // <- ここに流れてきてるんじゃないですか? } $titleが空文字列であれば当然mb_convert_encoding()の結果も空文字列であり、結果的に論理否定と判断されifの中に入っている、と言う状態な気がします。 空メールに題名入れる人もいない気がしますし^^; exit自体要らないような気が。 仕様でそういう風になっているのであればスルーしてくだされ^^;

SOGURIN
質問者

補足

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

回答No.1

>エラーログを出そうとしてもエラーログ出力されないので、多分そうだろうと言う事です。 「/var/log/maillog」にエラーが記述されていませんか?

SOGURIN
質問者

補足

テストしてみました。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を使うとエラーになる。」と言う事でしょうか。。

関連するQ&A