4

あるホストから別のホストにサイトを移動しました。サーバー環境は非常に似ており (LAMP スタック)、1 行を除いて、転送時にすべてのコードが機能しました。テストのために少し変更しましたが、まだ非常に奇妙な結果が得られています。

<?php
$out = `php ../test/test.php 123 abc`;
?>

php ../test/test.php 123 abcSSH でコマンド ラインから実行すると、期待どおりに正常に動作します。また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 とすべてがダウンしました。現在は回復していますが、何が起こっているのか説明できません。コードにループはなく、関連する両方のファイルは非常にシンプルで、テスト目的で分離されています...

ホストが私のサポート チケットに応答する際に、これが環境に関連するものなのか、それとも何なのかを確認するために作業しています...単純にサーバー環境を変更しただけで、これが発生する原因は何ですか?

4

2 に答える 2

0

私のホストである A Small Orange は役に立ちましたが、最終的に、私または彼らが把握できるのは (私のサポート チケットから):

...スタックの一部として実行している SuPHP またはその他のセキュリティベースのソフトウェアが、プロセスが新しいプロセスを生成するのを妨げている (その動作は明らかな理由で安全でない可能性があるため) ...

いずれにせよ、スクリプトは私の Macbook (nginx とは非常に異なる構成) と、ASO が同様の設定をしている古いホストの LAMP スタックで正常に動作します。

おそらく、呼び出し元のスクリプトが別の質問でブロックされないように、コマンドラインを呼び出さずに実行時間の長いプロセスを生成することについて質問します。

于 2013-02-08T16:06:47.317 に答える
-3

スペースを削除し、アンダースコアを入れます

$out = `php ../test/test.php_123_abc`;
于 2013-02-08T04:50:32.517 に答える