2010-10-14 4 views
2

Работа с готовой системой, которая захватывает удаленные изображения и сохраняет их на сервере.Получение типа изображения удаленного изображения в php

В настоящее время нет изображения с изображением о том, действительно ли он находится в этом удаленном местоположении, и он имеет определенный тип файла (jpg, jpeg, gif), и мне поручено выполнить оба действия.

Я думал, что это было довольно тривиально, как я бы просто использовать простое регулярное выражение и getimagesize ($ изображения):

$remoteImageURL = 'http://www.exampledomain.com/images/image.jpg'; 

if(@getimagesize($remoteImageURL) && preg_match("/.(jpg|gif|jpeg)$/", $remoteImageURL)) 
{ 
    // insert the image yadda yadda. 
} 

Проблема возникает, когда у меня нет никакого контроля над URL, что я» м захват изображения с, например:

http://www.exampledomain.com/images/2?num=1

так, когда дело доходит до этого, как регулярного выражения и getimagesize() потерпит неудачу, есть лучший способ сделать это?

ответ

12

Вы могли бы

$headers = get_headers('http://www.exampledomain.com/images/2?num=1'); 

Переменная $headers будет содержать что-то вроде

Array 
(
    [0] => HTTP/1.1 200 OK 
    [1] => Date: Thu, 14 Oct 2010 09:46:18 GMT 
    [2] => Server: Apache/2.2 
    [3] => Last-Modified: Sat, 07 Feb 2009 16:31:04 GMT 
    [4] => ETag: "340011c-3614-46256a9e66200" 
    [5] => Accept-Ranges: bytes 
    [6] => Content-Length: 13844 
    [7] => Vary: User-Agent 
    [8] => Expires: Thu, 15 Apr 2020 20:00:00 GMT 
    [9] => Connection: close 
    [10] => Content-Type: image/png 
) 

Это скажет вам, существует ли ресурс, и какой контент типа (который не обязательно также изображение type) есть.

EDIT согласно комментарию Пекки, вы все равно можете определить его тип mime после загрузки. См.

Некоторые из этих подходов также работают с удаленными файлами, поэтому вы можете, вероятно, пропустить предварительную проверку get_headers. Решите сами, какой из них подходит вашим потребностям.

+0

+1 что было легко. – Sarfraz

+1

+1 это будет вполне достаточно для первой проверки. 'getimagesize()' (который фактически анализирует байты заголовка файла) может быть второй проверкой после ее загрузки –

+1

Это замечательно, спасибо. Значит, теперь я могу избавиться от регулярного выражения и проверить на 200 OK, чтобы гарантировать, что изображение существует, прежде чем идти дальше. – ncremins

0

Сохраните удаленный файл на своем сервере, затем запустите getimagesize на локальном компьютере.

Смежные вопросы