1

テスト目的で、input.PHP が次のようになっているとします。

<?php
{
$TO = "joe@net.net";
$FROM = "bob@net.net";
$SUB = "Yadda";
$BODY = "This is a test";
exec("/usr/bin/php /xxx.yyy.net/TESTS/sendit.PHP $TO $SUB $BODY $FROM > /dev/null &");
echo "DONE";
}
?>

そして、exec() によって呼び出される sendit.PHP は次のようになります。

<?php
$to      = $argv[1];
$subject = $argv[2];
$message = $argv[3];
$headers = 'From: '.$argv[4]. "\r\n" .
'Reply-To: '.$argv[4]. "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>

ブラウザーで input.PHP を開くと、echo DONE メッセージが表示されますが、テスト メールは送信されません。コードの何が問題になっていますか? ありがとうございました。

4

2 に答える 2

3

エラー情報がなければ、これがすべての問題かどうかはわかりませんが、次のことから始めます。

読み取られる引数$argvはスペースで区切られます。次のコード:

 /usr/bin/php /xxx.yyy.net/TESTS/sendit.PHP $TO $SUB $BODY $FROM > /dev/null &

あなたの例では次のように実行されています:

 /usr/bin/php /xxx.yyy.net/TESTS/sendit.PHP joe@net.net Yadda This is a test bob@net.net > /dev/null &

それは$argv[3] == 'This'と になり$argv[4] == 'is'ます。

于 2011-08-01T20:03:49.760 に答える
1

デバッグがなければ、誰もあなたに答えを出すことができないと思います。

*nix では大文字と小文字が区別されることに注意してください。そのため、 /xxx.yyy.net/TESTSなどの大文字と小文字、スペルが正しいことを確認する必要があります。

また、すべてをファイルに送信しないことをお勧め/dev/nullします。単純に、/usr/bin/php別の構成を使用している可能性があり(以前に私に起こった)、crontabでスクリプトを実行したときに期待どおりに機能しなかったためです。

あなたはもう少し情報を見つける必要があります!php ログを確認し、ターミナルからスクリプトを実行したときにそのスクリプトが提供する内容を確認します。

于 2011-08-01T20:03:53.230 に答える