亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP實現的帶超時功能get_headers函數

2024-05-04 23:31:07
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP實現的帶超時功能的get_headers函數,本文直接給出實現代碼,需要的朋友可以參考下
 

代碼比較多,但是比較簡單,一眼就看穿的,so,文字盡量少寫了。
因為眾所周知的網絡原因,gavatar也開始越來越慢,寫了一個小東西來解決這個問題,過程中遇到了get_headers這個函數,甚是憂傷,記錄下來,以免后來人踩坑。
更新記錄,函數稍微改了一下,返回值基本和之前序列化后的結果一致,暫時沒考慮支持子項也支持數組等(考慮細節性能,還想把沒用的http頭砍掉….)
需求很簡單:獲取圖片的head信息。
調試程序的時候發現這個函數的調用很緩慢,即使綁定ip,有時候都能蹦到20多秒。
尋思這個事情還是該加個超時吧,但是看官方文檔,給出的導出函數接口如下:

復制代碼代碼如下:

array get_headers(string$url[,int$format=0])

你沒有看錯,這個東西沒有超時接口…
上github翻看源碼,期望可以用他的底層實現來重新實現一套:
地址 https://github.com/php/php-src/blob/88ca46d92bc1c426e7c7f7313f0fd2b7dcc33cf6/ext/standard/url.c#L710

 

 

復制代碼代碼如下:

/* {{{ proto array get_headers(string url[, int format])
   fetches all the headers sent by the server in response to a HTTP request */
PHP_FUNCTION(get_headers)
{
char*url;
size_t url_len;
php_stream_context*context;
php_stream*stream;
zval*prev_val,*hdr=NULL,*h;
HashTable*hashT;
zend_long format=0;
                
if(zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC,"s|l",&url,&url_len,&format)==FAILURE){
return;
}
 
/** 省略其他一堆... **/
}
/* }}} */

 

但是很不幸的是,zend_parse_parameters 和 ZEND_NUM_ARGS也都沒有PHP版的導出函數。
于是造輪子開始:

復制代碼代碼如下:

functionget_url_headers($url,$timeout=10)
{
    $ch=curl_init();
 
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_HEADER,true);
    curl_setopt($ch,CURLOPT_NOBODY,true);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
 
    $data=curl_exec($ch);
    $data=preg_split('//n/',$data);
 
    $data=array_filter(array_map(function($data){
        $data=trim($data);
        if($data){
            $data=preg_split('/:/s/',trim($data),2);
            $length=count($data);
            switch($length){
                case2:
                    returnarray($data[0]=>$data[1]);
                    break;
                case1:
                    return$data;
                    break;
                default:
                    break;
            }
        }
    },$data));
 
    sort($data);
 
    foreach($dataas$key=>$value){
        $itemKey=array_keys($value)[0];
        if(is_int($itemKey)){
            $data[$key]=$value[$itemKey];
        }elseif(is_string($itemKey)){
            $data[$itemKey]=$value[$itemKey];
            unset($data[$key]);
        }
    }
 
    return$data;
}

 

對比最后結果:
原版又是蠻長的等待,不知道校驗啥去了(沒繼續追代碼了,有興趣的童鞋可以去跟下玩):

 

復制代碼代碼如下:

Array
(
    [0]=>HTTP/1.0302Found
    [Accept-Ranges]=>bytes
    [Cache-Control]=>max-age=300
    [Content-Type]=>Array
        (
            [0]=>text/html;charset=utf-8
            [1]=>text/html;charset=utf-8
        )
 
    [Date]=>Array
        (
            [0]=>Fri,12Dec201415:35:40GMT
            [1]=>Fri,12Dec201415:35:43GMT
        )
 
    [Expires]=>Fri,12Dec201415:40:40GMT
    [Last-Modified]=>Wed,11Jan198408:00:00GMT
    [Link]=><http://www.gravatar.com/avatar/[省略...]?s=42&d=http%3A%2F%2F[省略...]&r=G>; rel="canonical"
    [Location]=>http://i2.wp.com/[省略...]
    [Server]=>Array
        (
            [0]=>ECS(oxr/838B)
            [1]=>nginx
        )
 
    [Source-Age]=>85
    [Via]=>1.1varnish
    [X-Cache]=>302-HIT
    [X-Varnish]=>14702550881470006304
    [Content-Length]=>0
    [Connection]=>Array
        (
            [0]=>close
            [1]=>close
        )
 
    [1]=>HTTP/1.1504Gateway Timeout
)

 

輪子版返回(瞬間返回,兩者內容略有不同,你仔細看就能發現一些有趣的地方了):

 

復制代碼代碼如下:

