file_get_contents在失败时返回字符串而不是FALSE

时间:2013-12-17 09:12:09

标签: php return-value file-get-contents

我使用以下代码来确定file_get_contents是否成功:

if($toon = @file_get_contents('http://us.battle.net/api/wow/character/magtheridon/ronuburggundy'))
{
}

我们最近迁移到一个新的主机,我们正在运行php 5.4.8(我不确定这是否是问题,我们之前有5.4.7)。

$toon = file_get_contents('http://us.battle.net/api/wow/character/magtheridon/ronuburggundy');

应该失败并返回FALSE。但是做一个:

echo $toon;

现在打印:

{"status":"nok", "reason": "Character not found."}

我没有看到导致变化的变化在哪里。

我的目录中有一个自定义的php.ini,但它实际上只将所有allow_url_fopen()设置为On,默认为Off。

感谢您的任何意见。

我没想办法解决这个问题,但我仍然不明白为什么行为会突然改变。

但是下面的帮助函数现在用于检查请求的有效性。

$toon = request_toon("http://us.battle.net/api/wow/character/magtheridon/ronburggundy");

function request_toon($url)
{
$toon = @file_get_contents($url);
    if($toon)
    {
    $toon = json_decode($toon);
        if(array_key_exists('status', $toon))
        {
            return false;
        }
        else
        {
            return $toon;
        }
    }
    return false;
}

1 个答案:

答案 0 :(得分:2)

这似乎是在服务器端。服务器告诉你它找不到你要找的角色。对file_get_contents()的调用没有失败,所以它不会返回false。

如果您在浏览器(link)中访问该页面,则可以看到该文件确实包含内容。您将必须测试“未找到字符”的返回内容,然后您将知道搜索该字符失败。