0

我有一个向 PHP 页面发送请求以获取其标题的代码。问题是,在该页面上,执行了 copy() 函数,并且如果我将超时设置为 2-3 秒,cURL 要么等待整个页面加载(完成复制),要么返回 false。如何在不等待 copy() 函数完成工作的情况下获取页眉?

到目前为止,我的代码是:

$req='page_with_copy_function_in_it.php';
$ch=curl_init($req);
curl_setopt($ch,CURLOPT_NOBODY,true);
curl_setopt($ch,CURLOPT_HEADER,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,2);
$data=curl_exec($ch);
curl_close($ch);
4

2 回答 2

2

如果您不想加载页面内容,则应使用 HEAD 请求。

来自 PHP 文档

CURLOPT_NOBODY:设置 TRUE 以从输出中排除正文。然后将请求方法设置为 HEAD。将此更改为 FALSE 不会将其更改为 GET。

$ch = curl_init();
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt ($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

// Only calling the head
curl_setopt($ch, CURLOPT_HEADER, true); // header will be at output

//HERE IS THE MAGIC LINE
curl_setopt($ch, CURLOPT_NOBODY, true); // HTTP request is 'HEAD'

$content = curl_exec ($ch);
curl_close ($ch);

curl_setopt 文档

于 2013-04-27T13:40:55.257 回答
1

当您使用 cURL 访问页面的标题时,将执行整个 PHP 文件,即使里面有长时间运行的任务。这是因为 HTTP 标头可能会被标头函数覆盖。

如果您不想挂断,我的建议是使用命令行而不是函数来复制文件:而不是,如果您在 Linux 系统上copy($source, $target)运行以下命令:

$source = escapeshellarg($source);
$target = escapeshellarg($target);
exec("cp $source $target &");

&符号将在后台执行命令(因此如果复制需要 3 秒,它将在后台运行并且不会挂起您的 PHP 文件)。

于 2013-04-27T14:11:09.723 回答