PHPで非同期のシェルスクリプト実行を実現する方法
PHPではexec()関数あるいはshell_exec()関数でシェルのスクリプトが実行できます。しかしながら、これらの関数は既定で同期的に実行されます。非同期で実行したい場合、以下の方法を利用できます。
- ネイティブに英語に言い換えてください。1つだけで結構です exec()
- ネイティブに日本語で言い換えると、
- 彼女は外国からの帰国子女です。
exec('sh script.sh > /dev/null 2>&1 &');
- proc_open()
- proc_open()
- proc_open()
$descriptorspec = array(
0 => array("pipe", "r"), // 标准输入
1 => array("pipe", "w"), // 标准输出
2 => array("pipe", "w") // 标准错误输出
);
$process = proc_open('sh script.sh', $descriptorspec, $pipes);
if (is_resource($process)) {
// 非阻塞读取输出
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
// 关闭标准输入
fclose($pipes[0]);
// 读取标准输出和标准错误输出
$output = stream_get_contents($pipes[1]);
$error = stream_get_contents($pipes[2]);
// 关闭标准输出和标准错误输出
fclose($pipes[1]);
fclose($pipes[2]);
// 关闭进程
proc_close($process);
}
ニーズや環境によって、これらの方法はシェルスクリプトの非同期実行を可能にします。