在PHP中fopen有多重要?

时间:2012-02-22 08:20:10

标签: php arrays file

嘿所以我正在尝试清理我的代码,我只需要知道:PHP中的fopen函数有多重要?我的意思是......我已经被告知你在完成它时总是需要关闭一个文件。这让我相信,如果一个文件保持打开的时间太长,那么它会以某种方式腐败?

我不知道,但事情是我有一个if语句,如果条件为真,它会打开文件并写入它们(它们)。在脚本开头打开所有文件进行写入/读取是否同样高效,然后只要包含指令实际写入它们,如果条件为真?

虽然我们正在谈论这个主题...如果我想从文件中逐行读取,我只需使用我在这里学到的array = file(“filename”)快捷方式。是否有写入的快捷方式一个文件,也不必经过所有fopen的东西?我可以拿一个文件,一行一行地把它变成一个数组,并通过改变那个数组,改变文件吗?反正这样做了吗?

谢谢!

5 个答案:

答案 0 :(得分:2)

  

如果文件打开时间太长,那么它会以某种方式损坏?

我认为PHP非常智能,可以在您完成使用它们时对您打开的文件进行垃圾收集。如果您不关闭文件,我认为该文件不会被破坏,除非您无意中写入该文件。

  

在脚本开头编写/阅读所有文件是否同样有效

我不确定你是否应该担心效率,除非你需要。如果您的代码工作且可维护,我不会更改您打开文件的位置。

  

是否有写入文件的快捷方式,而无需查看所有fopen内容?

您可以使用file_put_contents(..)作为写入文件的快捷方式。

答案 1 :(得分:1)

进程在给定时间可以打开的文件数受操作系统的限制。如果您打开许多文件并且从不关闭它们,那么您的配额就会用完,而且您无法再打开。

另一方面,如果您打开写入文件,在关闭文件之前,您无法保证您所写的内容安全地存在于磁盘上。

答案 2 :(得分:0)

简单的解释是:在你fclose档案之前,你无法保证你fwrite对它的实际存在。操作系统可以将此内容存储在某个缓冲区中并等待访问硬盘。如果在不关闭文件的情况下完成脚本,那么这些数据就会丢失。

现在,在大多数情况下实际上并没有发生这种情况,但如果您想确定,fclose

答案 3 :(得分:0)

  

这让我相信,如果文件保持打开时间过长,那么它会以某种方式损坏?

不,它不会破坏文件。它只是耗尽资源(打开或保持文件句柄打开确实需要一些时间,内存和开销),并且您冒险使其他想要打开同一文件的脚本等待。脚本结束后,实际文件句柄将自动关闭,但最好在完成后立即将其关闭。这真的是所有:如果你不再需要它,那就把它清理干净吧。

  

在脚本开头打开所有文件进行写入/读取是否同样高效,如果条件为真,那么只需要包含实际写入它们的指令??

不,见上文。打开文件句柄不是免费的,所以除非你需要,否则不要这样做。

  

如果我想从文件中逐行读取,我只需使用我在这里学到的array = file(“filename”)快捷方式

这很好,但请注意,这会立即将整个文件读入内存。对于几乎不重要的小文件,但对于较大的文件,这意味着a)在从磁盘读取整个文件时脚本将停止并且b)您需要有足够的可用内存来存储文件.PHP脚本是通常是内存受限,因为通常有许多实例并行运行。

  

是否有写入文件的快捷方式,而无需查看所有fopen内容?

file_put_contents

答案 4 :(得分:0)

  

我可以取一个文件并逐行创建一个数组,并通过更改该数组来更改文件吗?

您可以创建自己的数组类(实现ArrayAccess接口),它会加载文件的每一行。然后修改offsetSet和offsetUnset方法,每次调用它们时重写文件。

但是我怀疑当你做出改变时重写所有内容将是性能明智的。