5

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

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

我的服务器拒绝上传这些文件,因为、max_execution_time和值,所有这些都设置得高得离谱,但是当我尝试上传时服务器会超时。post_max_sizeupload_max_filesizememory_limit

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

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

我知道 PHP 脚本需要很长时间才能完成,但我希望时间本质上只是一段低内存“等待时间”,因为 PHP 坐下来让服务器操作系统移动文件......我不会认为 PHP 需要将文件加载到缓冲区或类似的东西才能复制它,但是这个级别的内存讨论是一个有点超出我理解的话题。

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

4

1 回答 1

4

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

但是,并行运行的大文件的多个副本很容易降低存储介质的性能(尤其是如果它是由旋转锈制成的),这反过来又会导致副本花费大量的时间来完成。这很容易被证明比脚本的最大执行时间限制更长,因此在开始复制之前删除限制是个好主意。

于 2013-08-28T20:49:11.513 回答