こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

空メールサービスの自動返信機能プログラム内で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でプログラムが止まってしまう事に関して、他に原因として考えられることがありますでしょうか?

投稿日時 - 2008-04-24 16:02:41

QNo.3972742

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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

投稿日時 - 2008-05-01 19:17:33

補足

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

投稿日時 - 2008-05-04 16:53:19

ANo.4

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

投稿日時 - 2008-04-28 19:24:41

補足

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

ANo.3

wp_

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.の項目が参考になるかと思います。

投稿日時 - 2008-04-24 21:00:35

補足

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

投稿日時 - 2008-04-24 22:08:01

ANo.2

wp_

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

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

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

投稿日時 - 2008-04-24 17:14:03

補足

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

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

投稿日時 - 2008-04-24 18:02:04

ANo.1

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

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

投稿日時 - 2008-04-24 17:04:59

補足

テストしてみました。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:48

あなたにオススメの質問