get_headers()の PHP ドキュメントを見ると...
array get_headers ( string $url [, int $format = 0 ] )
... 実行するには 2 つの方法があります。
#1 ( format === 0
)
$headers = get_headers($url);
// or
$headers = get_headers($url, 0);
#2 ( format !== 0
)
$headers = get_headers($url, 1);
2つの違いは、配列が数値的にインデックス付けされているかどうかです(最初のケース)...
(ドキュメントからの抜粋)
Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Sat, 29 May 2004 12:28:13 GMT
[2] => Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
... etc
... またはキーでインデックス付け (2 番目のケース) ...
(ドキュメントからの抜粋)
Array
(
[0] => HTTP/1.1 200 OK
[Date] => Sat, 29 May 2004 12:28:14 GMT
[Server] => Apache/1.3.27 (Unix) (Red-Hat/Linux)
[Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
... etc
ドキュメントに記載されている例では、httpステータスコードは数値インデックスに属しています...
[0] => HTTP/1.1 200 OK
...何format
に設定されているかに関係なく。
同様に、私がこれまでに入力したすべての有効な URL get_headers
(つまり、多くの URL ) では、複数のステータス コードが存在する場合でも、ステータス コードは常に数値インデックスの下にありました...
// Output from JSON.stringify(get_headers($url, 1))
{
"0": "HTTP/1.1 301 Moved Permanently",
"1": "HTTP/1.1 200 OK",
"Date": [
"Thu, 11 Aug 2016 07:12:28 GMT",
"Thu, 11 Aug 2016 07:12:28 GMT"
],
"Content-Type": [
"text/html; charset=iso-8859-1",
"text/html; charset=UTF-8"
]
... etc
しかし、私はすべての種類のサーバーですべての URL をテストしたわけではありません (読む:できません)。したがって、ステータス コード インデックスについて絶対的に話すことはできません。
非数値の http ステータス コード indexget_headers($url, 1)
を返す可能性はありますか? それとも、常に数値インデックスの下にステータス コードを返すように関数にハードコードされていますか?
上記の質問に必要または不可欠ではない追加の読み物...
好奇心旺盛な方のために、私の質問は主に最適化に関するものです。GET の代わりにHEAD リクエストを送信したget_headers()
場合でも、すでに非常に遅く、戻り配列を aと regex でくまなく調べた後にのみ悪化します。preg_match
(あなたが見つけるさまざまなCURLget_headers()
メソッドはさらに遅いです.URLの非常に長いリストでそれらをテストしたので、ヒップショット、パートナーをホルスターしてください)
ステータス コードが常に数値でインデックス付けされていることがわかっている場合は、整数以外のインデックスをすべて無視してから、 . 1 つの URL の違いはほんの数分の 1 かもしれませんが、この関数を 1 日中、毎日実行すると、それらの小さなビットが加算されます。preg_match
さらに(編集#1)
私は現在、すべてのリダイレクトの後、最終的なhttp ステータス コード (および URL) についてのみ心配しています。これに似た方法を使用して、最終的な URL を取得していました。
走った後らしい
$headers = array_reverse($headers);
リダイレクト後の最終$headers[0]
ステータス コードは常に in になります。しかし、繰り返しになりますが、これは、ステータス コードが数値でインデックス化されている場合にのみ確実です。