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