解决get_headers无法获取HTTP状态码的方法
get_headers获取不到http状态码可能是因为请求的URL不存在或者网络连接出现问题。解决方法如下: 1. 检查请求的URL是否正确,确保能够正常访问。 2. 使用curl命令或者其他工具测试URL是否可以正常访问,获取到正确的http状态码。 3. 如果网络连接没有问题,可以尝试设置get_headers的参数,例如设置超时时间、禁用重定向等。 4. 如果以上方法都无法解决问题,可以考虑使用其他方法获取http状态码,例如使用file_get_contents函数结合stream_context_create函数。
有一个项目需要检测网站HTTP状态码来判断,菜鸡源码使用get_headers函数检查状态,apache环境下状态为200,但用Nginx它给了我 301状态。
所以很明显get_headers在某些情况下不兼容,那么我们只能使用兼容性更高的curl 方法了,参考代码如下:
$url='https://www.caijicaiji.com';$ch=curl_init($url);curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0(WindowsNT6.1;WOW64;rv:25.0)Gecko/20100101Firefox/25.0");curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);curl_exec($ch);$info=curl_getinfo($ch);curl_close($ch);var_dump($info);
我收到的 var_dump 输出:
array(26){["url"]=>string(61)"https://www.google.co.uk/?gws_rd=cr&ei=fIaOUsflOqnG0QXy74DYDg"["content_type"]=>string(24)"text/html;charset=UTF-8"["http_code"]=>int(200)["header_size"]=>int(2462)["request_size"]=>int(493)["filetime"]=>int(-1)["ssl_verify_result"]=>int(0)["redirect_count"]=>int(2)["total_time"]=>float(0.286363)["namelookup_time"]=>float(7.1E-5)["connect_time"]=>float(0.011754)[“预传输时间”]=>float(0.082954)[“大小上传”]=>float(0)[“大小下载”]=>float(119772)[“速度下载”]=>float(418252)["speed_upload"]=>float(0)["download_content_length"]=>float(262)["upload_content_length"]=>float(0)["starttransfer_time"]=>float(0.156201)["redirect_time"]=>float(0.076769)[“certinfo”]=>数组(0){}[“primary_ip”]=>字符串(14)“173.194.34.183”[“primary_port”]=>int(443)[“local_ip”]=>string(12)"192.168.0.15"["local_port"]=>int(54606)["redirect_url"]=>string(0)""}
完美解决了Nginx不支持get_headers函数。