6

我有一个 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);

`

4

3 回答 3

1

如果脚本“B”需要很长时间才能完成,那么在执行期间放置一些echo "something"; flush();保持连接活动的内容可能会很有用。

最近发生在我身上的类似处决。

于 2012-11-24T11:23:55.090 回答
0

您可以使用以下架构:

脚本 A 调用脚本 B,该脚本 B 通过后台 shell 请求运行脚本 C 并返回一些标识符。基本上,脚本 B 只是启动将在后台运行的 5 小时工作,您不必保持连接。您可以将进度存储在数据库或某个文件中。

然后,脚本 A 可以通过调用某个回显接口来调用该 5 小时脚本 C 的进度,我们称之为脚本 D,它将读取数据库或文件并跟踪脚本 C 完成任务的程度。

于 2012-11-26T08:13:58.983 回答
0

让脚本 B 将其输出存储在某处,然后在 5 小时后连接并检查。HTTP 服务器不是为这些时间设计的,您可能会遇到任何类型的超时。

于 2012-11-24T15:27:20.917 回答