我有一个代码向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);
答案 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);
答案 1 :(得分:1)
当您使用cURL访问页面的标题时,即使内部存在长时间运行的任务,也会执行整个PHP文件。这是因为header函数可能会覆盖HTTP标头。
如果您不想挂断,我的建议是使用命令行而不是函数来复制您的文件:而不是copy($source, $target)
,如果您正在使用,请运行以下 Linux系统:
$source = escapeshellarg($source);
$target = escapeshellarg($target);
exec("cp $source $target &");
&
符号将在后台执行命令(因此,如果副本需要3个secondes,它将在后台运行,而不会挂起您的PHP文件)。