get_headers関数でhttp://〜だとOKで、https://〜だとエラーになる原因について
PHP5で実装されているget_headers関数の使用例
(1)get_headers(取得対象のURL,0)
$url = https://nobuneko.com/index.html;
$headers_result_array = get_headers($url,0);
print_r($headers_result_array);
//出力結果
Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Thu, 21 Jun 2009 03:38:36 GMT
[2] => Server: Apache
[3] => Connection: close
[4] => Content-Type: text/html; charset=EUC-JP
)
(2)get_headers(取得対象のURL,1)
$url = "https://nobuneko.com/index.html";
$headers_result_array = get_headers($url,1);
print_r($headers_result_array);
//出力結果
Array
(
[0] => HTTP/1.1 200 OK
[Date] => Thu, 21 Jun 2009 03:40:09 GMT
[Server] => Apache
[Connection] => close
[Content-Type] => text/html; charset=EUC-JP
)
get_headers(取得対象のURL,0)とget_headers(取得対象のURL,1)の違いは、生成される配列の違い。(2)のような連想配列の方が分かりやすいかもと思ったが、[date]なら日時を表すことが簡単に分かるけれど、[0]って何のことか分からない。もっと分かりやすいのにしてくれたらよかったのに・・・。
もし、get_headersに渡すURLが「http://〜」なら問題ないのに「https://〜」だとうまく結果を取得できない場合、以下のようなPHPエラーが出ているかもしれない。
Warning: get_headers() [function.get-headers]: This function may only be used against URLs. in D:nobuneko\html\test.php on line 51
このエラーについては、URLが正しいのであれば、PHPの設定に問題があるかもしれない。
phpからhttpsへの通信(SSL通信)ができる設定になっているかをphpinfo()とphp.iniで確認する。
※以下に、WindowsでPHP5を使用している場合の例を記載する。
<PHPからhttpsに接続できない設定例>
★phpinfo()
Registered PHP Streams:php, file, data, http, ftp, compress.zlib
Registered Stream Socket Transports:tcp, udp
→httpsの記述が見あたらない。この設定だとPHPからhttpsのページにアクセスできない。
★php.ini
;extension=php_openssl.dll
→「extension=php_openssl.dll」がコメントアウトになっている。
<PHPからhttpsに接続できる設定例>
★phpinfo()
Registered PHP Streams php, file, data, http, ftp, compress.zlib, https, ftps
Registered Stream Socket Transports tcp, udp, ssl, sslv3, sslv2, tls
→httpsの記述がある。PHPからhttpsページへのアクセスができる。
★php.ini
extension=php_openssl.dll
→「extension=php_openssl.dll」がコメントアウトになっていない。
<PHPからhttpsに接続できない設定例>のようになっている場合は、php.iniのextension=php_openssl.dllのコメントアウトを解除してApacheを再起動すれば
問題が解決する可能性がある。