首頁 後端開發 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 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++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的回應頭訊息

Nginx timeout逾時如何配置 Nginx timeout逾時如何配置 May 12, 2023 pm 10:07 PM

Nginx timeout逾時如何配置

為什麼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) from e,怎麼解決

怎樣透過幾個步驟取得您的 Steam ID? 怎樣透過幾個步驟取得您的 Steam ID? May 08, 2023 pm 11:43 PM

怎樣透過幾個步驟取得您的 Steam ID?

如何在Java中使用URL編碼和解碼 如何在Java中使用URL編碼和解碼 May 08, 2023 pm 05:46 PM

如何在Java中使用URL編碼和解碼

win11 clock watchdog timeout藍色畫面怎麼解決? win11 clock watchdog timeout藍色畫面怎麼解決? Feb 14, 2024 pm 04:00 PM

win11 clock watchdog timeout藍色畫面怎麼解決?

在Vue應用程式中使用axios時出現「Error: timeout of xxxms exceeded」怎麼辦? 在Vue應用程式中使用axios時出現「Error: timeout of xxxms exceeded」怎麼辦? Jun 24, 2023 pm 03:27 PM

在Vue應用程式中使用axios時出現「Error: timeout of xxxms exceeded」怎麼辦?

主機板上的數位音訊輸出介面-SPDIF OUT 主機板上的數位音訊輸出介面-SPDIF OUT Jan 14, 2024 pm 04:42 PM

主機板上的數位音訊輸出介面-SPDIF OUT

See all articles