3

基本的に私の状況は次のとおりです。

  1. ファイルをアップロードする
  2. ファイルに対して外部プロセスを実行する (別のファイルを生成する)
  3. 外部プロセスがダウンしている場合、生成されたファイルを処理します。

現在PHPで次のようにプログラムを実行しています:

$cmd = 'cd the_directory/; ./the_program'
system($cmd);

プログラムは問題なく実行されますが、プログラムの最後に「Enter キーを押して終了します...」と表示されるため、このプログラムはユーザーの入力を待っているため、Apache は無期限にハングします。私たちのパートナーは、このプログラムをバックエンドに完全に統合しており、この問題は発生していないと宣言しています。これまで、PHPで実行したすべての外部プログラムは、この状況の標準と思われるユーザー入力を必要とせずに終了しました。

コードには、ユーザー入力を必要とする終了メッセージが含まれないように思えます。何か不足していますか?または、これを回避する方法はありますか?それとも、コードを変更する必要があるだけですか? ありがとう!

4

2 に答える 2

1

proc_openを試してみるべきだと思います。

これを使用すると、プロセスとして外部コマンドを実行できるだけでなく、パイプを設定してそのプロセスに情報を取得および送信することもできます。

この関数の 3 番目のパラメーターをよく見て、この関数の PHP マニュアルの例を調べてください。

fwrite($pipes[0], '<?php print_r($_ENV); ?>');

そのため、開いたばかりのプロセスの入力パイプに必要なものを書き込むことができます。

于 2012-04-22T20:45:43.463 に答える
0

Windows 環境を使用する場合:

$run_cmd = "cmd /c c:/app_folder/app.exe";
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run($run_cmd, 0, false);

後者の場合、プロセス ウィンドウが最後に閉じられることに注意してください。

UNIX を使用している場合 (まだ自分でテストしていません):

exec('\app_folder\app &');
于 2012-04-22T20:51:04.597 に答える