Intereting Posts
Слияние MySQL Два поля из двух таблиц в одно поле в наборе результатов php сохранение идентификатора пользователя в сеансе? Обратный вызов запроса AJAX с использованием jQuery Отдельные записи PHP с запятой, кроме последней записи? php, как перемешать / рандомизировать порядок ассоциативного массива, сохраняя пары ключ / значение Хотите показать «загрузку» изображения во время загрузки страницы – Javascript Разница между установкой ID напрямую и установкой красноречивого отношения ассоциирования при сохранении модели в Laravel? странное поведение php array_unique Как извлечь ZIP-файл с паролем, используя только PHP? Я имею зашифрованный пароль md5, как дать пароль пользователю, когда он использует «Забыли пароль»? Ошибка Symfony2 / Doctrine при отправке формы Разрешено ли PHP изменять файл .htaccess в текущей папке? Печать вложенного массива PHP в виде $ var = value; Борьба с отношением «один ко многим» в форме администратора Проверьте, имеет ли переменная число php

Обработка исключений с помощью get_meta_tags () & get_headers ()?

В PHP я использую get_meta_tags() и get_headers() , однако, когда есть 404, эти две функции выдают предупреждение. Есть ли у меня способ поймать? Благодаря!

get_headers не get_headers предупреждение / ошибку на 404, но get_meta_tags делает.

Таким образом, вы можете проверить ответ заголовка и сделать что-то, когда это не нормально:

 $url = 'http://www.example.com/'; $headers = array(); $metatags = array(); $validhost = filter_var(gethostbyname(parse_url($url,PHP_URL_HOST)), FILTER_VALIDATE_IP); if($validhost){ // get headers only when Domain is valid $headers = get_headers($url, 1); if(substr($headers[0], 9, 3) == '200'){ // read Metatags only when Statuscode OK $metatags = get_meta_tags($url); } } 

эти две функции вызывают предупреждение. Есть ли у меня способ поймать?

Тебе не стоит заботиться . Естественно, сообщение E_WARNING при сбое при разработке отлично; это даже желательно, так как вы можете сразу увидеть, что что-то пошло не так. Я могу себе представить, что вы не хотите, чтобы ваши клиенты видели эти предупреждения, но вы не должны делать это за использование функции, вы должны делать это глобально: отключите display_errors в php.ini в рабочей среде и ваши клиенты никогда не будут видеть такие сообщения.

Тем не менее, если вы не хотите, чтобы они отображались в журналах ошибок, вам нужно будет проверить, существует ли страница, прежде чем пытаться получить метатеги. get_headers, похоже, не бросает предупреждение, вместо этого возвращает массив, из которого первый элемент содержит строку «HTTP / 1.1 404 Not Found». Вы можете использовать это в своих интересах:

 <?php $url = 'http://stackoverflow.com'; $headers = get_headers( $yoururl ); preg_match( '~HTTP/1.(?:1|0) (\d{3})~', $headers[0], $matches ); $code = $matches[1]; if( $code === '200' ) { $tags = get_meta_tags( $url ); } 

Если вы начнете использовать этот код, помните, что 200 – это не единственное уведомление об успешном запросе; 304 Не модифицировано – например, одинаково справедливо.

Вы можете заставить его замолчать, называя их следующим образом:

 @get_meta_tags(); 

Вы не можете «поймать» его (легко), но вы можете проверить возвращаемые значения.

Кроме того, вы можете отключить или перенаправить предупреждения, см. Error_reporting () и ini directoves "display_errors" & подобные.