スマートフォンやhtml5+CSS3など新技術に四苦八苦。jQuery、AjaxなどJavaScriptも難しいですね。そんなWebに悩む人のネタ帳です。

PHPの関数「file_get_contents」でAPIを利用した情報を取得することがあります。
但し、対象が「https」で始まるurlの場合に、情報が取得できません。
何度もこの問題に直面し、その度に頭を悩ませてしまいます。記憶力が。。。
というわけで、ここでしっかりメモを残しておきます。

「file_get_contents」でhttpsから始まる情報にアクセスできない

例えばAPIなどを利用するにあたり、その情報にアクセスするために以下のようなソースを記述します。

if(($res = @file_get_contents($url)) === false){
	(略)
}

ここで、$urlの中身が「https」で始まるurlの場合に、情報の取得に失敗してエラーになってしまいます。

Notice (8): Undefined variable: http_response_header xxx, line 688]
Notice (8): Undefined offset: 2 [xxx, line 688]
Notice (8): Undefined offset: 1 [xxx, line 688]

このようなエラーです。「xxx」はファイルパスです。

「allow_url_fopen」を有効にする

この問題を解決する方法をwebで検索すると、以下の方法が多くヒットします。
「phpの設定でallow_url_fopenを有効にする」
具体的にはphp.iniをテキストエディタで開き、以下の部分を「On」にします。

allow_url_fopen = On

一般的にはこれで解決することが多いようですが、私の場合は別件です。
私のケースではxamppを利用しているのですが、そもそもxamppではデフォルトで「allow_url_fopen」の値は「On」なんですよね。

「openssl」を有効にする

私のケースでの正解はこれです。「openssl」を有効にします。
Opensslの詳細はこちらでは触れませんが、SSLを利用するためにPHPの設定でライブラリを読み込み、有効にします。
「php.ini」をテキストエディタで開き、「extension」を読み込んでいる個所の末尾にでもこの1行を追加します。もしくは、該当する行がコメントアウトされている場合はコメントアウトを解除して、有効にします。

extension=php_openssl.dll

そのあと、Apacheを再起動してアクセスしてみれば、エラーは発生しません。問題解決です。

毎度、このエラーに出くわしては、具体的なエラーログも見つけられずに、時間を費やしてしまいます。
まだまだ勉強不足だな。

このエントリーをはてなブックマークに追加

Pingback & Trackback

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Monthly Archives

Search