我发现了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就会关闭文件吗?
答案 0 :(得分:1)
正如人们所说,PHP将自动关闭文件。但是,最好关闭文件。
在大多数语言中,您必须明确关闭文件,否则可能会导致数据丢失。因此,如果您移植了应用程序,这是一个很好的习惯,并且很有帮助。
在关闭发生之前,数据可能无法刷新到磁盘。如果你的脚本运行任何时间长度(作为PHP脚本授予它可能不会),那么你可能希望更明确地控制何时编写内容。对于我的“典型”日志记录应用程序,我打开并关闭每行上的文件,以便在发生崩溃时保存我的日志
最重要的,也是被忽视的:它阻止下一个人再次提出这个问题!这是代码清晰度问题;如果你不得不问是否正确,你应该考虑改写它以使其看起来正确。
答案 1 :(得分:0)
关闭文件并不是绝对必要的,因为大多数C运行时将在进程结束时自动关闭它。但是,某些C运行时可能无法刷新缓存中的数据,因此建议您关闭所有打开的文件以避免数据丢失。
答案 2 :(得分:0)
PHP实际上会关闭脚本执行后处理的文件。
明确地这样做是“最佳实践”,但在大多数情况下并不重要。我想如果有一个无法处理的异常,你可能会留下一个'打开'的文件,而且无论如何它只需要一行就可以关闭 - 为什么不呢?
答案 3 :(得分:0)
问题不在于关闭文件,因为在文件关闭之前刷新输出。如果一个文件只是关闭,那就是它 - 它已经关闭了。如果它的输出缓冲区中有任何剩余数据,则可能会丢失。
现在,PHP关闭文件时可能会“刷新并关闭”,我不知道。但是,对于没有明确关闭文件的问题,这是首先考虑的问题。