在 CentOS 上配置 PHP 上传,通常涉及 PHP 配置、临时目录权限、Web 服务器配置 以及 SELinux(如果开启)。下面按常见场景一步步说明。
PHP 的上传参数主要在 php.ini 中。
php -i | grep "Loaded Configuration File"
常见路径:
/etc/php.ini/etc/php.ini 或 /etc/php.d/*.ini编辑 php.ini:
vim /etc/php.ini
重点修改以下参数:
file_uploads = On
upload_max_filesize = 50M
post_max_size = 60M
max_file_uploads = 20
upload_tmp_dir = /tmp
说明:
file_uploads:是否允许上传(必须 On)upload_max_filesize:单个文件大小post_max_size:POST 数据总大小(必须 ≥ upload_max_filesize)max_file_uploads:一次最多上传文件数upload_tmp_dir:上传临时目录(默认 /tmp 即可)systemctl restart httpd
systemctl restart php-fpm
systemctl restart nginx
PHP 上传文件会先写入临时目录(如 /tmp)。
ls -ld /tmp
权限应类似:
drwxrwxrwt
如果没有,修复:
chmod 1777 /tmp
确保允许 POST 请求,并且目录可访问:
<Directory "/var/www/html">
AllowOverride All
Require all granted
</Directory>
Nginx 本身不限制 PHP 上传,但需注意 client_max_body_size:
server {
client_max_body_size 100m;
}
然后重启:
systemctl restart nginx
如果 SELinux 开启,上传可能失败。
getenforce
如果是 Enforcing,继续下面操作。
setsebool -P httpd_unified 1
setsebool -P httpd_anon_write 1
如果上传到自定义目录(如 /var/www/html/uploads):
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/uploads(/.*)?"
restorecon -Rv /var/www/html/uploads
假设上传目录为:
/var/www/html/uploads
设置权限:
chown -R apache:apache /var/www/html/uploads
chmod -R 755 /var/www/html/uploads
Nginx + PHP-FPM 常见用户:
apachenginx 或 php-fpm 用户创建 upload.php:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (move_uploaded_file($_FILES['file']['tmp_name'], __DIR__ . '/uploads/' . basename($_FILES['file']['name']))) {
echo "上传成功";
} else {
echo "上传失败";
print_r(error_get_last());
}
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">上传</button>
</form>
php.inierror_reporting/var/log/httpd/error_log 或 php-fpm.logupload_max_filesizepost_max_sizeclient_max_body_size# 修改 php.ini
file_uploads = On
upload_max_filesize = 50M
post_max_size = 60M
# 重启服务
systemctl restart httpd # 或 nginx + php-fpm
# SELinux
setsebool -P httpd_unified 1
如果你告诉我:
我可以给你一份 完全针对你环境的配置命令。