我正在使用PHP处理一些大文件(大约500MB到2GB),我需要在文件中的不可预测位置写入小部分。有没有办法将文件映射到虚拟内存,所以我不必进行fwrite()
或fread()
调用?主要的警告是,它将读取小块,但总共将访问大量数据,所有这些都在一个文件中。
答案 0 :(得分:2)
KingCrunch钉在头上.. fwrite
,fread
和fseek
真的是要走的路..
我能想到为什么你可能觉得你不想使用它们的唯一原因可能是它们在PHP中使用起来有点困难?
如果是这种情况,为什么不创建一个内部调用这些方法的简单包装类。
根据评论进行修改
对于虚拟内存,我理解了windows术语,它是映射到文件系统的内存。如果您担心性能问题,并且可以将整个文件放入内存中,那么我现在可以想到两条路线:
php://memory
信息流,并使用stream_copy_to_stream
将整个文件放在那里。你也可以只做一个file_get_contents,它也为你提供内存中的整个流,但我可以想象,tmpfs和php://内存将为你提供更好的性能和内存效率。我个人会去tmpfs mount。