Работа над созданной системой, которая захватывает удаленные изображения и сохраняет их на сервере.
В настоящее время нет проверки на изображении относительно того, действительно ли он существует в этом удаленном местоположении, и он имеет определенный тип файла (jpg, jpeg, gif), и мне поручено сделать то и другое.
Я думал, что это было довольно тривиально, поскольку я просто использовал простое регулярное выражение и getimagesize ($ image):
$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
поэтому, когда дело доходит до этого, как regex, так и getimagesize () не сработают, есть ли лучший способ сделать это?
Вы могли бы сделать
$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 )
Это покажет вам, существует ли ресурс и какой тип контента (который не обязательно является также типом изображения).
EDIT в соответствии с комментарием Пекки, вы все равно захотите определить его тип mime после загрузки. Видеть
Некоторые из этих подходов работают и с удаленными файлами, поэтому вы можете, вероятно, пропустить предварительную проверку get_headers
. Решите сами, какой из них подходит вашим потребностям.
Сохраните удаленный файл на своем сервере, а затем запустите getimagesize
на локальном.