0

0

php本地部署后上传文件失败_文件大小限制修改与权限设置【指南】

星夢妙者

星夢妙者

发布时间:2026-01-03 22:01:02

|

789人浏览过

|

来源于php中文网

原创

本地部署PHP应用无法上传文件的常见原因及解决步骤包括:一、修改php.ini中upload_max_filesize、post_max_size等参数并重启服务器;二、设置上传目录写入权限;三、调整Nginx或Apache的请求体大小限制;四、确认upload_tmp_dir路径存在且可写;五、检查SELinux或AppArmor策略限制。

php本地部署后上传文件失败_文件大小限制修改与权限设置【指南】

如果您在本地部署 PHP 应用后无法成功上传文件,常见原因包括 PHP 配置中的文件大小限制过低或 Web 服务器对上传目录的写入权限不足。以下是针对此问题的多项具体处理步骤:

一、修改 php.ini 中的上传限制参数

PHP 默认对单个上传文件大小和整个 POST 数据总量设有限制,需手动调整相关配置项以支持更大的文件上传。

1、定位当前生效的 php.ini 文件:在 Web 根目录下新建 info.php,内容为 浏览器访问该文件,在 “Loaded Configuration File” 行查看路径。

2、使用文本编辑器打开该 php.ini 文件。

立即学习PHP免费学习笔记(深入)”;

3、查找并修改以下三项参数值(例如设为 100M):
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300

4、保存文件后,重启 Web 服务器(如 Apache 或 Nginx)使配置生效。

二、检查并设置上传目标目录的写入权限

PHP 脚本需对指定的临时上传目录及最终保存目录具备写入权限,否则 move_uploaded_file() 将失败。

1、确认上传脚本中指定的目标路径,例如 $_FILES['file']['tmp_name'] 对应的临时目录通常为系统默认 tmp,而最终保存路径如 './uploads/'。

2、在终端中执行命令设置上传目录权限(Linux/macOS):
chmod -R 755 ./uploads/

3、若仍报错,可临时测试赋予完全写入权限:
chmod -R 777 ./uploads/

4、Windows 系统需右键点击 uploads 文件夹 → “属性” → “安全” 选项卡 → 编辑用户(如 IIS_IUSRS 或 www-data)的“写入”权限为允许。

三、调整 Web 服务器层的请求体大小限制

Nginx 和 Apache 在自身配置中也设有客户端请求体大小上限,若未同步放宽,PHP 层修改将无效。

1、对于 Nginx:编辑站点配置文件(如 /etc/nginx/sites-enabled/default),在 server 或 location 块内添加:
client_max_body_size 100M;

小云雀
小云雀

剪映出品的AI视频和图片创作助手

下载

2、保存后执行 nginx -t 验证语法,再运行 nginx -s reload 重载配置。

3、对于 Apache:若使用 .htaccess,在上传目录下创建或编辑该文件,加入:
LimitRequestBody 104857600

4、若 Apache 主配置启用 mod_php,也可在 httpd.conf 或 virtual host 段中直接添加上述 LimitRequestBody 指令。

四、验证 upload_tmp_dir 设置是否有效

PHP 使用 upload_tmp_dir 指定临时文件存放路径,若该路径不存在、不可写或磁盘空间不足,上传会静默失败。

1、在 phpinfo() 输出中查找 “upload_tmp_dir” 行,确认其值是否为空或指向合法路径。

2、若为空,需在 php.ini 中显式设置:
upload_tmp_dir = /var/tmp

3、确保该路径存在且 Web 服务器用户(如 www-data、apache)对其有读写权限:
mkdir -p /var/tmp && chown www-data:www-data /var/tmp && chmod 755 /var/tmp

4、重启 PHP-FPM 或 Web 服务进程。

五、检查 SELinux 或 AppArmor 强制访问控制策略

在启用了 SELinux(CentOS/RHEL)或 AppArmor(Ubuntu)的系统中,即使文件权限正确,安全模块也可能阻止 PHP 进程写入指定目录。

1、检查 SELinux 状态:
sestatus

2、若处于 enforcing 模式,临时设为 permissive 测试是否解决问题:
setenforce 0

3、若上传恢复正常,需为上传目录添加正确上下文:
semanage fcontext -a -t httpd_sys_rw_content_t "/path/to/uploads(/.*)?"
restorecon -Rv /path/to/uploads

4、Ubuntu 用户检查 AppArmor 日志:
sudo aa-logprof && sudo systemctl restart apparmor

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2151

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1446

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1354

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

951

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1411

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1233

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1443

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

python设置中文版教程合集
python设置中文版教程合集

本专题整合了python改成中文版相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.3万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号