WindowsでPHPスクリプトを別のスクリプトを非同期で起動させる方法を見つけようとしていましたが、popen()を使用して解決策を見つけました。最初はうまくいきませんでしたが、遅れを加えれば少し良くなったようです。しかし、さらなる調査では、主なスクリプトが終了した直後に、二次的プロセスが終了したようです。メインスクリプトの停止時に非同期PHPスクリプトが停止する
ここでは二次のスクリプトを起動し、コードの該当ビットが
$fp = fopen($argv[1] . '.txt', 'w');
for ($i = 0; $i < 100; $i++) {
fwrite($fp, $i ."\n");
sleep(1);
}
fclose($fp);
これは単なる証拠オブです... ...
$cmd = <<<EOT
start "php" /b "C:\\Program Files (x86)\\iis express\\PHP\\v7.1\\php.exe" -f="$script" $args
EOT;
$p = popen($cmd, 'r');
usleep(500000);
pclose($p);
そして二スクリプトの関連部分です概念のもの。基本的に、2番目のスクリプトはファイルを開き、1秒間隔で0〜99の数値を書き込みます。
問題は終了していないようです。睡眠が500msの場合は約15にしかなりません.200msの場合は約8時間になります。
私はそれが何らかのプロセス所有権問題であると推測しています。例えば。プライマリスクリプトが終了すると、それは子プロセスを強制終了しますが、私は確信が持てませんし、他に何を試みるべきかというアイデアがなくなりました。
(Windows 10上でIISを実行中)
ご意見はありますか?
これは素晴らしいことです。私はそれをちょうど "php"で動作させることができましたが、それは実際には今実行したいバージョンではなく、完全なパスを使用するだけで消えてしまったようです。何か案は? – xtempore
PHPのバージョンではありませんか?あなたの環境変数(パス用)に割り当てられているphp.exeを確認してください。個人的に私はApache用に7を、CLI用に5.5を実行します。ユニットテストでは、そのバージョンに対してテストできます。 – ArtisticPhoenix
変更方法がわからない場合は、https:// john-duganを参照してください。 com/add-php-windows-path-variable/ – ArtisticPhoenix