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

PHP多文件上传至文件夹失败,error字段为1求助

解决多文件上传时error全为1的问题

嘿,刚接触PHP遇到上传问题很正常,先帮你拆解一下:你看到的error字段值为1,对应PHP的UPLOAD_ERR_INI_SIZE常量,意思就是你上传的文件超过了服务器php.ini配置里允许的最大文件大小。下面咱们一步步解决问题,顺便修正代码里的小问题:

第一步:先排查服务器配置

首先得检查php.ini里的几个关键配置(如果找不到php.ini位置,可以新建一个php文件写<?php phpinfo(); ?>运行后查看):

  • upload_max_filesize:单个文件允许的最大上传大小,默认一般是2M或者8M,你可以根据需要改成10M这类更大的值
  • post_max_size:整个POST请求的总大小,这个必须比upload_max_filesize大,因为表单除了文件还有其他字段内容,比如设成12M就很合适
  • max_file_uploads:允许同时上传的文件数量,默认是20,你的3个文件完全没问题,但可以确认一下
    修改完这些配置后,记得重启你的Web服务器(Apache或者Nginx),不然配置不会生效。

第二步:修正代码结构问题

你的代码把上传处理的PHP逻辑直接写在了<form>标签里面,虽然加了isset判断不会报错,但这不是正确的写法——应该把处理逻辑放在页面最顶部,在输出任何HTML之前,这样表单提交后能第一时间处理上传。另外还有个小问题:你的复选框name="tags"应该改成name="tags[]",不然只能拿到最后一个选中的标签。

修正后的完整代码:

<?php
// 先处理上传逻辑,一定要放在输出HTML之前
if(isset($_POST['submit']) && isset($_FILES['file_array'])){
    $name_array = $_FILES['file_array']['name'];
    $tmp_name_array = $_FILES['file_array']['tmp_name'];
    $error_array = $_FILES['file_array']['error'];
    
    // 遍历每个文件,逐个处理错误和上传
    foreach($error_array as $key => $error){
        if($error === UPLOAD_ERR_OK){
            // 没有错误才尝试移动文件
            $target_dir = "../project-files/";
            // 先检查目标目录是否存在,不存在就创建
            if(!is_dir($target_dir)){
                mkdir($target_dir, 0755, true);
            }
            $target_path = $target_dir . $name_array[$key];
            if(move_uploaded_file($tmp_name_array[$key], $target_path)){
                echo $name_array[$key] . " 上传完成啦<br>";
            } else {
                echo "文件 " . $name_array[$key] . " 移动失败,可能是权限问题哦<br>";
            }
        } else {
            // 把错误码转成易懂的提示
            $error_msg = match($error){
                UPLOAD_ERR_INI_SIZE => "文件 " . $name_array[$key] . " 太大啦,超过服务器允许的最大大小",
                UPLOAD_ERR_FORM_SIZE => "文件 " . $name_array[$key] . " 超过表单设置的大小限制",
                UPLOAD_ERR_PARTIAL => "文件 " . $name_array[$key] . " 只上传了一部分,可能是中途断网了",
                UPLOAD_ERR_NO_FILE => "你没选择文件哦",
                UPLOAD_ERR_NO_TMP_DIR => "服务器缺少临时文件夹,联系管理员处理吧",
                UPLOAD_ERR_CANT_WRITE => "无法把文件写到磁盘,可能是目录权限不够",
                UPLOAD_ERR_EXTENSION => "PHP扩展阻止了这个文件上传",
                default => "未知错误:" . $error
            };
            echo $error_msg . "<br>";
        }
    }
}
?>
<?php include ('../includes/Main-header.php'); ?>
<form action="" method="post" enctype="multipart/form-data">
    <p>Nombre del proyecto</p>
    <p><input type="text" name="nombre_proyecto" placeholder="Escribe aquí el nombre de tu proyecto..." required></p>
    <p>Descripción del proyecto</p>
    <p><textarea name="desc_proyecto" cols="50" rows="10" placeholder="Escribe aquí el contenido que describirá a tu proyecto..."></textarea></p>
    <p>Construcción del proyecto</p>
    <p><textarea name="constru_proyecto" cols="50" rows="10" placeholder="Describe cómo se realiza paso a paso éste proyecto..."></textarea></p>
    <p>Metodología del proyecto</p>
    <p><textarea name="met_proyecto" cols="50" rows="10" placeholder="Explica a otros docentes con detalle, qué metodología aplica éste proyecto y porqué funcionó..."></textarea></p>
    <h1>Tags del proyecto</h1>
    <p>Éstas describirán de qué asignaturas está compuesto el proyecto</p>
    <p><input type="checkbox" name="tags[]" value="Mecanica">Mecanica</p>
    <p><input type="checkbox" name="tags[]" value="Electronica">Electronica</p>
    <p><input type="checkbox" name="tags[]" value="Fisica">Fisica</p>
    <p><input type="checkbox" name="tags[]" value="Biologia">Biologia</p>
    <p><input type="checkbox" name="tags[]" value="Anatomia">Anatomia</p>
    <p><input type="checkbox" name="tags[]" value="Ciencias">Ciencias</p>
    <p><input type="file" name="file_array[]"></p>
    <p><input type="file" name="file_array[]"></p>
    <p><input type="file" name="file_array[]"></p>
    <div class="submit-class">
        <button name="submit" value="submit">¡Compártelo!</button>
    </div>
</form>
<?php include('../includes/main-footer.php'); ?>

第三步:额外的优化建议

  • 不要直接用用户上传的文件名,最好重命名(比如加上时间戳time() . "_" . $name_array[$key]),避免文件名重复或者包含特殊字符导致上传失败
  • 可以给文件上传框加accept属性限制类型,比如accept=".pdf,.jpg,.png",减少不必要的错误
  • 检查../project-files/目录的权限,确保Web服务器用户(比如www-data)有读写权限,不然文件移动会失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:37:52