在 Ubuntu 下设置 PHP 上传,通常需要从 PHP 配置、Web 服务器、目录权限、临时目录 四个方面来配置。下面按常见场景给你一个完整说明(以 Apache / Nginx + PHP(PHP 7.x / 8.x) 为例)。
php.ini先确认你用的是哪个 php.ini:
php --ini
或:
php -i | grep "Loaded Configuration File"
常见路径:
/etc/php/8.2/apache2/php.ini/etc/php/8.2/fpm/php.ini(版本号可能是 7.4 / 8.1 / 8.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_filesizepost_max_size 多留 10M 左右sudo systemctl restart apache2
sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx
ls -ld /tmp
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
/var/www/html
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
⚠️ 安全建议:
client_max_body_size编辑 Nginx 配置:
sudo nano /etc/nginx/sites-available/default
在 server {} 中加入:
client_max_body_size 60M;
sudo nginx -t
sudo systemctl reload nginx
/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>
http://服务器IP/upload.php
post_max_sizeclient_max_body_sizetmp 目录权限move_uploaded_file() 目标路径www-data 写权限✅ 限制上传文件类型
✅ 不要直接执行上传文件
✅ 上传目录禁止 PHP 执行(Nginx/Apache 配置)
✅ 重命名上传文件
如果你愿意,可以告诉我:
我可以给你 精确到每一步的命令配置 ✅