温馨提示×

Ubuntu怎么设置PHP上传

小樊
48
2026-07-28 04:41:13
栏目: 编程语言

Ubuntu 下设置 PHP 上传,通常需要从 PHP 配置、Web 服务器、目录权限、临时目录 四个方面来配置。下面按常见场景给你一个完整说明(以 Apache / Nginx + PHP(PHP 7.x / 8.x) 为例)。


一、修改 PHP 上传配置(最关键)

1️⃣ 找到 php.ini

先确认你用的是哪个 php.ini

php --ini

或:

php -i | grep "Loaded Configuration File"

常见路径:

  • Apache:/etc/php/8.2/apache2/php.ini
  • Nginx(PHP-FPM):/etc/php/8.2/fpm/php.ini

(版本号可能是 7.4 / 8.1 / 8.2)


2️⃣ 修改上传相关参数

编辑 php.ini

sudo nano /etc/php/8.2/fpm/php.ini

重点修改以下内容:

file_uploads = On
upload_max_filesize = 50M
post_max_size = 60M
upload_tmp_dir = /tmp
max_file_uploads = 20

⚠️ 注意:

  • post_max_size 必须大于 upload_max_filesize
  • 若上传大文件,建议 post_max_size 多留 10M 左右

3️⃣ 重启服务

Apache

sudo systemctl restart apache2

Nginx + PHP-FPM

sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx

二、检查或设置上传临时目录

1️⃣ 确保上传临时目录存在

ls -ld /tmp

2️⃣ 如果自定义了 upload_tmp_dir

例如:

upload_tmp_dir = /var/www/upload_tmp

则需要:

sudo mkdir -p /var/www/upload_tmp
sudo chown www-data:www-data /var/www/upload_tmp
sudo chmod 755 /var/www/upload_tmp

三、设置网站目录权限(非常重要)

1️⃣ 假设网站目录是:

/var/www/html

2️⃣ 设置上传目录权限

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

⚠️ 安全建议:

  • 不要 给 777
  • 上传目录单独设置更安全

四、Nginx 额外配置(Nginx 用户必看)

1️⃣ 修改 client_max_body_size

编辑 Nginx 配置:

sudo nano /etc/nginx/sites-available/default

server {} 中加入:

client_max_body_size 60M;

2️⃣ 重载 Nginx

sudo nginx -t
sudo systemctl reload nginx

五、测试 PHP 上传是否成功

1️⃣ 创建测试文件

/var/www/html/upload.php

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    var_dump($_FILES);
}
?>

<form method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">上传</button>
</form>

2️⃣ 访问测试

http://服务器IP/upload.php

六、常见问题排查

❌ 上传失败但无报错

  • 检查 post_max_size
  • 检查 client_max_body_size
  • 检查 tmp 目录权限

❌ 文件上传成功但找不到

  • 检查 move_uploaded_file() 目标路径
  • 目标目录是否存在
  • 是否有 www-data 写权限

七、安全建议(生产环境)

✅ 限制上传文件类型
✅ 不要直接执行上传文件
✅ 上传目录禁止 PHP 执行(Nginx/Apache 配置)
✅ 重命名上传文件


如果你愿意,可以告诉我:

  • Ubuntu 版本
  • PHP 版本
  • Apache 还是 Nginx
  • 是否 Docker / LNMP / 宝塔

我可以给你 精确到每一步的命令配置

0