You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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);
}
?>

关键修改说明

  1. 遍历所有上传文件:用foreach ($_FILES as $arrfile)替代pos($_FILES),确保每一张上传的图片都被处理。
  2. 提前引入类文件:把include($serverpath.'/php/SimpleImage.php')移到脚本顶部,避免重复包含导致的类定义错误。
  3. 修复参数拼写错误:修正resize_larghezzafissa函数的参数名$witdh为$width,避免参数不匹配问题。
  4. 替换废弃数据库扩展:改用mysqli预处理语句,避免SQL注入,同时符合PHP现代标准。
  5. 处理空值情况:当表中无数据时,MAX(ordine)会返回null,增加判断确保$ordine初始值为1。

内容的提问来源于stack exchange,提问作者Isacco Curreli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:12:32