эти две функции выдают предупреждение. Есть ли способ для меня поймать это?
Вы не должны заботиться . Естественно, сообщение 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 Not Modified - например - одинаково действителен.