【PHP】cURLのSSL(https)対応

「curl_setopt()」関数で「CURLOPT_SSL_VERIFYPEER」というオプションの設定ができます。
このオプションは、SSL通信時サーバー証明書の検証を行うかどうかを設定するオプションですが、cURL7.10以降はデフォルト値がtrueだそうです。
その為、そのままだと動かない可能性が高いです。

→ 本来は、「CURLOPT_CAINFO」オプションで接続先を検証するための証明書を保持するファイル名を指定するか、「CURLOPT_CAPATH」 オプションで証明ディレクトリを指定するべきですが、

「CURLOPT_SSL_VERIFYPEER」をfalseに設定すれば、証明書の検証を行わず、正常にSSL通信で結果を取得できます:

  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// $chはcURLハンドル

【PHP】get_headersで「https」のヘッダーを取得する時のエラーと解決策

PHPのバージョンは5.2.9です。(環境:Windows + Apache)
get_headers関数に「https」を渡したらエラーになりました:

  $ary_headers = get_headers("https://example.com", 0);
  print_r($ary_headers);

でアクセスをしにいくと、下記のエラーが出ました:

Warning: get_headers() [function.get-headers]: This function may only be used against URLs. in XXXXXXXXXXXXXXX

→ 解決策:
実は、php.iniの中のphp_openssl.dllがコメントアウトになっているだけです。
php_openssl.dllを有効にしてApacheを再起動すれば、エラーが消えます。

;extension=php_openssl.dll
→
extension=php_openssl.dll

※phpinfo()で確認できます:

(1)php_openssl.dllが無効になっている場合、
【Registered PHP Streams】php, file, data, http, ftp, compress.zlib, zip
【Registered Stream Socket Transports】tcp, udp

(2)php_openssl.dllが有効になっている場合、
【Registered PHP Streams】php, file, data, http, ftp, compress.zlib, https, ftps, zip
【Registered Stream Socket Transports】tcp, udp, ssl, sslv3, sslv2, tls

みたいな感じです。