【发布时间】:2013-12-17 09:10:18
【问题描述】:
我使用以下内容作为 html 输入:
<input type="file" name="files[]" multiple="multiple" accept="image/*">
然后上传上述输入的多个实例,并在检查每个文件是否有错误后尝试通过更改图像质量来进行压缩:
$valid_formats = array("jpg", "png", "gif", "zip", "bmp");
$max_file_size = 1024*300; //300 kb
$path = "uploads/"; // Upload directory
$count = 0;
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
// Loop $_FILES to execute all files
foreach ($_FILES['files']['name'] as $f => $name) {
if ($_FILES['files']['error'][$f] == 4) {
// Compress the image files
function compress_image($source_url, $destination_url, $quality) {
$info = getimagesize($source_url);
if ($info['mime'] == 'image/jpeg') $image = imagecreatefromjpeg($source_url);
elseif ($info['mime'] == 'image/gif') $image = imagecreatefromgif($source_url);
elseif ($info['mime'] == 'image/png') $image = imagecreatefrompng($source_url);
// save file
imagejpeg($image, $destination_url, $quality);
// return destination file
return $destination_url;
}
compress_image($_FILES['files']['name'], NULL, 90);
continue; // Skip file if any error found
}
if ($_FILES['files']['error'][$f] == 0) {
if ($_FILES['files']['size'][$f] > $max_file_size) {
$message[] = "$name is too large!.";
continue; // Skip large files
}
elseif( ! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats) ){
$message[] = "$name is not a valid format";
continue; // Skip invalid file formats
}
else{ // No error found! Move uploaded files
if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path.$name)) {
$count++; // Number of successfully uploaded files
}
}
}
}
}
文件上传得很好,但是没有进行压缩。如何在上传或每个文件时压缩图像文件大小?
【问题讨论】:
-
在代码执行的每个步骤中使用
var_dump来验证是否:is_dir:压缩文件的目的地,并添加一个类似($errors) ? exit("is an error in the file $destination_url")的条件来代替continue.... -
到目前为止,您尝试了哪些方法来找出问题?
-
@Ravi - 我更改了变量名称,更改了上传目的地并尝试回显压缩功能。
-
您怀疑代码的哪一部分?
-
文件未上传时使用错误 4。但这是您定义和使用
compress_image的唯一地方。最好将compressed_image定义移出 if 块,并尝试使用错误代码为 0 的函数。
标签: php upload compression filesize