PHPのfile_get_contentsでhttpsのサイトが読み込めない
更新:2021-11-25
Windows上でPHPを実行したときの話。
file_get_contents()関数は、ローカルのファイルだけでなく、以下のように他のサイトのデータも取得できる。
$data = file_get_contents('https://example.com/');
しかし、以下のようなエラーが表示された。
PHP Warning: file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in D:\example\test.php on line 34 PHP Warning: file_get_contents(https://example.com/): failed to open stream: No such file or directory in D:\example\test.php on line 34
レンタルサーバーでは各種拡張モジュールがあらかじめ有効になっているが、Windows版PHPをただZIPを展開して使用している場合、基本的にそれらが無効になっている。
そこで、以下のように php.ini の「Dynamic Extensions」と書かれたセクションにあるOpenSSLモジュールを有効にする必要がある。 セミコロン(;)でコメントアウトされているので、それを外す。
;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; (中略) extension=openssl
以下のコマンドでロードされているモジュールが確認できる。
C:\Users\ユーザー名>php -r print_r(get_loaded_extensions());
Array
(
[0] => Core
[1] => bcmath
[2] => calendar
[3] => ctype
[4] => date
[5] => filter
[6] => hash
[7] => iconv
[8] => json
[9] => SPL
[10] => pcre
[11] => readline
[12] => Reflection
[13] => session
[14] => standard
[15] => mysqlnd
[16] => tokenizer
[17] => zip
[18] => zlib
[19] => libxml
[20] => dom
[21] => PDO
[22] => openssl
[23] => SimpleXML
[24] => xml
[25] => xmlreader
[26] => xmlwriter
[27] => mbstring
[28] => Phar
)
本件はfile_get_contentsだけでなく、getimagesizeなど他のサイトのデータを読み込めるすべての関数で起こり得る。