我用下面的代碼,以確定是否一個的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()從默認的Off設置爲On。
感謝您的任何意見。
沒有辦法我想解決這個問題,我仍然不明白爲什麼行爲突然改變。
但是下面的幫助函數現在用來檢查請求的有效性。
$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;
}
爲什麼它會失敗? – putvande
'file_get_contents'成功檢索到URL的內容,我不知道你爲什麼期望它返回false。作爲一般的經驗法則:您正在向外部系統發出HTTP請求。這是一個相當複雜和昂貴的行動,可能會有幾個可能的結果。試圖在具有單一功能的情況下內聯執行所有這些過於簡單化。圍繞這個動作寫更多的代碼行,足以處理你需要處理的事情。 – deceze
在我們之前的主機上,上面的方法完美運行,我說它應該失敗,因爲在給定的url上沒有在battle.net上的json對象。 'http:// us.battle.net/api/wow/character/magtheridon/ronuburggundy'應該失敗,並且'http:// us.battle.net/api/wow/character/magtheridon/ronburggundy'應該返回一個json目的。 – Vigs