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