PHP如果file_get_contents失败,请改为执行此操作

时间:2011-12-29 20:50:15

标签: php

我有一个使用Free Bing翻译API翻译当前文本字符串的功能。我只是想确定是否有任何内容失败或者应用程序ID发生了什么事情,或者我继续处理请求,我不希望显示大错误。

我现在的代码是:

$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所以至少某些示出。

谢谢!

7 个答案:

答案 0 :(得分:15)

你有没有尝试过失败,看看会发生什么?

如果这是一个例外,请抓住并处理它......

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

如果函数输出错误,只需@来隐藏错误并手动处理$ translate_feed或$ translate的错误输出。

您可以尝试通过简单地将无效的URI传递给file_get_contents然后强制将非XML或无效的XML提供给simplexml_load_string以查看会发生什么来尝试失败。

答案 1 :(得分: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";
}

答案 2 :(得分:3)

/*
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/');

答案 3 :(得分:3)

你可以这样做

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

答案 4 :(得分:0)

if( !$translate_feed) return "Failed";

答案 5 :(得分: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;

答案 6 :(得分: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);
    }
}