温馨提示×

CentOS如何配置PHP上传

小樊
41
2026-07-08 03:03:43
栏目: 编程语言

CentOS 上配置 PHP 上传,通常涉及 PHP 配置、临时目录权限、Web 服务器配置 以及 SELinux(如果开启)。下面按常见场景一步步说明。


一、修改 PHP 上传相关配置

PHP 的上传参数主要在 php.ini 中。

1. 找到 php.ini 文件

php -i | grep "Loaded Configuration File"

常见路径:

  • CentOS 7 + PHP 7.x:/etc/php.ini
  • CentOS 8 / Stream:/etc/php.ini/etc/php.d/*.ini

2. 关键上传参数

编辑 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 即可)

3. 重启 PHP / Web 服务

Apache

systemctl restart httpd

Nginx + PHP-FPM

systemctl restart php-fpm
systemctl restart nginx

二、临时目录权限(非常重要)

PHP 上传文件会先写入临时目录(如 /tmp)。

1. 确保目录存在且可写

ls -ld /tmp

权限应类似:

drwxrwxrwt

如果没有,修复:

chmod 1777 /tmp

三、Web 服务器配置

1. Apache(httpd)

确保允许 POST 请求,并且目录可访问:

<Directory "/var/www/html">
    AllowOverride All
    Require all granted
</Directory>

2. Nginx

Nginx 本身不限制 PHP 上传,但需注意 client_max_body_size

server {
    client_max_body_size 100m;
}

然后重启:

systemctl restart nginx

四、SELinux 配置(CentOS 常见坑)

如果 SELinux 开启,上传可能失败。

1. 查看 SELinux 状态

getenforce

如果是 Enforcing,继续下面操作。


2. 允许 HTTP 上传

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

五、PHP 上传目录权限

假设上传目录为:

/var/www/html/uploads

设置权限:

chown -R apache:apache /var/www/html/uploads
chmod -R 755 /var/www/html/uploads

Nginx + PHP-FPM 常见用户:

  • Apache:apache
  • Nginx:nginxphp-fpm 用户

六、测试 PHP 上传

创建 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>

七、常见问题排查

1. 上传失败但无报错

  • 检查 php.ini
  • 检查 error_reporting
  • 查看 /var/log/httpd/error_logphp-fpm.log

2. 文件大小限制

  • upload_max_filesize
  • post_max_size
  • Nginx client_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

如果你告诉我:

  • CentOS 版本
  • Apache 还是 Nginx
  • PHP 版本

我可以给你一份 完全针对你环境的配置命令

0