file_get_contents() は
ヘッダ情報の保持ルールやタイムアウト処理に癖があるため
返却されるステータスコードや、タイムアウト時に再リクエストなどを行うような
対APIの処理では、それらを知らないと想定していない事態に陥る。
curlの例
private function getApiDataCurl($url)
{
$option = [
CURLOPT_RETURNTRANSFER => true, //文字列として返す
CURLOPT_TIMEOUT => 3, // タイムアウト時間
];
$ch = curl_init($url);
curl_setopt_array($ch, $option);
$json = curl_exec($ch);
$info = curl_getinfo($ch);
$errorNo = curl_errno($ch);
// OK以外はエラーなので空白配列を返す
if ($errorNo !== CURLE_OK) {
// 詳しくエラーハンドリングしたい場合はerrorNoで確認
// タイムアウトの場合はCURLE_OPERATION_TIMEDOUT
return [];
}
// 200以外のステータスコードは失敗とみなし空配列を返す
if ($info['http_code'] !== 200) {
return [];
}
// 文字列から変換
$jsonArray = json_decode($json, true);
return $jsonArray;
}