image — PHP переименовывает файлы, не копируя их

Базовая информация:

Итак, кто-то напутал и сломал функцию загрузки изображений. Расширение . был исключен … Это означает, что все изображения были сохранены как imagejpg вместо image.jpeg,

Я догадался; Нет проблем, я просто переберу папки и переименую файлы, верно? очень просто;

    public function renameImgs(){
$dirs = array_filter(glob(DOCROOT.'/uploads/products/*'), 'is_dir');
foreach($dirs as $dir){
$files = glob($dir.'/*');
foreach($files as $file){
$filename = strtolower($file);
$newFileName = str_replace('jpg', '.jpg', $filename);
if(!copy($filename, $newFileName)){
echo "failed to copy file: $filename";

}
else{
unlink($filename);
}
//if(imagecreatefromjpeg($filename)){
//echo "Can still create image from $filename";
//}
}
}
echo "done";
}

Я также попробовал rename() функция вместо copy(), но это, видимо, на самом деле не имеет значения.
Тем не мение.

Эта проблема

Когда я делаю это, все изображения испорчены. Если я попытаюсь открыть их на своем ПК после загрузки, изображение будет мигать, прежде чем сообщить мне, что оно повреждено. Некоторые из них прошли через это, хотя все они имеют визуальное искажение.

Когда я беру файлы с резервными копиями (к счастью, я их сделал) и переименовываю их вручную на моем ПК (windows), изображения в порядке. Тем не менее, мы говорим о 1800 изображениях здесь. Мне действительно не хочется делать это вручную, когда я смогу просто исправить это с помощью скрипта.

Решение (я думаю)

Я чувствую, что могу просто переименовать файл без это так или иначе подтверждается, это должно работать?

imagecreatefromjpeg функция не прошла ни разу, к вашему сведению.

TL; DR

Я хочу исправить расширения изображений, не нарушая их

0

Решение

ДО

До

Я проверил на Windows (XAMPP) и, кажется, мне хорошо

<?php
function renameImgs() {

$mime = array(
// images
'image/png' => 'png',
'image/jpeg' => 'jpg',
'image/gif'=> 'gif',
'image/bmp' => 'bmp',
);

$basedir = 'upload';
foreach (GLOB($basedir .'/*', GLOB_ONLYDIR) as $dir) {
foreach(GLOB($dir . '/*', GLOB_BRACE) as $img) {
$path = pathinfo($img)['dirname'];
// mime_content_type is more reliable
$ext = $mime[mime_content_type($img)];
$file = strtolower(basename($img));
$newname = $path .'/' . preg_replace('/(jpg)|(jpeg)|(gif)|(bmp)/i', '.' . $ext, $file);
echo $newname;
if(copy($img, $newname)) {
unlink($img);
};
}
}
}

renameImgs();
?>

После

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector