この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:2
ページ更新者:atom
更新日時:2026-05-13 07:13:30

タイトル: GET通信

file_get_contentsの引数にURLを入れればGET通信が出来る。PHPで最も簡単に外部URLを取得する方法のひとつです。

基本例

例文

$url = "http~";

$response = file_get_contents($url);

echo '

' . $response . '
';

クエリパラメータ付きで送る

$params = [
    'q' => 'keyword',
    'limit' => 10,
];
$url = 'https://api.example.com/search?' . http_build_query($params);
$response = file_get_contents($url);

ヘッダ・タイムアウトを指定する場合

stream_context_create でオプションを渡せます。

$opts = [
    'http' => [
        'method' => 'GET',
        'header' => "User-Agent: MyApp/1.0\r\n" .
                   "Authorization: Bearer xxx\r\n",
        'timeout' => 5,
    ],
];
$ctx = stream_context_create($opts);
$response = file_get_contents($url, false, $ctx);

レスポンスヘッダの取得

$body = file_get_contents($url);
// $http_response_header にレスポンスヘッダが入る
print_r($http_response_header);

cURL を使う書き方(推奨)

本番ではエラーハンドリング・タイムアウト・ステータスコード取得が容易なcURLが推奨されます。

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 5,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer xxx'],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status !== 200) {
    throw new Exception("HTTP $status");
}

POSTやJSONを送りたい場合

本格的なHTTP通信は Guzzle 等のライブラリ利用が一般的です。

// Guzzle 例
$client = new GuzzleHttp\Client();
$res = $client->request('POST', $url, [
    'json' => ['name' => 'Taro'],
    'headers' => ['Authorization' => 'Bearer xxx'],
    'timeout' => 5,
]);
$body = (string) $res->getBody();

注意点

  • file_get_contents で URLが使えない場合: php.iniallow_url_fopen = On が必要
  • 失敗時の戻り値: false が返る。Warningも出るので @で抑制せず、エラーハンドリングを書く
  • セキュリティ: ユーザー入力をそのままURLに使うとSSRF(サーバーサイドリクエストフォージェリ)リスク
  • SSL検証: HTTPSを叩く場合、PHPのCA設定(openssl.cafile)が古いと失敗する
  • 本番では cURL または Guzzle 推奨

関連