受信した電子メールを処理するために書かれた簡単なスクリプトがあります。テスト済みのシナリオは次のとおりです。
A. スクリプト機能は、電子メールがパイプ アドレスで受信されたことを示す電子メールを送信することです。
-ブラウザでテスト済み - 成功
-CLI でテスト済み - 成功
-パイピングによるテスト - 成功
B. スクリプト機能は、ファイルを解析してフォルダーに書き込み、さらにメールがパイプ アドレスで受信されたことを示すメールを送信することです。
-ブラウザでテスト済み - ファイルが書き込まれ、電子メールが送信されました。
-CLI でテスト済み - ファイルが書き込まれ、電子メールが送信されました。
-パイピングによるテスト - ファイルは書き込まれませんが、電子メールは送信されます。
スクリプトを単純化して、パイプされたメッセージを読み書きする基本機能にしました。この問題は許可の問題であると思われますが、裏付けとなる証拠が見つかりません。
私は CLI に堪能ではありませんが、いくつかのタスクを実行できます。パイプ シナリオのログ ファイルを探す場所がわかりません。
パイピングは、テストされたすべてのシナリオで問題なく機能します。パイプによって呼び出されたときに失敗する単純化されたコードを次に示します。
#!/usr/bin/php -q
<?php
/* Read the message from STDIN */
$fd = fopen("php://stdin", "r");
$email = ""; // This will be the variable holding the data.
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
/* Saves the data into a file */
$fdw = fopen("/my/folder/mail.txt", "w");
fwrite($fdw, $email);
fclose($fdw);
/* Script End */
助けてくれてありがとう。
コードを次のように変更:
#!/usr/bin/php -q
<?php
/* Read the message from STDIN */
$email = file_get_contents('php://stdin');
/* Saves the data into a file */
$fdw = fopen("/Volumes/Cobra/Sites/email/mail.txt", "w+");
if (! $fdw) {
error_log("Unable to open mail.txt for output.", 1, "myemail@mydomain.com", "From: admin@mydomain.com");
} else {
fwrite($fdw, $email);
}
fclose($fdw);
/* Script End */
エラーメッセージがメールで送信されました。それで?パイプで呼び出されたスクリプトはどのユーザーとして実行されますか?