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

服务器迁移后无法上传文件:疑似权限问题

问题排查与解决方案

针对你迁移服务器后文件无法上传的问题,结合给出的配置和代码,以下是具体排查和修复步骤:

1. 修复表单核心缺失属性

你的上传表单未添加enctype="multipart/form-data",这是文件上传的强制要求——没有该属性,服务器无法解析文件流,仅能接收文本字段。修改后的表单代码:

<form action="upload.php" method="post" class="upload-form" enctype="multipart/form-data">
      <div class="file-input">
        <input class="pop" id="file" multiple name="file[]" type="file">
        <input class="tit" name="title" placeholder="Title" type="text">
        <textarea cols="50" name="story" placeholder="Story" rows="4"></textarea>
      </div>
</form>

2. 调整PHP请求大小限制

你的php.ini中post_max_size = 8M,远小于upload_max_filesize = 2000M——post_max_size限制整个POST请求的总大小,必须大于或等于单文件上传限制,否则大文件会被直接拦截。修改php.ini:

post_max_size = 2000M

修改后重启Apache生效:

sudo systemctl restart apache2

3. 验证目录权限的实际有效性

虽然test_upload/权限为drwxrwxrwx www-data www-data,仍需确认:

  • Apache运行用户是否为www-data:执行ps aux | grep apache查看进程所属用户
  • 代码创建子文件夹时是否设置了正确权限:比如使用mkdir()时需指定权限参数,确保子目录创建后www-data有读写权限,示例:
    mkdir($new_folder, 0755, true);
    

4. 通过错误日志定位具体问题

直接查看日志获取精准报错信息:

  • Apache错误日志:通常路径为/var/log/apache2/error.log
  • 实时查看日志命令:
    tail -f /var/log/apache2/error.log
    

尝试上传文件后,日志会显示具体问题(如临时目录权限不足、文件路径错误等)

5. 用极简脚本验证基础上传功能

编写最小化测试脚本,排除业务代码干扰:
test_upload.php:

<?php
var_dump($_FILES);
var_dump($_POST);
?>

对应测试表单test_form.html:

<form action="test_upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="test_file">
  <input type="text" name="test_title">
  <button type="submit">上传</button>
</form>

若测试脚本能正常获取$_FILES数据,说明问题出在业务代码的子目录创建逻辑;若仍无数据,继续排查环境配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:23:12