我必须明确关闭此文件吗?

时间:2009-12-27 17:46:37

标签: php

我发现了logging script这样:

/** 
 * Logging class: 
 * - contains lopen and lwrite methods 
 * - lwrite will write message to the log file 
 * - first call of the lwrite will open log file implicitly 
 * - message is written with the following format: hh:mm:ss (script name) message 
 */  
class Logging{  
  // define log file  
  private $log_file = '/tmp/logfile.txt';  
  // define file pointer  
  private $fp = null;  
  // write message to the log file  
  public function lwrite($message){  
    // if file pointer doesn't exist, then open log file  
    if (!$this->fp) $this->lopen();  
    // define script name  
    $script_name = pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME);  
    // define current time  
    $time = date('H:i:s');  
    // write current time, script name and message to the log file  
    fwrite($this->fp, "$time ($script_name) $message\n");  
  }  
  // open log file  
  private function lopen(){  
    // define log file path and name  
    $lfile = $this->log_file;  
    // define the current date (it will be appended to the log file name)  
    $today = date('Y-m-d');  
    // open log file for writing only; place the file pointer at the end of the file  
    // if the file does not exist, attempt to create it  
    $this->fp = fopen($lfile . '_' . $today, 'a') or exit("Can't open $lfile!");  
  }  
} 

我在这里看不到任何文件关闭代码。这样好吗?如果没有,那么哪个适合?或者,只要脚本完全执行(运行),PHP就会关闭文件吗?

4 个答案:

答案 0 :(得分:1)

正如人们所说,PHP将自动关闭文件。但是,最好关闭文件。

  1. 在大多数语言中,您必须明确关闭文件,否则可能会导致数据丢失。因此,如果您移植了应用程序,这是一个很好的习惯,并且很有帮助。

  2. 在关闭发生之前,数据可能无法刷新到磁盘。如果你的脚本运行任何时间长度(作为PHP脚本授予它可能不会),那么你可能希望更明确地控制何时编写内容。对于我的“典型”日志记录应用程序,我打开并关闭每行上的文件,以便在发生崩溃时保存我的日志

  3. 最重要的,也是被忽视的:它阻止下一个人再次提出这个问题!这是代码清晰度问题;如果你不得不问是否正确,你应该考虑改写它以使其看起来正确。

答案 1 :(得分:0)

关闭文件并不是绝对必要的,因为大多数C运行时将在进程结束时自动关闭它。但是,某些C运行时可能无法刷新缓存中的数据,因此建议您关闭所有打开的文件以避免数据丢失。

答案 2 :(得分:0)

PHP实际上会关闭脚本执行后处理的文件

明确地这样做是“最佳实践”,但在大多数情况下并不重要。我想如果有一个无法处理的异常,你可能会留下一个'打开'的文件,而且无论如何它只需要一行就可以关闭 - 为什么不呢?

答案 3 :(得分:0)

问题不在于关闭文件,因为在文件关闭之前刷新输出。如果一个文件只是关闭,那就是它 - 它已经关闭了。如果它的输出缓冲区中有任何剩余数据,则可能会丢失。

现在,PHP关闭文件时可能会“刷新并关闭”,我不知道。但是,对于没有明确关闭文件的问题,这是首先考虑的问题。