2016.
06.
23
12:50:03
結論から書くと、変数
$http_response_header[0]
の中身を見ると、HTTPステータスコードが分かります。
配列
$http_response_header
にHTTPレスポンスヘッダが入っていて
$http_response_header[0]
にHTTPステータスコードが
のような形で入っていますよ。
ただし、存在しないドメイン名を指定した場合は「$http_response_header」が「NULL」になります。
ご注意ください。
それでは、詳細を書いていきます。
file_get_contents()関数を使って、Webページの中身を取得していたのですけどね。
存在しないページのURLを指定したり(404エラーになる場合)
BASIC認証がかかったページのURLを指定したり(401エラーになる場合)すると
falseが返ってきます。
まぁ、ページが取得できませんからね。
それ自体は問題無いのですが、失敗した原因(HTTPステータスコード)を知りたかったのです。
どうやるの(--?
Google先生、教えてけろ。
ふむふむ(--)
なるほど!
URLを指定してfile_get_contents()関数を実行すると、配列
$http_response_header
にHTTPレスポンスヘッダが入ってくるようです。
例えば、こんなコードを実行したところφ(--)
こんな結果が表示されましたφ(--)
最初の要素が
になっていますね。
ということは
$http_response_header[0]
を指定すれば、HTTPステータスコードが取得できるようです。
あと、ついでなので数字の部分だけ抜き出すようにしましょうか。
やり方はいろいろあるでしょうが、かっこいいやり方を考えるのが面倒くさいので、単純に
1.半角スペースで分割
2.2番目の要素を取得
にしますね。
ほんで、できあがったのが、こんなコードですφ(--)
実行すると、こんな結果が表示されますφ(--)
なお
は
を1行で書いたものです。
横着して、ごめんなさい。
取りあえず、これでHTTPステータスコードが取得できましたね。
そんな感じ\(--)/
……と終わらせたいのですが、1つ大事な注意点があります。
それは
存在しないドメイン名を指定すると「$http_response_header」が「NULL」になる
ことです。
例えば、これを実行するとφ(--)
こんな結果になりますがφ(--)
こっちを実行するとφ(--)
こんな結果になりますφ(--)
きっと、Webページの取得ではなく、ファイルの取得と判断されるのでしょうね。
NULLの場合にどんな処理をするかは自由ですが、いずれにせよ考慮してあげてください。
個人的には、$http_response_headerがNULLだったら404エラー扱いでもいいかな~と思います。
今度こそ、そんな感じ\(--)/
$http_response_header[0]
の中身を見ると、HTTPステータスコードが分かります。
配列
$http_response_header
にHTTPレスポンスヘッダが入っていて
$http_response_header[0]
にHTTPステータスコードが
"HTTP/1.0 200 OK"
のような形で入っていますよ。
ただし、存在しないドメイン名を指定した場合は「$http_response_header」が「NULL」になります。
ご注意ください。
それでは、詳細を書いていきます。
file_get_contents()関数を使って、Webページの中身を取得していたのですけどね。
存在しないページのURLを指定したり(404エラーになる場合)
BASIC認証がかかったページのURLを指定したり(401エラーになる場合)すると
falseが返ってきます。
まぁ、ページが取得できませんからね。
それ自体は問題無いのですが、失敗した原因(HTTPステータスコード)を知りたかったのです。
どうやるの(--?
Google先生、教えてけろ。
ふむふむ(--)
なるほど!
URLを指定してfile_get_contents()関数を実行すると、配列
$http_response_header
にHTTPレスポンスヘッダが入ってくるようです。
例えば、こんなコードを実行したところφ(--)
<?php
$url = "http://example.com";
$ret = @file_get_contents($url);
var_dump($http_response_header);
$url = "http://example.com";
$ret = @file_get_contents($url);
var_dump($http_response_header);
こんな結果が表示されましたφ(--)
array(14) {
[0]=>
string(15) "HTTP/1.0 200 OK"
[1]=>
string(20) "Accept-Ranges: bytes"
[2]=>
string(29) "Cache-Control: max-age=604800"
[3]=>
string(23) "Content-Type: text/html"
[4]=>
string(35) "Date: Thu, 23 Jun 2016 03:24:55 GMT"
[5]=>
string(22) "Etag: "359670651+gzip""
[6]=>
string(38) "Expires: Thu, 30 Jun 2016 03:24:55 GMT"
[7]=>
string(44) "Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT"
[8]=>
string(22) "Server: ECS (cpm/F9D5)"
[9]=>
string(21) "Vary: Accept-Encoding"
[10]=>
string(12) "X-Cache: HIT"
[11]=>
string(20) "x-ec-custom-error: 1"
[12]=>
string(20) "Content-Length: 1270"
[13]=>
string(17) "Connection: close"
}
[0]=>
string(15) "HTTP/1.0 200 OK"
[1]=>
string(20) "Accept-Ranges: bytes"
[2]=>
string(29) "Cache-Control: max-age=604800"
[3]=>
string(23) "Content-Type: text/html"
[4]=>
string(35) "Date: Thu, 23 Jun 2016 03:24:55 GMT"
[5]=>
string(22) "Etag: "359670651+gzip""
[6]=>
string(38) "Expires: Thu, 30 Jun 2016 03:24:55 GMT"
[7]=>
string(44) "Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT"
[8]=>
string(22) "Server: ECS (cpm/F9D5)"
[9]=>
string(21) "Vary: Accept-Encoding"
[10]=>
string(12) "X-Cache: HIT"
[11]=>
string(20) "x-ec-custom-error: 1"
[12]=>
string(20) "Content-Length: 1270"
[13]=>
string(17) "Connection: close"
}
最初の要素が
[0]=>
string(15) "HTTP/1.0 200 OK"
string(15) "HTTP/1.0 200 OK"
になっていますね。
ということは
$http_response_header[0]
を指定すれば、HTTPステータスコードが取得できるようです。
あと、ついでなので数字の部分だけ抜き出すようにしましょうか。
やり方はいろいろあるでしょうが、かっこいいやり方を考えるのが面倒くさいので、単純に
1.半角スペースで分割
2.2番目の要素を取得
にしますね。
ほんで、できあがったのが、こんなコードですφ(--)
<?php
$url = "http://example.com";
$ret = @file_get_contents($url);
print "HTTPステータスコード:" . explode(' ',$http_response_header[0], 3)[1];
$url = "http://example.com";
$ret = @file_get_contents($url);
print "HTTPステータスコード:" . explode(' ',$http_response_header[0], 3)[1];
実行すると、こんな結果が表示されますφ(--)
HTTPステータスコード:200
なお
print "HTTPステータスコード:" . explode(' ',$http_response_header[0], 3)[1];
は
$ary = explode(' ',$http_response_header[0], 3);
print "HTTPステータスコード:" . $ary[1];
print "HTTPステータスコード:" . $ary[1];
を1行で書いたものです。
横着して、ごめんなさい。
取りあえず、これでHTTPステータスコードが取得できましたね。
そんな感じ\(--)/
……と終わらせたいのですが、1つ大事な注意点があります。
それは
存在しないドメイン名を指定すると「$http_response_header」が「NULL」になる
ことです。
例えば、これを実行するとφ(--)
<?php
$url = "http://example.com/tekitou";
$ret = @file_get_contents($url);
var_dump($http_response_header);
$url = "http://example.com/tekitou";
$ret = @file_get_contents($url);
var_dump($http_response_header);
こんな結果になりますがφ(--)
array(13) {
[0]=>
string(22) "HTTP/1.0 404 Not Found"
[1]=>
string(29) "Cache-Control: max-age=604800"
[2]=>
string(23) "Content-Type: text/html"
[3]=>
string(35) "Date: Thu, 23 Jun 2016 03:37:50 GMT"
[4]=>
string(28) "Etag: "359670651+gzip+ident""
[5]=>
string(38) "Expires: Thu, 30 Jun 2016 03:37:50 GMT"
[6]=>
string(44) "Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT"
[7]=>
string(22) "Server: ECS (cpm/F9B3)"
[8]=>
string(21) "Vary: Accept-Encoding"
[9]=>
string(12) "X-Cache: HIT"
[10]=>
string(20) "x-ec-custom-error: 1"
[11]=>
string(20) "Content-Length: 1270"
[12]=>
string(17) "Connection: close"
}
[0]=>
string(22) "HTTP/1.0 404 Not Found"
[1]=>
string(29) "Cache-Control: max-age=604800"
[2]=>
string(23) "Content-Type: text/html"
[3]=>
string(35) "Date: Thu, 23 Jun 2016 03:37:50 GMT"
[4]=>
string(28) "Etag: "359670651+gzip+ident""
[5]=>
string(38) "Expires: Thu, 30 Jun 2016 03:37:50 GMT"
[6]=>
string(44) "Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT"
[7]=>
string(22) "Server: ECS (cpm/F9B3)"
[8]=>
string(21) "Vary: Accept-Encoding"
[9]=>
string(12) "X-Cache: HIT"
[10]=>
string(20) "x-ec-custom-error: 1"
[11]=>
string(20) "Content-Length: 1270"
[12]=>
string(17) "Connection: close"
}
こっちを実行するとφ(--)
<?php
$url = "http://aaaaaaaaaaaaaaaaexample.com/";
$ret = @file_get_contents($url);
var_dump($http_response_header);
$url = "http://aaaaaaaaaaaaaaaaexample.com/";
$ret = @file_get_contents($url);
var_dump($http_response_header);
こんな結果になりますφ(--)
NULL
きっと、Webページの取得ではなく、ファイルの取得と判断されるのでしょうね。
NULLの場合にどんな処理をするかは自由ですが、いずれにせよ考慮してあげてください。
個人的には、$http_response_headerがNULLだったら404エラー扱いでもいいかな~と思います。
今度こそ、そんな感じ\(--)/