0

我正在使用 PHP 来处理一些大文件(大约 500MB 到 2 GB),我需要将这些文件写入文件中不可预测位置的小部分。有没有办法将文件映射到虚拟内存,这样我就不必打电话了fwrite()fread()主要的警告是它将读取小块,但将访问大量数据,全部在一个文件中。

4

1 回答 1

2

KingCrunch 把它钉在了头上.. fwrite,真的是要走的路fread..fseek

我能想到您可能不想使用它们的唯一原因,也许是它们在 PHP 中更难使用?

如果是这种情况,为什么不创建一个在内部调用这些方法的简单包装类。

根据评论编辑

使用虚拟内存,我理解了 windows 术语,即映射到文件系统的内存。如果您担心性能,并且可以将整个文件放入内存中,那么我现在可以考虑两种方法:

  1. 创建一个 tmpfs 挂载,并将文件放在那里。
  2. 使用php://memory流,并用stream_copy_to_stream.

你也可以只做一个 file_get_contents,它也为你提供了内存中的整个流,但我绝对可以想象 tmpfs 和 php://memory 都会给你更好的性能和内存效率。我个人会选择 tmpfs 挂载。

于 2012-10-15T20:21:12.050 回答