Я предлагаю сделать запрос HTTP HEAD , чтобы вам не нужно было загружать все изображение целиком, а затем на основе возвращенной строки проанализировать и убедиться, что Content-Type является image/jpeg
, image/pjpeg
, image/gif
, image/png
или подобное изображение. Типы содержимого.
<?php
function parseImage( $url ) {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 20 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_HEADER, true );
curl_setopt( $ch, CURLOPT_NOBODY, true );
$content = curl_exec( $ch );
var_dump($content);
curl_close($ch);
}
parseImage('http://sstatic.net/so/img/logo.png');
Возвращает
строка 'HTTP / 1.1 200 OK
Cache-Control: max-age = 604800
Длина содержимого: 3438
Тип содержимого: изображение / png
Дата последнего изменения: вс, 10 января 2010
09:14:52 GMT
Диапазон принятия: байты
ETag: "32741b5ed591ca1: 0"
Сервер: Microsoft-IIS / 7.5
Дата: ср., 13 января 2010 20:37:47 GMT
'(длина = 256)
Конечно, заголовок Content-Type может быть подделан, но в 99% случаев этого не произойдет, поэтому этот метод надежен.