无法使用file_get_contents()获取数组值,但使用本地文件

时间:2015-10-27 14:36:27

标签: php json decode

JSON链接:http://vgmdb.info/album/79?format=json

我尝试过的代码:

$string = file_get_contents("http://vgmdb.info/album/79?format=json");
$json_a=json_decode($string,true);
$getit = $json_a['release_price']['price'];
echo $getit ;

但我得到一个空白的结果。然后我尝试下载文件并上传到我的服务器:

$string = file_get_contents("jsonfile.json");
$json_a=json_decode($string,true);
$getit = $json_a['release_price']['price'];
echo $getit ;

显示价格值。那么如何在不先下载json文件的情况下获得价格值呢?

5 个答案:

答案 0 :(得分:1)

我在localhost尝试了,我得到了:

  

警告:file_get_contents(http://vgmdb.info/album/79?format=json):   无法打开流:HTTP请求失败! HTTP / 1.1 500内部   服务器错误

这是一个提示,因此您应该在调试代码时始终启用错误。

http 500代码是该服务器的内部错误。我只是尝试在请求中添加一个User-Agent,它起作用了:

$options = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "User-Agent: Mozilla/5.0\r\n"
  )
);

$string = file_get_contents("http://vgmdb.info/album/79?format=json", false, stream_context_create($options));
$json_a=json_decode($string,true);
$getit = $json_a['release_price']['price'];
echo $getit ;

答案 1 :(得分:1)

vgmdb.info的作者修复了因缺少User-Agent标头而导致的错误。原始代码现在有效。

答案 2 :(得分:0)

可能是因为:

in php.ini is disabled to file_get_contents gets data from url-s

答案 3 :(得分:0)

如果已启用fopen wrappers,则可以将URL用作具有此功能的文件名。有关如何指定文件名

的更多详细信息,请参见fopen()

答案 4 :(得分:0)

也许你可以使用curl:

$url = 'http://vgmdb.info/album/79?format=json';
//
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0' );
$response = curl_exec($ch);

curl_close($ch);
$json = json_decode($response);

//result
echo 'price: '.$json->release_price->price;

响应为您提供了一个对象:

//part of object
"release_date": "1999-11-20",
"release_events": [],
"release_price": {
    "currency": "JPY",
    "price": 2854.0
 },