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

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


