PHPスクリプト内からPerlスクリプトを実行しようとしています。exec、popen、proc_openなどのさまざまな方法を使用してこれを機能させましたが、古き良きGoogleが答えをくれない回避すべき問題がいくつかあります。
PHPファイル内から.plスクリプトを実行する必要があります(数値であるスクリプトに1つの変数を渡す)が、.plが完了するまでphpスクリプトが待機しないようにする必要があります(.plは4〜5時間かかる可能性があります)サーバー上で実行します)。perlスクリプトからの戻り出力は期待していないので(perlスクリプトはその出力をmysql dbに記録します)、サーバー上で実行してphpスクリプトを続行させるだけで済みます。
apache、php、mysql を実行している Windows マシンで実行する場合、乗り越えなければならないいくつかの障壁があります。
Linux のソリューションを見たことがあると思いますが、Windows マシンにとどまる必要があります。
現在、次のコードを使用して proc_open アプローチを試みています (proc_open 行の 35 は、perl スクリプトに渡す必要があるテスト ID です)。
$descriptorspec = array(
0 => array("pipe","r"),
1 => array("pipe","w"),
2 => array("file","./error.log","a")
) ;
proc_close(proc_open('perl perlscript.pl 35', $descriptorspec, $pipes));
$i = 0;
while ($i < 1000) {
echo ++$i;
}
現在、このコードは perl スクリプトを実行しますが、(テストのためだけに) その後に配置した while ループは実行されません (perl スクリプトが終了するのを待って実行するかどうかを確認していません)。 .