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を再起動してアクセスしてみれば、エラーは発生しません。問題解決です。
毎度、このエラーに出くわしては、具体的なエラーログも見つけられずに、時間を費やしてしまいます。
まだまだ勉強不足だな。
XAMPPのSendmailでメールを送信する際に、以下のエラーが出て送信できません。
ネットで調べても出てこないため、解決方法をご存知であればご教授ください。
【エラー詳細】
ファイル:xampp/sendmail/error.log
内容:TLS 1.0 and 1.1 are not supported. Please upgrade/update your client to support TLS 1.2. Visit https://aka.ms/smtp_auth_tls. [TYAPR01CA0083.jpnprd01.prod.outlook.com]
すみません。。本記事とは別件だと思いますが、私には分かりかねます。