首页 后端开发 php教程 php get_headers 判断回来是否是200 碰到不存在的脚本执行超时

php get_headers 判断回来是否是200 碰到不存在的脚本执行超时

Jun 13, 2016 pm 01:21 PM
out quot timeout url

php get_headers 判断返回是否是200 碰到不存在的脚本执行超时
不存在的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,麻烦,各位有啥别好的方法没 


------解决方案--------------------

探讨

我可不行让他一直在那执行,最多执行5秒,就让他停了,但是别抱错误

------解决方案--------------------
探讨

晕,csdn原来越迟钝了,老了,回复个多长时间了还没出来

我可不想让php一直执行下去,给他个时间比如5秒,没出结果就不要了,直接判断下面的就行
set_time_limit(5)这样用的话,程序就直接停止了

------解决方案--------------------
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; <div class="clear">
                 
              
              
        
            </div>
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP函数介绍—get_headers(): 获取URL的响应头信息 PHP函数介绍—get_headers(): 获取URL的响应头信息 Jul 25, 2023 am 09:05 AM

PHP函数介绍—get_headers():获取URL的响应头信息概述:在PHP开发中,我们经常需要获取网页或远程资源的响应头信息。PHP函数get_headers()能够方便地获取目标URL的响应头信息,并以数组形式返回。本文将介绍get_headers()函数的用法,以及提供一些相关的代码示例。get_headers()函数的用法:get_header

为什么NameResolutionError(self.host, self, e) from e,怎么解决 为什么NameResolutionError(self.host, self, e) from e,怎么解决 Mar 01, 2024 pm 01:20 PM

报错的原因NameResolutionError(self.host,self,e)frome是由urllib3库中的异常类型,这个错误的原因是DNS解析失败,也就是说,试图解析的主机名或IP地址无法找到。这可能是由于输入的URL地址不正确,或者DNS服务器暂时不可用导致的。如何解决解决此错误的方法可能有以下几种:检查输入的URL地址是否正确,确保它是可访问的确保DNS服务器可用,您可以尝试在命令行中使用"ping"命令来测试DNS服务器是否可用尝试使用IP地址而不是主机名来访问网站如果是在代理

Nginx timeout超时如何配置 Nginx timeout超时如何配置 May 12, 2023 pm 10:07 PM

keepalive_timeouthttp有一个keepalive模式,它告诉webserver在处理完一个请求后保持这个tcp连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。httpkeep-alive,網頁的每一個請求都是http(圖片,css等),而打開http請求是要先建立tcp連接,而如果一個頁面每個請求都要打開及關閉一個tcp連接就會做成資源的浪費.keepalive_timeout就是當一個http請求完成,其tcp連接會存留下

html和url的区别是什么 html和url的区别是什么 Mar 06, 2024 pm 03:06 PM

区别:1、定义不同,url是是统一资源定位符,而html是超文本标记语言;2、一个html中可以有很多个url,而一个url中只能存在一个html页面;3、html指的是网页,而url指的是网站地址。

怎样透过几个步骤获取您的 Steam ID? 怎样透过几个步骤获取您的 Steam ID? May 08, 2023 pm 11:43 PM

现在很多热爱游戏的windows用户都进入了Steam客户端,可以搜索、下载和玩任何好游戏。但是,许多用户的个人资料可能具有完全相同的名称,这使得查找个人资料或什至将Steam个人资料链接到其他第三方帐户或加入Steam论坛以共享内容变得困难。为配置文件分配了一个唯一的17位id,它保持不变,用户无法随时更改,而用户名或自定义URL可以更改。无论如何,一些用户并不知道他们的Steamid,这对于了解这一点非常重要。如果您也不知道如何找到您帐户的Steamid,请不要惊慌。在这篇文

win11 clock watchdog timeout蓝屏怎么解决? win11 clock watchdog timeout蓝屏怎么解决? Feb 14, 2024 pm 04:00 PM

不少的用户在升级完win11系统后会出现蓝屏的现象,例如:clockwatchdogtimeout蓝屏,那么这要怎么解决?用户们可以看看更新驱动程序或者是检查过热问题等等来进行操作,下面就让本站来为用户们来仔细的介绍一下clockwatchdogtimeout蓝屏win11解决方法吧。clockwatchdogtimeout蓝屏win11解决方法1、更新驱动程序:更新CPU和主板驱动程序可能会解决问题。可以通过访问制造商的网站下载最新的驱动程序。2、检查过热问题:过热也可能是导致此错误的原因之一

主板上的数字音频输出接口-SPDIF OUT 主板上的数字音频输出接口-SPDIF OUT Jan 14, 2024 pm 04:42 PM

主板上SPDIFOUT连接线序最近我遇到了一个问题,就是关于电线的接线顺序。我上网查了一下,有些资料说1、2、4对应的是out、+5V、接地;而另一些资料则说1、2、4对应的是out、接地、+5V。最好的办法是查看你的主板说明书,如果找不到说明书,你可以使用万用表进行测量。首先找到接地,然后就可以确定其他的接线顺序了。主板vdg怎么接线连接主板的VDG接线时,您需要将VGA连接线的一端插入显示器的VGA接口,另一端插入电脑的显卡VGA接口。请注意,不要将其插入主板的VGA接口。完成连接后,您可以

在Vue应用中使用vue-resource时出现“Error: timeout of xxxms exceeded”怎么办? 在Vue应用中使用vue-resource时出现“Error: timeout of xxxms exceeded”怎么办? Jun 24, 2023 pm 02:21 PM

在Vue应用开发中,使用vue-resource进行HTTP请求是常见的操作。尽管vue-resource提供了很多方便的功能,但有时我们会遇到“Error:timeoutofxxxmsexceeded”这样的错误提示。这种错误通常是因为请求超时而导致的。那么,在这种情况下,我们应该怎样解决这个问题呢?1.增加请求超时时间首先,我们可以通过增加请

See all articles