Intereting Posts
перенаправление URL неверно с использованием .htacess в php Выбор случайной записи из базы данных MySQL Вложенный массив в список HTML Как отображать цену продукта с и без налога одновременно в списке продуктов для Prestashop? PHP. Используйте cURL для отправки информации на другую страницу. Как отобразить время выполнения MySQL-запроса в PHP? PHP SoapFault не пойман обработчиками исключений Ошибка Codeigniter «Не удается подключиться к серверу базы данных с помощью предоставленных настроек» Как удалить index.php из codeigniter в стеке битмана Bitnami Как проверить эффективность скрипта PHP PHP короткий уникальный генерации идентификатора с использованием auto_increment? E_NOTICE: Насколько полезно ДЕЙСТВИТЕЛЬНО исправить все? PHP 5: как написать двоичные данные utf-8 – изображение – выводить? jQuery Изменение высоты строки в CSS в зависимости от количества символов PHP: выдать всплывающее предупреждение, а затем перенаправить страницу

Как я могу обработать предупреждение о функции file_get_contents () в PHP?

Я написал PHP-код, подобный этому

$site="http://www.google.com"; $content = file_get_content($site); echo $content; 

Но когда я удаляю «http: //» из $site я получаю следующее предупреждение:

Предупреждение: file_get_contents (www.google.com) [function.file-get-contents]: не удалось открыть поток:

Я попытался try и catch но это не сработало.

Шаг 1: проверьте код возврата: if($content === FALSE) { // handle error here... }

Шаг 2: подавить предупреждение, поставив оператор управления ошибками (т.е. @ ) перед вызовом file_get_contents () : $content = @file_get_contents($site);

Вы также можете настроить обработчик ошибок как анонимную функцию, которая вызывает исключение, и использовать try / catch для этого исключения.

 set_error_handler( create_function( '$severity, $message, $file, $line', 'throw new ErrorException($message, $severity, $severity, $file, $line);' ) ); try { file_get_contents('www.google.com'); } catch (Exception $e) { echo $e->getMessage(); } restore_error_handler(); 

Кажется, что очень много кода, чтобы поймать одну небольшую ошибку, но если вы используете исключения во всем приложении, вам нужно будет сделать это только один раз, вверху (например, в включенном файле конфигурации), и это будет конвертируйте все свои ошибки в Исключения.

Мой любимый способ сделать это довольно просто:

 if (!$data = file_get_contents("http://www.google.com")) { $error = error_get_last(); echo "HTTP request failed. Error was: " . $error['message']; } else { echo "Everything went better than expected"; } 

Я нашел это после экспериментов с try/catch из @enobrev выше, но это позволяет использовать менее длинный (и IMO, более читаемый) код. Мы просто используем error_get_last для получения текста последней ошибки, а file_get_contents возвращает false при сбое, поэтому простое «if» может поймать это.

Вы можете добавить @: $content = @file_get_contents($site);

Это подавит любое предупреждение – используйте экономно! , См. Операции управления ошибками

Изменить: когда вы удаляете «http: //», вы больше не ищете веб-страницу, а файл на вашем диске, называемый «www.google …..»,

Один из вариантов – подавить ошибку, а также исключить исключение, которое вы можете поймать позже. Это особенно полезно, если в коде есть несколько вызовов file_get_contents (), так как вам не нужно подавлять и обрабатывать все их вручную. Вместо этого в один блок try / catch можно выполнить несколько вызовов.

 // Returns the contents of a file function file_contents($path) { $str = @file_get_contents($path); if ($str === FALSE) { throw new Exception("Cannot access '$path' to read contents."); } else { return $str; } } // Example try { file_contents("a"); file_contents("b"); file_contents("c"); } catch (Exception $e) { // Deal with it. echo "Error: " , $e->getMessage(); } 

Вот как я это сделал … Нет необходимости в блоке try-catch … Лучшее решение всегда самое простое … Наслаждайтесь!

 $content = @file_get_contents("http://www.google.com"); if (strpos($http_response_header[0], "200")) { echo "SUCCESS"; } else { echo "FAILED"; } 
 function custom_file_get_contents($url) { return file_get_contents( $url, false, stream_context_create( array( 'http' => array( 'ignore_errors' => true ) ) ) ); } $content=FALSE; if($content=custom_file_get_contents($url)) { //play with the result } else { //handle the error } 

Вот как я справляюсь с этим:

  $this->response_body = @file_get_contents($this->url, false, $context); if ($this->response_body === false) { $error = error_get_last(); $error = explode(': ', $error['message']); $error = trim($error[2]) . PHP_EOL; fprintf(STDERR, 'Error: '. $error); die(); } 

Лучше всего было бы установить собственную ошибку и обработчики исключений, которые будут делать что-то полезное, например, записывать его в файл или отправлять по электронной почте критические сообщения. http://www.php.net/set_error_handler

Вы можете использовать этот скрипт

 $url = @file_get_contents("http://www.itreb.info"); if ($url) { // if url is true execute this echo $url; } else { // if not exceute this echo "connection error"; } 

Поскольку PHP 4 использует error_reporting () :

 $site="http://www.google.com"; $old_error_reporting = error_reporting(E_ALL ^ E_WARNING); $content = file_get_content($site); error_reporting($old_error_reporting); if ($content === FALSE) { echo "Error getting '$site'"; } else { echo $content; } 

Это попытается получить данные, если это не сработает, оно поймает ошибку и позволит вам делать все, что вам нужно в уловке.

 try { $content = file_get_contents($site); } catch(\Exception $e) { return 'The file was not found'; } 
 try { $site="http://www.google.com"; $content = file_get_content($site); echo $content; } catch (ErrorException $e) { // fix the url } set_error_handler(function ($errorNumber, $errorText, $errorFile,$errorLine ) { throw new ErrorException($errorText, 0, $errorNumber, $errorFile, $errorLine); }); 

Измените файл php.ini

 allow_url_fopen = On allow_url_include = On 

Вы также должны установить

allow_url_use = Вкл.

в вашем php.ini, чтобы прекратить получать предупреждения.

Прежде чем использовать file_get_contents (), вы должны использовать функцию file_exists (). Таким образом вы избежите предупреждения php.

 $file = "path/to/file"; if(file_exists($file)){ $content = file_get_contents($file); }