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

无法上传大于1MB的文件?Ajax+PHP上传配置问题求助

解决PHP Ajax文件上传大小限制问题

你遇到的核心问题是**ini_set()无法修改upload_max_filesize和post_max_size这类配置项**——因为这些属于PHP_INI_PERDIR或PHP_INI_SYSTEM级别的设置,只能在服务器配置层面修改,运行时通过代码修改是无效的。下面是具体的解决方案:

1. 直接修改php.ini文件(推荐,适用于有权限的服务器)

首先找到你的php.ini位置:在PHP文件里执行phpinfo();,查看输出里的Loaded Configuration File项,找到文件路径。

打开php.ini,修改以下配置:

upload_max_filesize = 10M      ; 单个文件上传限制
post_max_size = 12M            ; POST请求总大小限制(要比upload_max_filesize大,因为POST还有其他数据)
max_execution_time = 300       ; 脚本最大执行时间(秒)
max_input_time = 300           ; 接收输入的最大时间(秒)

修改完成后,必须重启你的Web服务器(Apache/Nginx)或PHP-FPM服务,配置才会生效。

2. 使用.htaccess(仅适用于Apache服务器)

如果没有权限修改php.ini,可以在项目根目录创建或编辑.htaccess文件,添加以下内容:

php_value upload_max_filesize 10M
php_value post_max_size 12M
php_value max_execution_time 300
php_value max_input_time 300

保存后无需重启服务器,直接测试上传即可。

3. Nginx+PHP-FPM环境的配置方法

如果你的服务器是Nginx搭配PHP-FPM,需要修改PHP-FPM的配置文件:

  • 找到PHP-FPM的配置目录(比如/etc/php/7.4/fpm/),编辑php-fpm.conf或对应pool的配置文件(比如pool.d/www.conf)
  • 在文件中添加或修改:
    upload_max_filesize = 10M
    post_max_size = 12M
    max_execution_time = 300
    max_input_time = 300
    
  • 修改完成后,重启PHP-FPM服务:sudo systemctl restart php7.4-fpm(根据你的PHP版本调整命令)

4. 额外的优化与检查

前端添加文件大小预验证

在JavaScript代码里提前拦截过大的文件,避免无效请求:

$('#up_file').on("change",function() { 
    var file_data = $('#up_file').prop('files')[0]; 
    if (!file_data) return;
    
    // 10MB的字节数:10*1024*1024=10485760
    if (file_data.size > 10485760) {
        $("#message").append("文件大小不能超过10MB<br>");
        // 重置文件输入框,避免重复选择同一文件不触发change事件
        $('#up_file').val('');
        return;
    }
    
    var form_data = new FormData(); 
    form_data.append('file', file_data); 
    $.ajax({ 
        url: 'upload_backup.php', 
        cache: false, 
        contentType: false, 
        processData: false, 
        data: form_data, 
        async: false, 
        type: 'POST', 
        success: function(data){ 
            $("#message").append(data); 
            $('#reload i').click(); 
        },
        error: function(xhr) {
            $("#message").append("上传请求失败:"+xhr.statusText+"<br>");
        }
    }); 
});

后端完善错误处理

在PHP代码里添加上传错误检测,方便排查问题:

<?php
// 先检查上传是否有错误
if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) {
    switch ($_FILES['file']['error']) {
        case UPLOAD_ERR_INI_SIZE:
            echo "错误:文件超过php.ini限制的大小<br>";
            break;
        case UPLOAD_ERR_FORM_SIZE:
            echo "错误:文件超过表单限制的大小<br>";
            break;
        case UPLOAD_ERR_PARTIAL:
            echo "错误:文件仅部分上传<br>";
            break;
        case UPLOAD_ERR_NO_FILE:
            echo "错误:未选择文件<br>";
            break;
        default:
            echo "错误:上传失败,错误码:".$_FILES['file']['error']."<br>";
    }
    exit;
}

$filename = $_FILES['file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if ($ext == "gz"){
    $file_name = str_ireplace('.sql.gz','',$_FILES['file']['name']);
    $file_path = 'backup_db/' . $file_name.'.sql.gz';
    
    // 确保目标目录存在且有写入权限
    if (!is_dir('backup_db/')) {
        mkdir('backup_db/', 0755, true);
    }
    
    if (move_uploaded_file($_FILES['file']['tmp_name'],$file_path)) {
        echo "文件上传成功:".$file_name.".sql.gz<br>";
    } else {
        echo "错误:无法移动上传的文件,请检查目录权限<br>";
    }
}else{
    echo "错误:仅支持.gz格式的文件<br>";
}

// 补充你原来的formatSizeUnits函数(如果有的话)
function formatSizeUnits($bytes) {
    if ($bytes >= 1073741824) {
        $bytes = number_format($bytes / 1073741824, 2) . ' GB';
    } elseif ($bytes >= 1048576) {
        $bytes = number_format($bytes / 1048576, 2) . ' MB';
    } elseif ($bytes >= 1024) {
        $bytes = number_format($bytes / 1024, 2) . ' KB';
    } elseif ($bytes > 1) {
        $bytes = $bytes . ' bytes';
    } elseif ($bytes == 1) {
        $bytes = $bytes . ' byte';
    } else {
        $bytes = '0 bytes';
    }
    return $bytes;
}
?>

检查目录权限

确保backup_db/目录有足够的写入权限,你可以通过命令行设置:

chmod 755 backup_db/
# 如果还是不行,尝试(注意安全性)
chmod 777 backup_db/

内容的提问来源于stack exchange,提问作者Mido Bona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:34:24