昨天项目上线了,但我发现上传大文件时,PHP执行move_uploaded_file方法的速度特别慢。
几百KB的文件的话,很快,秒传。
但上传大小为15MB的文件时。上传本身很快,才10几秒。
但把“临时目录的文件”复制到“我指定的目录”,这个过程很慢!需要好几分钟!
PHP.ini的配置如下(Windows测试服务器是一样的配置,没有问题)
post_max_size 101M
upload_max_filesize 101M
max_execution_time = 120
max_input_time = 60
memory_limit = 256M
我通过find命令,搜索过Linux下的php.ini文件,确认只有这一个配置文件。
并且重启过php-fpm、重启过apache。
也测试过手动cp 15MB.zip,发现复制速度很快,秒复制。
文件可以上传,应该不是权限问题。(chmod 777/chmod a+rwx)
真的不知道该怎么解决了,还望各位指教。谢谢!!
【下午13:31更新】
我刚才重装了PHP,然而问题还在。
(通过YUM安装。
yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-fpm .....)
这是我的php-fpm.conf配置:
然而在Linux上重启PHP报错,无法加载。
【14.58更新】
我更改了配置文件,PHP-fpm确实是可以正确重启了。也自动生成了配置文件。
但我重新尝试下载,等了20几秒,尝试了好几次。日志仍然是空的。
应该不是权限的问题。难道问题不出在PHP身上?还是某种原因,日志没正确写入?
【15.48更新】
我测试了一下,接收文件的PHP,直接返回结束。
结果,前端还是要等很长时间。可能是Nginx的反向代理,或者什么原因导致的。
【19:47更新】问题解决
我在本地服务器,把测试接口改为线上服务器的接口。发现上传后等待的时间很短。
而且我手动打开线上服务器的PHP接口速度也很快。
因此,否决了“PHP出问题”的想法。
然后我回头看Nginx的配置,把IP地址改为127.0.0.1.


配置线上服务器,再次尝试上传大文件。
虽说还是有些Waiting的时间,但基本可以忽略。
有关这个Bug的更多解决方案可以百度【Waiting (TTFB) nginx】这个关键字。
相信还有优化的空间(CDN等)。
这个困扰我一天半的Bug终于解决了。
最后非常感谢 @xialeistudio 这位朋友的回答。虽说最终没有通过php-fpm的日志发现问题的原因。
但您的回答对我很有帮助,加深了对PHP的理解。谢谢!