I found a logging script like this:
/**
* 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!");
}
}
I can’t see any file closing code here. Is that just fine? If not, at which point would that be appropriate? Or does PHP close the file anyways as soon as the script is completely executed (run through)?
As people have said, PHP will close the file automatically. However, it is best practice to close the file.
In most languages you have to explicitly close your files, and failure to do so may lead to data loss. So it’s a good habit to be in, and helpful if you ever port your application.
Data may not be flushed to the disk until the close happens. If your script runs for any length of time ( granted, as a PHP script it probably won’t ) then you might want more explicit control on when things are written. For my “typical” logging application, I open and close the file on each line, so that my log is saved in the event of a crash
The most important, and overlooked: It stops the next person from having to ask this question again! This is a code clarity issue; if you have to ask if it’s right, you should consider rewriting it so that it looks right.