file_get_contentsで証明書エラーを無視する方法

こんにちは、さるまりんです。

PHPのfile_get_contentsで別サーバーにあるファイルをダウンロードするプログラムを書いていました。

https://〇〇〇〇.com/images/△△△.pngをダウンロードすると言うシンプルなことです。

$file = file_get_contents("https://〇〇〇〇.com/images/△△△.png");

上記の様なコードで実現できるのですが、次の様なエラーが発生しました。

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

certificate verify failed

証明書確認のエラーです。これはサイトが無効な証明書を使っているときに出るのですが、それでもアクセスするときがあります。その場合このエラーを無視しなければなりません。

どうしましょう?

file_get_contentsで証明書エラーを無視

次のコードで実現できます。

$url = "https://〇〇〇〇.com/images/△△△.png";
$options['ssl']['verify_peer']=false;
$options['ssl']['verify_peer_name']=false;
$file = file_get_contents($url, false, stream_context_create($options));

証明書が無効でもアクセスする?と言うところに疑問はありますが、これでエラーは発生せずにダウンロードしたいファイルを取得することができます。

file_get_contents()はいろんな使い方ができます。POSTしたりBasic認証を通してみたり、3つ目の引数でいろんなことをコントロールできそうです。

読んでくださってありがとうございます。

それではまた!