我正在使用CURL来获取网站的状态(如果它处于启动状态/关闭状态或重定向到另一个网站)。我想使其尽可能地精简,但是效果不佳。
<?php $ch = curl_init($url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,10); $output = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $httpcode; ?>
我把它包装在一个函数中。它工作正常,但性能并不是最好的,因为它会下载整个页面,如果我删除$output = curl_exec($ch);它,它会一直返回0。
$output = curl_exec($ch);
0
有谁知道如何提高性能?
首先确保URL实际上是有效的(字符串,不是空,语法不错),这可以快速检查服务器端。例如,首先执行此操作可以节省大量时间:
if(!$url || !is_string($url) || ! preg_match('/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i', $url)){ return false; }
确保仅获取标题,而不获取正文内容:
@curl_setopt($ch, CURLOPT_HEADER , true); // we want headers @curl_setopt($ch, CURLOPT_NOBODY , true); // we don't need body
整体而言:
$url = 'http://www.example.com'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, true); // we want headers curl_setopt($ch, CURLOPT_NOBODY, true); // we don't need body curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT,10); $output = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo 'HTTP code: ' . $httpcode;