PHP fopen()的内存效率和使用情况

whi*_*kid 5 php memory fopen

我正在建立一个系统来创建文件,文件大小从几Kb到50Mb不等,这个问题更多是出于好奇。我在网上找不到任何答案。

如果我用

$handle=fopen($file,'w');
Run Code Online (Sandbox Code Playgroud)

我打电话之前在哪里存储了$ handle

fclose($handle);
Run Code Online (Sandbox Code Playgroud)

?它存储在系统内存中还是临时文件中?

其次,我正在使用一个循环构建文件,该循环一次占用1024个字节的数据,并且每次将数据写入为:

fwrite($handle, $content);
Run Code Online (Sandbox Code Playgroud)

然后调用

fclose($handle);
Run Code Online (Sandbox Code Playgroud)

当循环完成并写入所有数据时。但是,使用循环来提高效率或对内存友好

$handle = fopen($file, 'a');
fwrite($handle, $content);
fclose($handle);
Run Code Online (Sandbox Code Playgroud)

Sea*_*ght 5

用PHP术语fopen()(以及许多其他函数)返回resource。因此,$handle有一个资源引用与您的关联的文件句柄$file

资源是内存中的对象,PHP不会将其持久化到文件系统中。

您当前的方法是两种选择中效率最高的一种。一遍又一遍地打开,写入然后关闭同一文件的效率要比一次打开,多次写入然后关闭的效率低。打开和关闭文件需要设置输入和输出缓冲区以及分配其他内部资源,这是比较昂贵的操作。这是一个不好的比喻,但是就像您每次到达停车标志时都要关闭汽车的发动机一样。

  • 不要停止停车标志:问题已解决。 (2认同)