matsuoka

file_get_contents関数が動かなかった場合の方法

cURL

PHPのファイルの内容を取得するfile_get_contents関数でサーバーの設定によっては、データの取得ができないケースがありました。サーバの設定を変更できない場合のデータの取得方法を調べてみました。
そのような場合、cURLを使用してデータを取得することができます。

例:) Instagram APIを使用する際、JavaScriptのみで使用するとアクセストークン内容が見えてしまう状態になりますので、アクセストークンを使用したJSON形式のデータの取得はPHPで行い、受け取ったJSON形式データをJavaScriptで表示する方法がよく使用されています。

JavaScript

// インスタグラムのデータ取得
$.ajax({
 url: '/get.php',
  dataType: 'json',
 success: function(data) {
       $('#instagram-output').append(instagramInsertData(data));
 }
});

// インスタグラム挿入のデータ作成
function instagramInsertData(data) {
  var insert = '
<ul class="clearfix"">';
   for (var i = 0; i < data.length; i++) {
      insert += '
<li>';
           insert += '<a href="' + data[i]['link'] + '" target="_blank">';
         insert += '<img src="' + data[i]['images']['standard_resolution']['url'] + '">';
          insert += '</a>';
       insert += '</li>';
  };
  insert += '</ul>';
  return insert;
}

インスタグラム挿入のデータ作成 get.php (file_get_contentsを使用)

<?php
$accessToken = 'アクセストークン内容';
$count = 11; // 取得件数
// 取得
$url = 'https://api.instagram.com/v1/users/self/media/recent?access_token=' . $accessToken . '&count=' . $count;
$jsonData = @file_get_contents($url);
// 整形
~
// 出力
~

上記の$jsonDataの結果がnullとなり、JSON形式のデータが取得できませんでした。
phpinfo関数でサーバ情報を確認しましたが、特に問題は見つかりませんでした。
file_get_contents関数以外でデータを取得する方法を調べてみるとcURLを使用してデータを取得することができました。

インスタグラム挿入のデータ作成 get.php (cURLを使用)

<?php
$accessToken = 'アクセストークン内容';
$count = 11; // 取得件数 // 取得 $url = 'https://api.instagram.com/v1/users/self/media/recent?access_token=' . $accessToken . '&count=' . $count;
$result = curl_get_contents( $url, 120 ); 
$arrayx = json_decode($result, true);
// 出力
if( $arrayx['data'] ) {
  echo json_encode($arrayx['data']);
}

function curl_get_contents( $url, $timeout ){
    $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 );
    $result = curl_exec( $ch );
    curl_close( $ch );
    return $result;
}

参考

お問い合わせはこちら