PHP - определение размера изображения перед сохранением изображения - PullRequest
0 голосов
/ 25 февраля 2020

Я использую следующий код для сохранения изображения с URL-адреса, но иногда URL-адрес изображения является неправильным, и изображения там нет, ИЛИ возникает проблема с изображением, и при этом сохраняется файл нулевого размера.

<?php 
file_put_contents ("/var/www/html/images/" . $character . ".jpg", 
    file_get_contents($image));

Мне нужно попытаться найти способ остановить это, так как это создает проблему (сохранение файлов нулевого размера).

Я пробовал это, но это все еще происходит:

$filesize = file_put_contents ("/var/www/html/images/" . $character . ".jpg", 
    file_get_contents($image));

if (($filesize < 10) || ($filesize == "")) {
    echo "Error";
}

Кто-нибудь может порекомендовать более надежный способ сделать это?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2020

В пакете Imagick есть методы для этого

Imagick :: getImageGeometry () - возвращает ширину и высоту изображения или создает исключение.

function isValidImage($filename)
{
    if (!fileexists($filename) return false;
    if (filesize($filename) == 0) return false;

    $image = new imagick($filename);
    $img=$image->getImageGeometry();

    return ($img['width'] > 0 && $img['height'] > 0);
}

РЕДАКТИРОВАТЬ: я обновил свой ответ с большим количеством проверок

1 голос
/ 25 февраля 2020

Я попытался получить размер изображения по URL. У меня есть get_headers() функция, чтобы получить размер изображения. Вот пример, который приведен ниже:

function checkImageSize($imageUrl){
   if(!empty($imageUrl)){
       $file_headers = @get_headers($imageUrl, 1); // it gives all header values .
       // for image size, we use **Content-Length** for size.
       $sizeInKB = round($file_headers['Content-Length'] / 1024, 2));           
       return $sizeInKB;
   } else {
       return 0;
   }
}
$imageSize =checkImageSize($imageUrl);
if($imageSize<=$conditionalSize){
     // upload code
} else {
     // error msg
}
...