2011-12-29 57 views
4

我有一個函數可以使用Free Bing翻譯器API翻譯當前文本字符串。我只是想確定是否有任何事情發生故障,或者應用程序ID發生了什麼情況,或者我會根據請求進行檢查,我不希望發生大的錯誤。PHP如果file_get_contents失敗,請執行此操作

我現在所擁有的代碼是:

$translate_feed = file_get_contents('http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=' . BING_APPID . '&text=' . urlencode($text) . '&from=en&to=' . $to_lan . ''); 
$translate = simplexml_load_string($translate_feed); 

return $translate[0]; 

我想發生,如果出現任何故障,是的,所以如果我在另一個字符添加到URL,使之無效的話,我希望它只是迴歸$text所以至少東西顯示。

謝謝!

回答

15

你有沒有試過故意故意看到會發生什麼?

如果它是一個例外,正好趕上它,處理它...

try{ 
    //enter code to catch 
}catch(Exception $ex){ 
    //Process the exception 
} 

如果是函數輸出的錯誤,只是@隱藏錯誤以及處理的$ translate_feed或不正確的輸出$手動翻譯。

您可以嘗試通過簡單地將無效URI傳遞給file_get_contents,然後強制將非XML或無效XML提供給simplexml_load_string來查看會發生什麼,從而嘗試故障。

+0

是啊,我得到的線沿線的兩個錯誤:未能打開流:php_network_getaddresses:的getaddrinfo失敗:節點名稱也不servname提供,或者不 – Drew 2011-12-29 20:53:55

+0

已知,那麼,你可以在前面使用@你的函數並檢查函數使用var_dump()輸出的數據是什麼,並最終在繼續之前使用該var_dump來捕獲錯誤... – 2011-12-29 20:54:57

+0

非常感謝。 – Drew 2011-12-29 21:02:04

0

if(!$translate_feed) return "Failed";

5
$translate_feed = file_get_contents('http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=' . BING_APPID . '&text=' . urlencode($text) . '&from=en&to=' . $to_lan . ''); 


if ($translate_feed === false) 
{ 
    echo "failed"; 
} 
0
$translate_feed = file_get_contents('http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=' . BING_APPID . '&text=' . urlencode($text) . '&from=en&to=' . $to_lan . ''); 
$result=$text; 
if ($translate_feed) { 
    $translate = simplexml_load_string($translate_feed); 
    if (is_array($translate)) $result=$translate[0]; 
} 
return $result; 
2
/* 
It's a modified file_get_contents() 
get_contents(filename, use_include_path, context, offset, maxlen) 
*/ 
function get_contents($url, $u = false, $c = null, $o = null) { 
    $headers = get_headers($url); 
    $status = substr($headers[0], 9, 3); 
    if ($status == '200') { 
     return file_get_contents($url, $u, $c, $o); 
    } 
    return false; 
} 

echo get_contents('https://batas.kz/'); 
0

你可以這樣做

if(@file_get_contents("yourFilePath.txt")){ 
    echo "success"; 
} 
0

$http_response_header變量被局部範圍內創建,我們可以用它來檢查頭從返回服務器。下面是我的實現:

public function getData($url) 
{ 
    try { 
     $response = @file_get_contents($url); 
     if (isset($http_response_header)) { 
      if (!in_array('HTTP/1.1 200 OK', $http_response_header) && 
       !in_array('HTTP/1.0 200 OK', $http_response_header)) { 
       throw new \Exception('Server did not return success header!'); 
      } 
     } 
     return $response; 
    } catch (\Exception $ex) { 
     throw new TransportException($ex->getMessage(), $ex->getCode(), $ex); 
    } 
} 
相關問題