Как получить скрытое расширение изображений по URL? - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь загрузить изображения с определенного веб-сайта на свой сервер

....

public function save_one_img($img_url,$image_filename=false,$save_path)
{

    $pathinfo = pathinfo($img_url); 

    $pic_name=$pathinfo['basename'];  

    if ($image_filename) $pic_name = $image_filename.'.'.$pathinfo['extension'];

    $img_data = @file_get_contents($img_url);  
    $img_size = file_put_contents($save_path . $pic_name, $img_data);
    if ($img_size)
    {
        echo $img_url . '<span style="color:green;margin-left:80px">success</span><br/>';
    } else
    {
        echo $img_url . '<span style="color:red;margin-left:80px">failed</span><br/>';
    }

}

Когда URL изображения нормальный, он работает нормально. Но когда это что-то вроде "http://s10.sinaimg.cn/orignal/001MEJWgzy7t10HVWDT39",, код не сможет получить правильное расширение файла. Но когда я открываю страницу и щелкаю правой кнопкой мыши изображение, чтобы загрузить его, я вижу, что это gif Итак, как в этом случае получить расширение в моем коде?

1 Ответ

1 голос
/ 15 мая 2019

Вы можете загрузить изображение и использовать exif_imagetype , чтобы определить тип изображения, или вы можете прочитать тип изображения в заголовке ответа удаленного хоста (хоста, с которого вы получаете изображение). В заголовке есть атрибут Content-Type , и вы можете получить тип изображения там.

Пример для exif_imagetype :

<?php
if (exif_imagetype('image.gif') != IMAGETYPE_GIF) {
    echo 'The picture is not a gif';
}
?>

Вот пример ответа заголовка для файла png.

HTTP/1.1 200 OK
Date: Wed, 15 May 2019 02:42:16 GMT
Server: Apache/2.4.39 (Ubuntu)
Last-Modified: Fri, 22 Mar 2019 17:34:11 GMT
ETag: "19f85-584b2434b434b"
Accept-Ranges: bytes
Content-Length: 106373
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: image/png     <---------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...