使用SimpleImage类实现PHP多图上传后批量缩放的问题排查
多图上传缩放失败的问题排查与修复
核心问题点
你的代码无法处理多图上传缩放,主要是这几个原因:
- 仅处理单张图片:
pos($_FILES)只会获取$_FILES数组的第一个元素,完全没循环处理所有上传的文件。 - 重复包含类文件报错:缩放函数里每次都
includeSimpleImage.php,多次执行会触发"类已定义"的致命错误,直接中断脚本。 - 变量作用域异常:缩放函数内未定义
$serverpath,无法访问全局变量,会导致找不到SimpleImage.php文件。 - 使用废弃数据库扩展:
mysql_*函数已被PHP废弃,存在安全风险,建议替换为mysqli或PDO。
修正后的完整代码
主处理脚本
<?php session_start(); $serverpath = "C:\EasyPHP-12.1\www\www.arcasarda.pet\\"; $uploaddir = $serverpath."img/pagine/"; // 提前引入图片处理类,避免重复包含报错 include($serverpath.'/php/SimpleImage.php'); // 遍历所有上传的文件,处理多图 foreach ($_FILES as $arrfile) { if(!empty($arrfile['tmp_name'])) { $id = $_POST['id']; $file = $id.'_'.stripslashes(basename($arrfile['name'])); $uploadfile = $uploaddir . $file; if (move_uploaded_file($arrfile['tmp_name'], $uploadfile)) { $img_path = $uploadfile; $size = @getimagesize($img_path); if ($size[0] > $size[1]) { resize_larghezzafissa($img_path, 1500); } else { resize_altezzafissa($img_path, 1500); } chmod($uploadfile, 0777); // 替换为mysqli扩展(原mysql_*已废弃) include $serverpath."/db_connection.php"; // 假设db_connection.php中已创建mysqli连接$conn $query = "SELECT MAX(ordine) FROM testi_img WHERE id_testo=?"; $stmt = mysqli_prepare($conn, $query); mysqli_stmt_bind_param($stmt, "s", $id); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); list($max) = mysqli_fetch_row($result); $ordine = $max ? $max + 1 : 1; $query = "INSERT INTO testi_img (id_testo, img, dida, ordine) VALUES (?, ?, '{italiano}{/italiano}', ?)"; $stmt = mysqli_prepare($conn, $query); mysqli_stmt_bind_param($stmt, "ssi", $id, $file, $ordine); mysqli_stmt_execute($stmt); } } } function resize_larghezzafissa($src, $width){ $image = new SimpleImage(); $image->load($src); $image->resizeToWidth($width); $image->save($src, IMAGETYPE_JPEG, 100, null); } function resize_altezzafissa($src, $height){ $image = new SimpleImage(); $image->load($src); $image->resizeToHeight($height); $image->save($src, IMAGETYPE_JPEG, 100, null); } ?>
关键修改说明
- 遍历所有上传文件:用
foreach ($_FILES as $arrfile)替代pos($_FILES),确保每一张上传的图片都被处理。 - 提前引入类文件:把
include($serverpath.'/php/SimpleImage.php')移到脚本顶部,避免重复包含导致的类定义错误。 - 修复参数拼写错误:修正
resize_larghezzafissa函数的参数名$witdh为$width,避免参数不匹配问题。 - 替换废弃数据库扩展:改用
mysqli预处理语句,避免SQL注入,同时符合PHP现代标准。 - 处理空值情况:当表中无数据时,
MAX(ordine)会返回null,增加判断确保$ordine初始值为1。
内容的提问来源于stack exchange,提问作者Isacco Curreli
相关产品推荐
相关产品推荐

