PHP_PHP チュートリアルにタイムアウト関数が実装された Get_headers 関数
PHPで実装されたタイムアウト関数を備えたGet_headers関数
この記事では主にPHPで実装されたタイムアウト関数を備えたget_headers関数を紹介しますので、必要な方は実装コードを直接提供します
。コードはたくさんありますが、比較的シンプルで一目でわかるので、できるだけ少ない文字数で書きました。
ネットワーク上のよく知られた理由により、gavatar も徐々に遅くなり始めました。この問題を解決するために、私は get_headers 関数に遭遇しました。これは、他の人に迷惑がかかるのを防ぐために記録しました。後で踏まないように。
レコードを更新すると、戻り値は基本的に以前のシリアライズ結果と同じになります(細かいパフォーマンスを考慮して、サブアイテムや配列のサポートも考慮していません)。無駄な http ヘッダーを削除...)
要件は単純です: 画像の先頭情報を取得します。
プログラムをデバッグすると、IP がバインドされている場合でも、この関数の呼び出しが非常に遅いことがわかりました。
この問題についてはタイムアウトを追加する必要があると思いますが、公式ドキュメントを見ると、指定されたエクスポート関数のインターフェイスは次のとおりです:
コードは次のとおりです:
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])
HTTP リクエストに応じてサーバーから送信されたすべてのヘッダーを取得します */
PHP_FUNCTION(get_headers)
{
char*url;
size_t url_len;
php_stream_context*context;
php_stream*stream;
zval*prev_val,*hdr=NULL,*h;
ハッシュテーブル*hashT;
zend_long format=0;
if(zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC,"s|l",&url,&url_len,&format)==FAILURE){
戻る;
}
/**他の多くのものは省略します... **/
}
/* }}} */
しかし残念ながら、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);
スイッチ($length){
ケース2:
returnarray($data[0]=>$data[1]);
休憩;
ケース1:
$data を返す;
休憩;
デフォルト:
休憩;
}
}
},$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]);
}
}
$data を返す;
}
最終結果を比較します:
オリジナルバージョンはかなり長い間待たされます。検証がどうなったかわかりません (私はコードを追求し続けるつもりはありません。興味のある子供は行って遊んでください):
コードは次のとおりです:
配列
(
[0]=>HTTP/1.0302が見つかりました
[Accept-Ranges]=>バイト
[キャッシュ制御]=>max-age=300
[Content-Type]=>配列
(
[0]=>text/html;charset=utf-8
[1]=>text/html;charset=utf-8
)
[日付]=>配列
(
[0]=>2014年12月12日金曜日15:35:40GMT
[1]=>2014年12月12日金曜日15:35:43GMT
)
[有効期限]=>Fri,12Dec201415:40:40GMT
[Last-Modified]=>水曜日、1984年1月11日08:00:00GMT
[リンク]=>
[所在地]=>http://i2.wp.com/[省略…]
[サーバー]=>配列
(
[0]=>ECS(oxr/838B)
[1]=>nginx
)
[出典-年齢]=>85
[Via]=>1.1ワニス
[X-キャッシュ]=>302-HIT
[X-ワニス]=>14702550881470006304
[Content-Length]=>0
[接続]=>配列
(
[0]=>閉じる
[1]=>閉じる
)
[1]=>HTTP/1.1504ゲートウェイタイムアウト
)
ホイール バージョンに戻ります (すぐに戻ります。2 つの内容は少し異なります。注意深く見るといくつかの興味深い点が見つかります):
コードは次のとおりです:
配列
(
[0]=>HTTP/1.1302が見つかりました
[Accept-Ranges]=>バイト
[Via]=>1.1ワニス
[キャッシュ制御]=>max-age=300
[サーバー]=>ECS(oxr/838B)
[Content-Type]=>text/html;charset=utf-8
[X-ワニス]=>14702550881470006304
[日付]=>Fri,12Dec201420:31:02GMT
[所在地]=>http://i2.wp.com/[省略…]
[有効期限]=>Fri,12Dec201420:36:02GMT
[出典-年齢]=>85
[Last-Modified]=>水曜日、1984年1月11日08:00:00GMT
[X-キャッシュ]=>302-HIT
[リンク]=>
[Content-Length]=>0
)

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
