Я пытаюсь обработать метод file_get_contents с ошибкой, поэтому, даже если пользователь вводит неверный веб-сайт, он будет эхо-сообщение об ошибке, а не непрофессиональное
Предупреждение: file_get_contents (sidiowdiowjdiso): не удалось открыть поток: нет такого файла или каталога в C: \ xampp \ htdocs \ test.php в строке 6
- Как определить, действительно ли файл загружен и сохранен, несмотря на предварительную выборку / кеш браузера?
- Как поместить данные HTML в заголовок tcpdf?
- Проверка формы PHP перед отправкой с использованием отдельных файлов html и php
- Стиль не отображается при вызове с использованием идентификатора страницы в wordpress
- Регулярное выражение, преобразующее текстовые списки в html в PHP
Я думал, что если я попытаюсь поймать, он сможет поймать ошибку, но это не сработало.
try { $json = file_get_contents("sidiowdiowjdiso", true); //getting the file content } catch (Exception $e) { throw new Exception( 'Something really gone wrong', 0, $e); }
Попробуйте cURL с curl_error вместо file_get_contents:
<?php // Create a curl handle to a non-existing location $ch = curl_init('http://404.php.net/'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $json = ''; if( ($json = curl_exec($ch) ) === false) { echo 'Curl error: ' . curl_error($ch); } else { echo 'Operation completed without any errors'; } // Close handle curl_close($ch); ?>
file_get_contents
не генерируют исключение в ошибке, вместо этого он возвращает false, поэтому вы можете проверить, является ли возвращаемое значение ложным:
$json = file_get_contents("sidiowdiowjdiso", true); if ($json === false) { //There is an error opening the file }
Таким образом, вы все равно получите предупреждение, если вы хотите его удалить, вам нужно поставить @
перед file_get_contents
. (Это считается плохой практикой)
$json = @file_get_contents("sidiowdiowjdiso", true);
Вы можете выполнить одно из следующих действий:
Установите глобальный обработчик ошибок (который также будет обрабатывать ПРЕДУПРЕЖДЕНИЯ), для всех ваших необработанных исключений: http://php.net/manual/en/function.set-error-handler.php
Или путем проверки возвращаемого значения функции file_get_contents (с помощью оператора ===, поскольку он будет возвращать логическое значение false при ошибке), а затем соответствующим образом обработать сообщение об ошибке и отключить отчет об ошибках функции, добавив «@», вот так:
$json = @file_get_contents("file", true); if($json === false) { // error handling } else { // do something with $json }
В качестве решения вашей проблемы попробуйте выполнить следующий фрагмент кода
try { $json = @file_get_contents("sidiowdiowjdiso", true); //getting the file content if($json==false) { throw new Exception( 'Something really gone wrong'); } } catch (Exception $e) { echo $e->getMessage(); }