在不等待页面内容加载的情况下,cURL请求到页面以获取标题


cURL request to a page to get headers without waiting for page contents to load

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

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

From 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医生

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

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

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

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