2013-12-17 58 views
0

我用下面的代碼,以確定是否一個的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; 
} 
+0

爲什麼它會失敗? – putvande

+0

'file_get_contents'成功檢索到URL的內容,我不知道你爲什麼期望它返回false。作爲一般的經驗法則:您正在向外部系統發出HTTP請求。這是一個相當複雜和昂貴的行動,可能會有幾個可能的結果。試圖在具有單一功能的情況下內聯執行所有這些過於簡單化。圍繞這個動作寫更多的代碼行,足以處理你需要處理的事情。 – deceze

+0

在我們之前的主機上,上面的方法完美運行,我說它應該失敗,因爲在給定的url上沒有在battle.net上的json對象。 'http:// us.battle.net/api/wow/character/magtheridon/ronuburggundy'應該失敗,並且'http:// us.battle.net/api/wow/character/magtheridon/ronburggundy'應該返回一個json目的。 – Vigs

回答

2

這似乎是在服務器端。服務器告訴你它找不到你正在尋找的角色。撥打file_get_contents()並沒有失敗,所以它不會返回false。

如果您在瀏覽器中訪問該頁面(link)您可以看到該文件確實包含內容。您將不得不測試「未找到字符」的回報內容,然後您將知道搜索字符失敗。

+0

我想我的困惑是來自這種方法變化的行爲。在我以前的主機上,「找不到字符」是返回內容,但由於某種原因它也被評估爲「假」。現在在我們的新主機上,它按照我的問題描述的那樣工作。我不明白爲什麼它的行爲在主機之間突然改變。 – Vigs

+0

在那種情況下,我會認爲它從來沒有在你以前的主機上工作?出於安全原因,某些主機禁用它。 –

+0

在我以前的主機'allow_url_fopen'默認情況下是啓用的,在我的新主機上,我不得不使用自定義的php.ini來啓用它所需的目錄,所以我不確定是否有另一個屬性,我必須設置它的行爲它在我以前的主機上做過,它將返回FALSE而不是失敗字符串。 – Vigs

相關問題