受信した電子メールを処理するための簡単なスクリプトがあります。テストされたシナリオは次のとおりです。PHPスクリプトは電子メール配管でファイルに書き込むことができません
A.スクリプト機能は、電子メールをパイプで受信したことを示す電子メールを送信することです。 CLIによって-tested成功
- - ブラウザによって-tested
成功は
配管によって-tested - 成功
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, "[email protected]", "From: [email protected]");
} else {
fwrite($fdw, $email);
}
fclose($fdw);
/* Script End */
エラーメッセージが電子メールで送られました。それで?パイプで呼び出されるスクリプトはどのユーザーが実行しますか?
は、エラーログを有効にし、警告や通知など、すべてのエラーを記録します。次に、パイプを呼び出した後にエラーログをチェックします。それはあなたが持っているエラーを示しています。エラーメッセージを理解できない場合は、質問に追加し、理解していないことを尋ねます。 http://php.net/error-reporting – hakre
私の無知を許してください...私はエラー報告をしていますが、ブラウザでこれをテストするとエラーは発生しません。 Snow Leopard Serverを実行しているXserveがあります。私が見るログファイルはウェブサイトだけです。私が見ることができるどこかのPHPログがありますか? – vmaxheli
はいPHPには独自のログがあります。PHPエラーログを設定していれば(以前のコメントのリンクを参照してください。スクロールすると、エラー処理に関するPHPのすべての設定がそのページにあります)。設定すると、そのエラーログを確認できます。 – hakre