所以,有人搞砸了,打破了图像上传功能。扩展程序.
已被取消......这意味着所有图片都保存为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()
,但这显然并不重要。
反正。
当我这样做时,所有图片都会损坏。如果我下载后尝试在我的电脑上打开它们,图像会闪烁,然后告诉我它已损坏。虽然他们都有视觉腐败,但有一些人通过了。
当我拿回支持的文件(幸运的是我做了备份)并在我的PC(Windows)上手动重命名时,图像非常好。但是,我们在这里谈论1800张图片。当我应该能够用脚本修复它时,我真的不想手动执行此操作。
我觉得我可以重命名文件而不用以某种方式验证它,它应该有效吗?
imagecreatefromjpeg
功能甚至没有通过一次,仅供参考。
TL; DR
我想修复图片扩展程序而不会破坏它们
答案 0 :(得分: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();
?>