get_headersでhttpsにアクセスしたらエラーが出たのでcurlにしたメモ
リンク切れチェックのためにget_headersでhttpsのページにアクセスしたら以下のエラーが出たのでその対処方法
PHP Warning: get_headers(): Failed to enable crypto in ...
とりあえずget_headersをあきらめてhttpsのときはcurlを利用するように変更した。
以下完成形。
$url = 'https://example.com/aaa/bbb'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_SSLVERSION, 1); if(curl_exec($ch) === false) { echo 'Curl error: ' . curl_error($ch); } $info = curl_getinfo($ch); echo $info['http_code']; curl_close($ch);
上記のコードでhttpsの場合のステータスコードが
取得できるようになった。
エラーを取得しておかないとなんでエラーになったか不明なので
以下のところが大事かも。
if(curl_exec($ch) === false) { echo 'Curl error: ' . curl_error($ch); }
あと、特定のURLにアクセスした際に以下のエラーがでました。
Curl error: Unknown SSL protocol error in connection to ...
これはPHPが自動で設定しているSSLプロトコルでは駄目と
いうことらしいので
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
上記のように「TLSv1」を指定しました。
その他のCURLOPT_SSLVERSIONは以下のページに記載されてます。
curl_setopt
http://php.net/manual/ja/function.curl-setopt.php