phpget_headers判断回来是否是200碰到不存在的脚本执行超时
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了phpget_headers判断回来是否是200碰到不存在的脚本执行超时,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2533字,纯文字阅读大概需要4分钟。
内容图文
![phpget_headers判断回来是否是200碰到不存在的脚本执行超时](/upload/InfoBanner/zyjiaocheng/216/72da73ea50ac49388afda3e261016099.jpg)
不存在的IP网址,会一直等待响应,直到函数超时,导致页面迟迟无法显示。
failed to open stream: HTTP request failed!
Fatal error: Maximum execution time of 30 seconds exceeded
设置了 ini_set('max_execution_time', 10);还一样
要不不用这个函数自己写socket了,用这个函数的curl_init,麻烦,各位有啥别好的方法没
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
最后一个参数 $timeout设为5,即可设置最大连接时间5秒,过期函数返回,程序并不会退出
------解决方案--------------------
思路是楼上的,get_headers 只能说php这个函数不完善,咱只有用socket自己写了
由于不能给自己分,我用另外的账号登陆了,以下是完整代码,也给别人做做贡献了
- PHP code
function DoGet($url) { $url2 = parse_url($url); if(!isset($url2['path']))$url2['path']=''; $url2["path"] = ($url2["path"] == "" ? "/" : $url2["path"]); $url2["port"] = (isset($url2["port"])?$url2["port"]:80); $host_ip = @gethostbyname($url2["host"]); $fsock_timeout =2; //2 second if(!($fsock = fsockopen($host_ip, $url2["port"], $errno, $errstr, $fsock_timeout))) { // echo 'fsockopen fail'; return false; } $request = $url2["path"] .(isset($url2["query"]) ? "?".$url2["query"] : ""); $in = "GET " . $request . " HTTP/1.0\r\n"; $in .= "Accept: */*\r\n"; $in .= "User-Agent: Payb-Agent\r\n"; $in .= "Host: " . $url2["host"] . "\r\n"; $in .= "Connection: Close\r\n\r\n"; stream_set_timeout( $fsock , $fsock_timeout ) ; if(!@fwrite($fsock, $in, strlen($in))){ //echo 'fwrite fail'; fclose($fsock); return false; } $status = stream_get_meta_data( $fsock ) ; //发送数据超时 if($status['timed_out'] ) { // echo "Write time out" ; fclose( $fsock ); return false; } $out = null; while($buff = @fgets($fsock, 2048)) { $out .= $buff; //只读取头部信息 if(false!==strpos($out, "\r\n\r\n"))break; } $status = stream_get_meta_data( $fsock ) ; //读取数据超时 if( $status['timed_out'] ) { // echo "Read time out" ; fclose( $fsock ); return false; } fclose($fsock); $pos = strpos($out, "\r\n\r\n"); $head = substr($out, 0, $pos); //http head return $head; } $rs= DoGet("http://www.ba05afasdfsiddf08usfa.com"); if(!$rs)echo 'fail'; else echo $rs;
内容总结
以上是互联网集市为您收集整理的phpget_headers判断回来是否是200碰到不存在的脚本执行超时全部内容,希望文章能够帮你解决phpget_headers判断回来是否是200碰到不存在的脚本执行超时所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。