2011-03-30 29 views
0

当文件非常大时,PHP的fopen真的很慢。当我使用Python(单线程)读取文件时,操作速度更快。PHP的fopen对于大文件很慢;有更好的选择吗?

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

顺便说一句 - 内存不是我在运行时清理的问题。

感谢您的建议。

+0

该文件是否在本地? – Michael 2011-03-30 23:03:33

+0

该文件是本地的................. – Conex 2011-03-30 23:04:55

回答

2

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

+0

谢谢,卷曲可能是答案.. – Conex 2011-03-30 23:12:33

0

我认为你在某些时候会误导你,因为你正在比较python“read”事实与fopen,它不会读取任何内容,只是打开一个指向文件的指针(流)。

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

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适用于远程文件,可通过网页浏览器等方式访问。 因此,使用file_get_contents或fopen作为本地文件可能会更好更快,因为您不需要花费新的连接和资源从Web服务器获取您自己的本地文件。

相关问题