PHP copy()如何处理内存

tms*_*ont 5 php memory-management file

我需要使用PHP的copy()功能将文件从一个位置复制到另一个位置。我故意不使用rename()

文件为500MB至1GB。在启动PHP脚本后,移动它们大约需要10-20秒(每次执行处理一个文件)。

我的服务器被拒绝的,因为这些文件的上传max_execution_timepost_max_sizeupload_max_filesizememory_limit值,所有这一切都设置高的离谱,但服务器将只超时,当我试图上传。

现在,我担心如果copy()在站点处理大量流量的情况下运行此操作,服务器将失败。

所以我的问题是,PHP的copy()运行方式是否会使服务器的内存和/或执行时间限制过载?

我知道PHP脚本需要花费大量时间才能完成,但是我希望该时间实际上只是一段内存不足的“等待时间”,因为PHP坐下来让服务器OS可以移动文件。不会认为PHP会需要将文件加载到缓冲区或类似的东西来进行复制,但是在此级别上进行内存讨论是我不了解的话题。

谁能解释PHP如何copy()使用内存,以及内存过载是否存在任何风险?

Jon*_*Jon 4

查看 的源代码copy最终 通过读取和写入8KB 大小的块来工作 - 因此它最终不会分配大量服务器内存。正如人们已经评论的那样,这当然是人们所期望发生的事情。

然而,并行运行的大文件的多个副本很容易降低存储介质的性能(特别是如果它是由旋转的铁锈制成的),这反过来又会导致副本需要花费大量时间才能完成。这很容易会超过脚本的最大执行时间限制,因此最好在开始复制之前删除该限制。