main.phpとtest.phpがあります。
- test.phpはmain.phpで実行する必要があります
- 両方のスクリプトを無限に実行する必要があります。
- main.phpは、 test.phpが実行されているかどうかを定期的にチェックし、実行されていない場合 (エラーが発生した場合) に再度実行する必要があります。
- エラーログも必要です。
- main.phpが受信した場合、それはtest.php
'test stop'
に送信'close'
され、test.phpは停止する必要があります (実行後に注文 (など) をmain.phpに送信する方法がわかりませんか?)'test stop'
私はこのサンプルを持っています:
main.php :
<?php
function execute(){
$desc = array(
0 => array('pipe', 'r'),
1 => array('pipe', 'w'),
2 => array('file', 'log.txt', 'a')
);
$cmd = "start /b C:\wamp\bin\php\php5.4.3\php.exe test.php";
$p = proc_open($cmd, $desc, $pipes);
$res[0] = $p;
$res[1] = $pipes;
return $res;
}
$res = execute();
while(1) {
$status = proc_get_status($res[0]);
if (!$status['running']) {
$res = execute();
}
if ( trim(fgets(STDIN)) == 'stop test' ) {
fwrite($res[1][0], 'close');
fclose($res[1][0]);
fclose($res[1][1]);
fclose($res[1][2]);
proc_close($res[0]);
break;
}
}
?>
test.php :
<?php
while (1) {
// ---------
// other commands
// ---------
// ---------
$status = trim(fgets(STDIN));
if ($status == 'close') exit();
}
?>
これは私のコードの要約でしたが、正しく動作しません。
たとえば、スクリプトがtest.php$status = trim(fgets(STDIN));
のこの行に到着すると、入力があるまで待機し、入力を送信しない場合、スクリプトは停止し、残りのコードを実行しませんが、スクリプトをループで実行し、main.phpまで注文を実行します。彼に入力を渡します。
私は窓に取り組んでいます。