5

自分では説明できない現象に出くわしました。

私はpopenを使用してphpを実行し、次にphpスクリプトをそのように実行し、pcloseを使用してそれを閉じています。ここまでは順調。これを使用したスクリプトが実行されず、代わりに3回続けて試行した後、zend-serverをクラッシュさせたため、かなりの深刻な問題に遭遇しました(ページが開かなくなりました)。その理由は、php.exe に間違ったディレクトリを使用したためであることがわかりました。例:

if (pclose(popen("C:\wrongDir\php\php.exe C:\Zend\Apache2\htdocs\myApp\public\mytest.php 57 > C:\Logs\1\0\jobOut.log 2> C:\Logs\1\0\jobErr.log"))>-1)
{
.....
}

「wrongDir」を除いて、他のすべてのディレクトリは正しかった.... popen は jobOut および jobErr ファイル (空だった) も作成した。(注: PHP は検索パスにないため、正しいパスがないと検出されませんでした)

問題は解決しましたが....これが通常の動作なのか、それとも何か間違ったことをしたのか(サーバー設定でさえ)疑問があります。 両方のコマンドについてマニュアルで読んだことから、私の場合、戻り値は-1または0のいずれかであり、プロセスで遭遇した問題ではなく、サーバーがハングする必要があるように思えました)。

ありがとう。

4

1 に答える 1

1

pclose()はプロセスの終了ステータスを返すのではなく、プロセスを閉じる機能を返すようです。

プロセス終了の「コード」を取得するには、pcntl_wifexited()およびpcntl_wexitstatus()を使用します

http://php.net/manual/en/function.pclose.php
http://php.net/manual/en/function.pcntl-wexitstatus.php

于 2012-12-10T12:17:52.660 に答える