我使用PHP处理一些大文件(大约500MB到2GB),在这些文件中,我需要在文件中不可预测的位置写入小部分。有没有办法将文件映射到虚拟内存,这样我就不必调用fwrite()
或fread()
了?主要的警告是,它将读取小块数据,但将访问一个文件中的大量数据。
KingCrunch将其钉在头上。。fwrite
、fread
和fseek
真的是要走的路。。
我能想到的唯一原因是,为什么你可能觉得不想使用它们,也许是因为它们在PHP中有点难以使用?
如果是这种情况,为什么不创建一个简单的包装器类,在内部调用这些方法呢。。
根据评论进行编辑
对于虚拟内存,我理解了windows术语,即映射到文件系统的内存。如果您关心性能,并且可以将整个文件放入内存,那么我现在可以考虑两种途径:
- 创建一个tmpfs装载,并将文件放置在那里
- 使用
php://memory
流,并将整个文件与stream_copy_to_stream
一起放入其中
您也可以只做一个file_get_contents,它还可以在内存中提供整个流,但我可以肯定地想象tmpfs和php://memory将为您提供更好的性能和内存效率。我个人会选择tmpfs的挂载。