Я написал такой код 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 для этого исключения.
Похоже, много кода, чтобы поймать одну маленькую ошибку, но если вы используете исключения во всем приложении, вам нужно будет сделать это только один раз, вверху (например, во включенном конфигурационном файле), и это будет Преобразуйте все ваши ошибки в исключения.
источник
Мой любимый способ сделать это довольно просто:
Я нашел это после экспериментирования с
try/catch
@enobrev выше, но это учитывает менее длинный (и IMO, более читаемый) код. Мы просто используем,error_get_last
чтобы получить текст последней ошибки, иfile_get_contents
возвращает false при сбое, поэтому простое «если» может это уловить.источник
@file_get_contents
чтобы подавить сообщение об ошибке в браузере.@file_get_contents
для подавления предупреждения и проверки значения результата, используя=== FALSE
.if (false !== ($data = file_get_contents ()))
error_get_last
к тому, что я ничего неВы можете добавить @:
$content = @file_get_contents($site);
Это подавит любое предупреждение - используйте экономно! , Смотрите Операторы контроля ошибок
Изменить: Когда вы удаляете http: //, вы больше не ищете веб-страницу, а файл на вашем диске под названием "www.google ....."
источник
Один из вариантов - подавить ошибку, а также вызвать исключение, которое вы можете перехватить позже. Это особенно полезно, если в вашем коде есть несколько вызовов file_get_contents (), так как вам не нужно подавлять и обрабатывать их все вручную. Вместо этого можно сделать несколько вызовов этой функции в одном блоке try / catch.
источник
Вот как я это сделал ... Нет необходимости в блоке try-catch ... Лучшее решение всегда самое простое ... Наслаждайтесь!
источник
$http_response_header
не обновляется в этом случае, так как не получен ответ HTTP.источник
$url
404 не найдено, предупреждение все равно появится.ignore_errors
только указывает HTTP-контексту не интерпретировать коды состояния HTTP- ответа> = 400 как ошибки. Хотя и незначительно связаны, это не отвечает на вопрос об обработке ошибок PHP.ignore_errors
вариант! Это то, что мне было нужно!Вот как я справляюсь с этим:
источник
Лучше всего было бы установить свои собственные обработчики ошибок и исключений, которые будут делать что-то полезное, например, регистрировать его в файле или отправлять по электронной почте критические сообщения. http://www.php.net/set_error_handler
источник
Вы могли бы использовать этот скрипт
источник
if ($url === true)...
потому что, если вы получаете в качестве ответа0
или пусто, это вызывает ошибку соединения.Начиная с PHP 4 используйте error_reporting () :
источник
Самый простой способ сделать это - просто добавить @ перед file_get_contents, т.е. е .:
источник
что-то вроде этого:
источник
источник
Вы должны использовать функцию file_exists (), прежде чем использовать file_get_contents (). Таким образом вы избежите предупреждения php.
источник
Изменить файл php.ini
источник
Он попытается получить данные, если они не будут работать, он поймает ошибку и позволит вам сделать все, что вам нужно в рамках перехвата.
источник
источник
Вы также должны установить
в вашем,
php.ini
чтобы перестать получать предупреждения.источник