6

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

如果我使用

$handle=fopen($file,'w');

在我调用之前存储的 $handle 在哪里

fclose($handle);

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

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

fwrite($handle, $content);

然后它调用

fclose($handle);

当循环完成并写入所有数据时。但是,使用这样的循环会更有效还是更友好?

$handle = fopen($file, 'a');
fwrite($handle, $content);
fclose($handle);

?

4

3 回答 3

8

在 PHP 术语中,fopen()(以及许多其他函数)返回一个资源。引用$handle与您的$file.

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

您当前的方法是两种选择中更有效的一种。一次又一次地打开、写入和关闭同一个文件的效率低于只打开一次、多次写入然后关闭它的效率。打开和关闭文件需要设置输入和输出缓冲区并分配其他内部资源,这些都是相对昂贵的操作。

于 2012-09-28T20:59:00.427 回答
2

您的文件句柄只是另一个内存引用,并且像其他程序变量和资源一样存储在堆栈内存中。同样在文件 I/O 方面,打开和关闭一次,根据需要多次写入 - 这是最有效的方式。

$handle = fopen($file, 'a'); //open once
while(condition){
  fwrite($handle, $content); //write many
}
fclose($handle); //close once
于 2012-09-28T20:58:55.000 回答
0
  1. 根据PHP DOCS fopen() 创建一个流,它是一个File handle. 它与文件系统中的文件相关联。

  2. File handle每次需要再写 1024 个字节时 创建新的会非常慢。

于 2012-09-28T21:05:21.443 回答