1

ここでは、私の流れを詳しく書いています。

同じホストで Ajax リクエストを実行しています。への AJAX 呼び出しsaveUser.php

saveUser.php、含めておりますCommon.php

Common.php持っcreateFile1()createFile2()機能します。

createFile1()関数はsample1.php、別の目的で を作成するだけです。

ではcreateFile2()、ファイルを作成し、そのファイルsample2.phpを実行するexec('php /home/public/sample2.php > /dev/null &');コマンドを実行しています。

私はこれcreateFile1()を呼び出しており、AJAXリクエストによって呼び出されているcreateFile2()関数をそれぞれ呼び出しています。saveUser.php

コマンドの最後に' ' を付けて exec コマンドをバックグラウンドで実行するように設定して&いるため、応答を待たずに戻り、すべてがスムーズに処理されます。

しかし、サーバーをチェックしていると、これらのファイル sample1.php と sample2.php が何度も作成されています。SSHからプロセスsaveUser.phpを停止するまで、このすべてのアクションが何度も実行されているようです。sample2.php

php /home/public/sample2.php「 」が を持つたびにプロセスリストをチェックしたnew process_idので、何度も実行されていることが確認されました。コードを削除してexec()、SSH からこの sample2.php を実行すると、期待どおりに動作し、そのような問題はありません。

何が間違っているのか教えてください。サーバーの構成に問題はありますか。hostgator 共有アカウントを使用しています。

また、同じCommon.phpファイルsample2.phpも含めて、役立つ場合に備えて通知します。

事前にご協力いただきありがとうございます。

saveUser.php コード

include_once dirname(__FILE__).'/Common.php';

createFile1();

createFile2();

echo 'saved successfully!';

Common.php コード

function createFile1()
        {
                $template = file_get_contents('sendDmTemplate.php');

                $serviceFp = fopen('sendDmFiles/sample1.php',"w");
                fwrite($serviceFp , $fileContent);
                fclose($serviceFp);
        }

        function createFile2()
        {
                $fileContent = file_get_contents(dirname(__FILE__).'/sampleFileTemplate.php');

                $serviceFp = fopen('sample2.php',"w");
                fwrite($serviceFp , $fileContent);
                fclose($serviceFp);

                exec('php '.dirname(__FILE__).'/sample2.php > /dev/null &');
        }

sample2.php コード

include_once dirname(__FILE__).'/Common.php';
echo 'hi';
4

2 に答える 2

1

以下を確認してください。

1) スクリプト saveUser.php を複数回呼び出していませんか? おそらく、javascript XHR のどこかにコーディングエラーがありますか? (apache?) ログを見て、これを確認してください。

2) あなたの php は -q なしで問題なく実行されますか? 私は php -q pathtoscript.php を使用します

3) 1 または 2 でない場合: saveUser.php のここ (またはどこか) にコードを投稿します。

編集:私はあなたの問題を参照してください。作成したファイルには common.php が再度含まれており、それを再度実行します。など <-- 間違っています。私はそれをあまりにも早く書きました。今改めて調べてみました。

4) saveUser.php にリダイレクトするエラー処理を使用することは可能ですか?

編集:

5) コマンド自体を実行しているファイルを include_once と組み合わせてインクルードしていると問題が発生する可能性がありますが、よくわかりません。これは、sampleFileTemplate.php を調整して sample2.php コンテンツのコンテンツを変更することで簡単にテストできます。common2.php (common.php と同じ内容) を作成し、それを使用します。そのセットアップを試乗して報告していただけますか?

于 2012-10-15T08:21:03.040 に答える
1

これとまったく同じことが私にも起こりました。あるphpスクリプトが別のphpスクリプトでexec()を呼び出そうとしていましたが、何らかの奇妙な理由で、exec()自体が再び無限ループを作成するだけでした。現在受け入れられている回答ではどこにも行きませんでしたが、phpへの絶対パスを指定することで機能させることができました.

だから、代わりに

exec('php /home/public/sample2.php > /dev/null &');

それはそのようになります

exec('/usr/local/bin/php /home/public/sample2.php > /dev/null &');
于 2016-12-21T07:38:29.543 に答える