В 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" & подобные.