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; }