Я получаю базу 64 для строки для изображения, которую я должен перемещать в папке и сохранять путь изображения в базе данных, но мне нужно ограничить размер файла. Как я могу это сделать:
Мой код для генерации изображения из строки base 64 выглядит так:
/** if image is attached with request **/ $Image = "MyBase64StringHere"; list($type, $Image) = explode(';', $Image); list(, $Image) = explode(',', $Image); /** decode the base 64 image **/ $Image = base64_decode($Image); I have tried to get image size like: $size = getimagesize($Image);
Но из этого я получаю ширину и высоту файла. Может кто-то сказать мне, как я могу получить размер файла из этого. Спасибо
Проверьте это:
После декодирования попробуйте с этим: getimagesizefromstring()
, если вы используете PHP 5.4
, если используете PHP 5.3
, то вы можете проверить со следующим методом.
<?php if (!function_exists('getimagesizefromstring')) { function getimagesizefromstring($data) { $uri = 'data://application/octet-stream;base64,' . base64_encode($data); return getimagesize($uri); } }
Функция getimagesize()
должна работать с URI данных также:
$Image = "MyBase64StringHere"; $size = getimagesize($Image);
Идея получить размер изображения перед переходом в папку не очень хороша. Затем я решил переместить изображение во временную папку и получить размер с помощью пути изображения, а затем проверить размер изображения. С этим я могу легко проверить размер изображения и предотвратить его сохранение в базе данных, если предел размера превышает. Спасибо каждому за свое время.
Мой обновленный код выглядит так:
/** if image is attached with request **/ $Image = "Yourbase64StringHere"; list($type, $Image) = explode(';', $Image); list(, $Image) = explode(',', $Image); /** decode the base 64 image **/ $Image = base64_decode($Image); /* move image to temp folder */ $TempPath = 'temp/'.time().".jpg"; file_put_contents($TempPath, $Image); $ImageSize = filesize($TempPath);/* get the image size */ if($ImageSize < 83889000){ /* limit size to 10 mb */ /** move the uploaded image **/ $path = 'uploads/'.time().".jpg"; file_put_contents($path, $Image); $Image = $path; /** get the image path and store in database **/ unlink($TempPath);/* delete the temporay file */ }else{ unlink($TempPath);/* delete the temporay file */ /** image size limit exceded **/ }