Проверка доступности картинки. Убираем «битые» изображения.

Опубликовано Опубликовано в рубрике Easy Patch, PHP

Если на своём сайте Вы используете сторонние источники для хранения изображений, то наверняка сталкивались с проблемой отсутствия изображения по указанной Вами ссылке. Тому есть много причин, но сейчас речь не об этом, а о том, как убрать некрасивую «битую» картинку, по сути — дырку в сайте.
В PHP есть прекрасная библиотека cURL, которая позволяет получать исчерпывающую информацию о странице по запросу. Но для нашего случая она достаточно тяжеловесна, ведь нам совершенно не нужно получать много данных, а достаточно получить ответ страницы. Если он не содержит в себе код 404, то картинка существует.

Для решения нашей задачи подойдет функция get_headers(), которая появилась в PHP, начиная с 5 версии. Я был крайне удивлен, не найдя её в книге Люка Веллинга о разработке на PHP, но она все же есть.

На входе функции подаётся url-адрес и необязательный параметр, который отвечает за тип массива на выходе. Если этому параметру присвоить значение 1, то функция вернет заголовок страницы в виде ассоциативного массива. Если же на входе подать только url, то массив будет индексным.

Вот так выглядит пример работы функции от разработчиков


Ответы будут выглядеть вот так

Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Sat, 29 May 2004 12:28:13 GMT
    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    [4] => ETag: "3f80f-1b6-3e1cb03b"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 438
    [7] => Connection: close
    [8] => Content-Type: text/html
)

Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Sat, 29 May 2004 12:28:14 GMT
    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
    [ETag] => "3f80f-1b6-3e1cb03b"
    [Accept-Ranges] => bytes
    [Content-Length] => 438
    [Connection] => close
    [Content-Type] => text/html
)

В обоих случаях для решения задачи нам потребуется элемент массива с ключом 0. И это значение не должно соответствовать ответу ‘HTTP/1.1 404 Not Found’.

Попробуем написать наш скрипт.

$headers_array = array();
$headers_array = get_headers($address);//отсылаем запрос
$request = $headers_array[0];//выбираем главный ответ сервера
if ($request == 'HTTP/1.1 404 Not Found')
	{
		$address = '/img/miniature.jpg';//если изображения нет, то подменяем его своей миниатюрой
	}

Такая конструкция позволяет проверить на доступность url-адрес изображения, содержащийся в переменной $address, и, если картинка недоступна, то заменить её своей миниатюрой.

За сим всё!

Безошибочного Вам кода!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *