PHP对于大文件来说很慢;还有更好的选择吗?

时间:2011-03-30 22:59:47

标签: php

当文件非常大时,PHP的fopen非常慢。当我使用Python(单线程)读取文件时,操作更快x100。

我的项目要求我们使用PHP来读取文件数据。有没有其他方法可以使用PHP来处理文件读取,从而提供更好的性能?

BTW - 内存不是我在运行时清理的问题。

感谢您的建议。

2 个答案:

答案 0 :(得分:2)

根据this website对fopen,file_get_contents和curl进行基准测试的PHP cURL是最快的。

答案 1 :(得分:0)

我认为你在某些方面有误导性,因为你将python“read”事实与fopen进行比较,fopen没有读取任何东西,fopen只是打开指针(流)到文件。

也许,这是你阅读的方式非常慢,它可能是你可以使用的缓冲区大小,因为我看到很多现成的实现,因为它读取小块,它当然很慢对于大文件,只要看看,如果你按时间读取4k并且你要读取4G文件大小,它将循环1.000.000次,当然它会很慢。 e.g:

while (!feof($handle))
{
 $file .= fread($handle, 4096); //4k read by once
}

更快的方法是:

$file = fread ($handle, filesize ($filename));
// whole size read as fast and system can fit it into memory.

所以尝试在fread的情况下使用更大的缓冲区,或者如果你的系统可以在内存中处理这个,你可以使用文件的完整大小,你的php ini选项支持分配量以及你可以使用 stream_get_contents 以“优化”方式获取它。

此外,CURL适用于可通过Web浏览器访问的远程文件。 因此,使用 file_get_contents或fopen用于本地文件可能会更好更快,因为您不需要从网络服务器上花费新的连接和资源来获取您自己的本地文件。