由于我必须解释为什么我的问题与问题php background process in windows environment不同,解释是:
首先,我想在php中通过proc_open运行shell脚本,而不是通过exec运行。
从概念上讲,它在我的脑海中是一个孤立的线程(如果它成功了), 它将在后端运行,填充日志文件或排队的数据库表 从中可以查看我的结果。
我有一个proc_open代码,最终在cli中运行一个php文件:
文件:proc-open.php
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("file", "midirectory_path/error-output.txt", "a")
);
$process = proc_open("php -f myphpfile.php", $descriptorspec, $pipes, "midirectory_path");
if (!is_resource($process)) {
die ('Could not execute RUNMYSCRIPT');
}
sleep(10);
fwrite($pipes[0], 'q');
$result = fread($pipes[1], 1);
echo stream_get_contents($pipes[1]);
proc_close($process);
我想点击这行代码,但不想等待响应: 文件:proc-call.php
$url = 'http://example.com/proc-open.php';
$parts=parse_url($url);
$fp = fsockopen($parts['host'],isset($parts['port'])?$parts['port']:80, $errno, $errstr, 30);
$out = "GET ".$parts['path']." HTTP/1.1\r\n";
$out.= "Host: ".$parts['host']."\r\n";
$out.= "Content-Length: 0"."\r\n";
$out.= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
fclose($fp);
但它没有调用proc_open,我在任务管理器中看不到任何php cli。 我在浏览器中点击http://example.com/proc-call.php,它返回200。
需要帮助。