PHP Если file_get_contents не работает, сделайте это вместо этого

У меня есть функция для перевода текущей текстовой строки с использованием API-интерфейса Free Bing. Я просто хочу убедиться, что что-то не удастся или что-то происходит с идентификатором приложения или я перехожу на запросы, я не хочу, чтобы большая ошибка отображалась.

Код, который у меня есть сейчас:

$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 так что, по крайней мере, что-то показывает.

Благодаря!

Вы пытались провалить его намеренно, чтобы узнать, что происходит?

Если это исключение, просто поймайте его и обработайте его …

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

Если есть ошибка, выводимая функцией, просто @, чтобы скрыть ошибку и обработать неправильный вывод $ translate_feed или $ translate вручную.

Вы можете попытаться скомпрометировать его, просто передав недопустимый URI для file_get_contents, а затем принудительно загрузите не XML или недопустимый XML в simplexml_load_string, чтобы узнать, что произойдет.

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

if( !$translate_feed) return "Failed";

 $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; 

Вы можете сделать это

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

в локальной области создается переменная $ 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); } }