0

コンソール プログラムを実行するための簡単な PHP コードを作成しました。

<?php
$cmd = escapeshellcmd('progName.exe arg1 arg2 arg3');
exec($cmd);
?>

サーバーのコンソールでコマンドを直接実行すると、機能します。ただし、ブラウザで PHP を実行すると、機能しません。プロセスprogName.exeは実行されていますが (サーバー上のタスク マネージャーを使用して確認)、決して終了しません。このプログラムは、引数からいくつかのパラメータを計算し、結果をバイナリ ファイルに書き込み、.WAV ファイルも生成することになっています。ブラウザに表示されるエラーメッセージは次のとおりです。

Error Summary
HTTP Error 500.0 - Internal Server Error
C:\php\php-cgi.exe - The FastCGI process exceeded configured activity timeout

Detailed Error Information
      Module    FastCgiModule
Notification    ExecuteRequestHandler
     Handler    PHP
  Error Code    0x80070102

次に、文章をテキスト ファイルに書き込む簡単なコンソール プログラムを作成しました ( writeTxt.exe hello.txt)。同じ PHP スクリプトを使用して、ブラウザーで実行したところ、動作しました。

サーバーのタイムアウトを増やそうとしましたが、それでも同じエラーが発生します。この問題の原因は何ですか?

4

1 に答える 1

0

exec関数 (例: )を使用して PHP でプログラムを実行すると、PHP はそのプログラムが終了するか、バックグラウンドに送信され、PHP が直接戻るexec('dir')まで待機します (ドキュメント、特にコメントを参照してください)。

投稿された PHP ソース ( $cmd = escapeshellcmd('progName.exe arg1 arg2 arg3');) によると、プログラムは PHP によってバックグラウンドに送信されませんprogName.exe

  1. ...自分自身またはフォークをバックグラウンドに送信します(可能性は低いですが、のソースを調べてくださいprogName.exe
  2. ...入力を待っています (<-- これは私のお気に入りです)
  3. 私は何かを逃した;-)

私が言ったように、それは2番目のオプションだと思います。それが少し役立ったことを願っています。

于 2013-09-20T11:29:34.797 に答える