我有一个PHP脚本“A”,它启动另一个PHP脚本“B”,运行长达5个小时。我使用curl函数。但我的问题是脚本“A”不确定是否保持与脚本“B”的连接。我已经更改了max_execution_time,超时,套接字超时等......但没有任何帮助。
我是否需要使用curl或其他东西向脚本“B”发送标题?
$curl_header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text
/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$curl_header[] = "Cache-Control: max-age=0";
$curl_header[] = "Connection: keep-alive";
$curl_header[] = "Keep-Alive: 84600";
$url = 'http://test.de/test_B.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);
curl_setopt($ch, CURLOPT_TIMEOUT, 84600);
curl_setopt($ch, CURLOPT_NOSIGNAL, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
$curl_errno = curl_errno($ch);
curl_close($ch);
`
答案 0 :(得分:1)
如果脚本“B”需要很长时间才能完成,那么在执行期间放置一些保持连接存活的echo "something"; flush();
会很有用。
最近我发生了类似的执行。
答案 1 :(得分:0)
让脚本B将其输出存储在某处,然后在5小时后连接并检查。 HTTP服务器不是为这些时间设计的,您可能会遇到任何类型的超时。
答案 2 :(得分:0)
您可以使用以下架构:
脚本A调用脚本B,它在后台通过shell请求运行脚本C并返回一些标识符。基本上,脚本B只启动将在后台运行的5小时工作,您不必保持连接。您可以将进度存储在数据库或某个文件中。
然后,脚本A可以通过调用一些回显接口来调用该5小时脚本C的进度,让我们称之为脚本D,它将读取数据库或文件,并跟踪脚本C与它的任务有多远。