0

このスクリプトは、完了するのを待たずにバックグラウンドで別のスクリプトを実行します。

私のscript.php:

$cmd = "nohup php script2.php > /dev/null 2>&1 &";
exec($cmd);

私のscript2.php:

sleep(10);
mail("me@mail.com","test","ok");

コマンドラインで実行すると、問題なく動作します。呼び出しはすぐに終了し、10 秒後に受信トレイに新しいメールが届きます。

しかし、 http://myserver/script.phpでスクリプトを呼び出すと、何も受信しません。

以下を使用することに注意してください。

$cmd = "php script2.php > /dev/null 2>&1";

両方の呼び出し方法で機能します。したがって、http 呼び出しと nohup の使用に何か問題があります。

exec の代わりに passthru と shell_exec も試しましたが、結果は同じでした。

念のためこれも試してみましたが、いずれにしてもうまくいきませんでした。

4

1 に答える 1

0

サーバー上に phpinfo.php というファイルを作成します。

このファイルには 1 行のコードしかありません。

<?php echo phpinfo() ?>

よくわからない場合は、ここに完全なチュートリアルがあります : http://www.inmotionhosting.com/support/website/php/create-phpinfo-page-to-see-php-settings () であり、php.ini ファイルを変更できない場合があります。

もしそうなら、あなたの最善の策はphpメール機能から始めることです. http://php.net/manual/en/function.mail.php

php.ini に関する追加情報: コマンド ラインからは機能するが、ブラウザーを介した呼び出しからは機能しないという元のステートメントは、私にとって、php.ini ディレクティブが最も可能性の高い原因です。PHP が Web サーバーを介して実行される場合、スクリプトの実行はこれらのディレクティブによって指示されます。最も参考になるのは PHP ドキュメントです: http://php.net/manual/en/ini.core.php。サーバーのブラウザから phpinfo.php を実行すると、セクション「Core」とその中の disable_functions テーブル行が検索されます。

私の開発サーバーでは、無効になっている機能がたくさんあります。exec() と fork() を含みます。

php.ini ファイルを編集できる場合は、行から exec 関数を削除できます

disable_functions = 

ウェブサーバーを再起動します。私はそれを思いとどまらせますが。この機能は、有効なセキュリティ上の理由から無効になっています。

于 2015-04-08T13:30:25.650 に答える