【PHP】file_get_contentsが使えない環境用にcurlで代替の関数を作成する

  • 投稿 : 2016-11-25
無料系のサーバー(xdomain)などで、file_get_contentsが使えないようになっている場合があります。その時は、cURLをつかって同じような処理を書けば、回避できます。

わかりやすいように、「file_get_contents」を「curl_get_contents」に置き換えればOKなように代替の関数を作成しておくと便利かと思います。

<?php
function curl_get_contents($url, $timeout = 30){

    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_HEADER, false );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

    //タイムアウト時間設定
    curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
    
    //リダイレクトしている場合も読みこむ
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_MAXREDIRS, 10);

    $result = curl_exec( $ch );
    curl_close( $ch );

    //if(curl_errno($ch)) {
    //  
    //}

    return $result;
}

// 動作確認
//$result = file_get_contents( "http://www.yahoo.co.jp/");
$result = curl_get_contents( "http://www.yahoo.co.jp/");
echo $result;


PHP: curl_setopt - Manual
PHP: curl_errno - Manual

こんな感じに書けます。
リダイレクトしてるとうまく取得できないのは、使いだしてからわかったので追加しました。file_get_contentsはたしかにリダイレクトしていても取得できてました。

■参考
PHPメモ : file_get_contentsの代替にcURLを使う - Mach3.laBlog
リダイレクトしているURLからではcurl()でデータを取得できない!? - エンジニア足立のコーディング日記 | 株式会社ディープ

スポンサーリンク
タグ#PHP#code