あるホストから別のホストにサイトを移動しました。サーバー環境は非常に似ており (LAMP スタック)、1 行を除いて、転送時にすべてのコードが機能しました。テストのために少し変更しましたが、まだ非常に奇妙な結果が得られています。
<?php
$out = `php ../test/test.php 123 abc`;
?>
php ../test/test.php 123 abc
SSH でコマンド ラインから実行すると、期待どおりに正常に動作します。またphp testrunner.php
、SSH で (上記の「$out」行のみを含むファイル) を実行すると、期待どおりに動作します。
しかしtestrunner.php
、ブラウザからロードすると、ハングします。を使用ps aux | grep php
してプロセスを監視すると、プロセスが生成されて終了するように見えます (簡潔にするために切り捨てられています)。
myuser 12790 0.0 0.3 259016 45284 . . . 0:00 php ../test/test.php 123 abc
「$out」行を次のように変更すると:
<?php
$out = `php ../test/test.php 123 abc &`;
?>
次に、そのスクリプトをバックグラウンドで実行します。驚いたことに、数秒後にps aux | grep php
もう一度実行すると、同じものが表示されますが、新しい PID が表示されます。ps aux を実行し続け、別の PID で表示し続けます。これはかなりの時間 (数秒、場合によっては 1 分) 続きます。
test.php には、テスト目的でテキストをエコーする行しかないため、これは私にとって非常に奇妙です。
ターミナルからは正常に動作します。Web から呼び出すと、ハングしたり、その他の奇妙な動作が発生したりします。何か不足していますか?
(出力をログ ファイルにリダイレクトすることで、Web ブラウザーから実行すると、PHP スクリプトが他のスクリプト test.php ではなく ITSELF を呼び出しているように見えるという証拠があります。$argv
パラメータ...しかし、コマンドラインから実行すると、すべてがうまくいきます!奇妙な?)
更新: そうねえ... サーバー プロセスを監視していたところ、test.php の PHP プロセスが制御不能になり始めました。それらは数百、場合によっては数千のプロセスに増殖しました。サーバーは 1 分間停止し、SSH とすべてがダウンしました。現在は回復していますが、何が起こっているのか説明できません。コードにループはなく、関連する両方のファイルは非常にシンプルで、テスト目的で分離されています...
ホストが私のサポート チケットに応答する際に、これが環境に関連するものなのか、それとも何なのかを確認するために作業しています...単純にサーバー環境を変更しただけで、これが発生する原因は何ですか?