Array
(
    [0]=>HTTP/1.1302Found
    [Accept-Ranges]=>bytes
    [Via]=>1.1varnish
    [Cache-Control]=>max-age=300
    [Server]=>ECS(oxr/838B)
    [Content-Type]=>text/html;charset=utf-8
    [X-Varnish]=>14702550881470006304
    [Date]=>Fri,12Dec201420:31:02GMT
    [Location]=>http://i2.wp.com/[省略...]
    [Expires]=>Fri,12Dec201420:36:02GMT
    [Source-Age]=>85
    [Last-Modified]=>Wed,11Jan198408:00:00GMT
    [X-Cache]=>302-HIT
    [Link]=><http://www.gravatar.com/avatar/[省略...]?s=42&d=http%3A%2F%2F[省略...]&r=G>; rel="canonical"
    [Content-Length]=>0
)

 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美猛交ⅹxxx乱大交视频| 一夜七次郎国产精品亚洲| 国产精品色婷婷视频| 51色欧美片视频在线观看| 国产精品v片在线观看不卡| 欧美精品一区二区三区国产精品| 欧美日韩国产色| 中文字幕免费精品一区高清| 国产精品黄页免费高清在线观看| 疯狂做受xxxx欧美肥白少妇| 日本久久久久久久久久久| 日韩在线观看免费网站| 韩国精品久久久999| 久久这里有精品视频| 久久久久久久一区二区三区| 亚洲精品久久7777777| 国产精品日韩专区| 国产亚洲精品久久久久久777| 欧美极品少妇xxxxⅹ喷水| 国产一区二区三区在线播放免费观看| 久久精品视频99| 一区二区三区视频在线| 欧美在线一级va免费观看| 久久国产精品亚洲| 久久99精品久久久久久噜噜| 日韩av免费看| 日韩精品高清在线观看| 4p变态网欧美系列| 97avcom| 51ⅴ精品国产91久久久久久| 国产又爽又黄的激情精品视频| 国产精品va在线| 美日韩精品免费观看视频| 国产精品免费网站| 国产精品爽爽爽爽爽爽在线观看| 亚洲国产欧美精品| 亚洲成人网av| 日韩av中文字幕在线免费观看| 国产剧情日韩欧美| 6080yy精品一区二区三区| 国内免费精品永久在线视频| 91精品国产沙发| 久久久久日韩精品久久久男男| 日韩毛片在线观看| 国产69精品久久久久99| 色综合视频一区中文字幕| 26uuu日韩精品一区二区| 国产精品久久久久久久久久| 国产午夜精品全部视频播放| 欧美丰满少妇xxxxx做受| 日韩视频中文字幕| 亚洲精品国产精品乱码不99按摩| 91网在线免费观看| 久久夜色精品亚洲噜噜国产mv| 久久电影一区二区| 国内精品一区二区三区| 亚洲综合日韩中文字幕v在线| 亚洲国产美女精品久久久久∴| 97热精品视频官网| 韩日欧美一区二区| 亚洲精品美女久久久| 国产成人精品综合久久久| 午夜精品久久久久久久99热浪潮| 国产精品jvid在线观看蜜臀| 高清一区二区三区四区五区| 国产精品视频免费观看www| 欧美一级免费看| 亚洲高清av在线| 日韩专区在线播放| 视频直播国产精品| 亚洲激情自拍图| 亚洲欧美日本精品| 亚洲视频电影图片偷拍一区| 亚洲免费伊人电影在线观看av| 在线观看视频亚洲| 人妖精品videosex性欧美| 久久久精品久久久久| 日本在线精品视频| 97久久超碰福利国产精品…| 亚洲美女动态图120秒| 日韩在线播放一区| 国产精品久久久久久久久久三级| 亚洲图片欧洲图片av| 久热精品视频在线免费观看| 亚洲国产高清自拍| 富二代精品短视频| 亚洲天堂网站在线观看视频| 九九热这里只有精品免费看| 高清视频欧美一级| 久久国产精品网站| 国产精品视频久久| 欧美性极品xxxx做受| 91日本视频在线| 欧美日韩亚洲视频一区| 亚洲第一视频网站| 欧美高清在线播放| 亚洲aaaaaa| 国产精品女主播视频| 91在线观看免费网站| 欧美老女人xx| 欧美成人网在线| 欧美性在线观看| 精品久久久久久国产| 黑人巨大精品欧美一区免费视频| 国产一区二区三区毛片| 亚洲成人在线网| 91免费在线视频| 成人免费视频a| 国产亚洲精品久久久久久| 久久久国产精品亚洲一区| 国产精品久久久久久久一区探花| 精品福利免费观看| 中文字幕在线观看亚洲| 国产精品国产福利国产秒拍| 8090成年在线看片午夜| 欧美人在线视频| 欧美国产在线电影| 成人性教育视频在线观看| 欧美日韩成人黄色| 亚洲一区亚洲二区亚洲三区| 日韩av快播网址| 国产亚洲精品美女| 久久国产精品99国产精| 国产精品福利无圣光在线一区| 国产免费一区二区三区在线能观看| 尤物九九久久国产精品的特点| 国内精品一区二区三区四区| 国产美女久久久| 尤物九九久久国产精品的特点| 欧美裸体男粗大视频在线观看| 欧美午夜www高清视频| 国产精品主播视频| 狠狠色香婷婷久久亚洲精品| 亚洲精品综合久久中文字幕| 欧美性猛交xxxx免费看久久久| 国产91成人在在线播放| 亚洲综合日韩中文字幕v在线| 欧美成人精品在线播放| www国产精品视频| 久久视频在线免费观看| 全色精品综合影院| 一区二区三欧美| 国产精品成人aaaaa网站| 国产美女高潮久久白浆| 亚洲午夜性刺激影院| 一区二区成人av| 亚洲精品97久久| 亚洲综合日韩中文字幕v在线| 国产综合香蕉五月婷在线| 97久久精品人人澡人人爽缅北| 日韩欧美中文免费| 国产成人久久精品| 久久久精品影院| 6080yy精品一区二区三区| 视频一区视频二区国产精品| 538国产精品视频一区二区| 国产婷婷色综合av蜜臀av| 欧美性极品少妇精品网站| 久久影视电视剧免费网站| 欧美性xxxx| 久久精品精品电影网| 日韩有码在线电影| 色偷偷av亚洲男人的天堂| 日韩av电影免费观看高清|