2011-12-29 60 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); 
    } 
} 
相关问题