cURL请求页面获取标题而不等待加载页面内容

时间:2013-04-27 13:32:24

标签: php curl

我有一个代码向PHP页面发送请求以获取它的标头。问题是,在该页面上,执行copy()函数并且cURL要么等待整个页面加载(完成复制),要么如果我将超时设置为2-3秒则返回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);

2 个答案:

答案 0 :(得分:2)

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

来自PHP Doc

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 Doc

答案 1 :(得分:1)

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

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

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

&符号将在后台执行命令(因此,如果副本需要3个secondes,它将在后台运行,而不会挂起您的PHP文件)。