我正在尝试使我的代码能够在打开数据库时记录任何类型的错误。我想要做的是,创建一个.txt文件,如果出现错误,所有日志都将保存在那里。
到目前为止我所做的是:
bla bla bla
} catch(PDOException $e) {
//in case of error , we create a log file with the error
//$PDOException_file = 'PDOException_file_' . date('Y_m_d-H-i-s') . '.txt' ;
$PDOException_file = 'PDOException_file' . '.txt' ;
$fh = fopen($PDOException_file, 'w') or die();
fwrite($fh, date('Y_m_d-H-i-s') . ' PDOException Error: ' . $e->getMessage() . "\n\n" );
fclose($fh);
echo 'Error: ' . $e->getMessage();
}
我对我编写的代码的期望是创建一个.txt文件“PDOException”文件并在里面获取这样的日志:
2013_05_02-12-40-02 PDOException Error: bla bla bla
2013_05_02-12-43-02 PDOException Error: bla bla bla
2013_05_02-13-45-02 PDOException Error: bla bla bla
这意味着每次我有错误,打开文件,写错误使2个新行关闭文件。然后下次我收到错误时,我会在文件的末尾写错误等等。
但是我会在旧数据的文件开头重写。我怎么能避免这种情况?
答案 0 :(得分:9)
在您的代码中:
$fh = fopen($PDOException_file, 'w') or die()
您应该使用:
$fh = fopen($PDOException_file, 'a') or die()
w
打开仅用于写入的文件,并将文件指针放在文件的开头,并将文件截断为零长度(删除所有内容)。如果该文件不存在,它将尝试创建它。 a
将打开文件以进行写入,并将文件指针放在文件的末尾。如果该文件不存在,它将尝试创建它。
您可以在此处找到有关fopen()
的更多信息:http://php.net/manual/en/function.fopen.php
答案 1 :(得分:1)
http://php.net/manual/en/function.fopen.php 有很多例子,以及如何使用它的信息。
你想要做的是用'a'代替'w'。 这会将指针放在文件的末尾,而不是开头,这样就不会覆盖文件中的任何现有文本。
答案 2 :(得分:1)
您可以使用file_put_contents代替 FILE_APPEND 标记作为替代方法:
file_put_contents($PDOException_file, date('Y_m_d-H-i-s') . ' PDOException Error: ' . $e->getMessage() . "\n\n", FILE_APPEND);
答案 3 :(得分:0)
检查您的文件是否已存在。
您使用的fopen参数是'w',它将创建一个新文件并替换旧文件。您可以使用“a”附加文件。
此 http://php.net/manual/en/function.file-exists.php 还有这个 http://php.net/manual/en/function.fopen.php 可能是一个适当的参考
答案 4 :(得分:0)
有一些模式可以让fopen打开文件。您已经使用了模式“W”,即它将以写入模式打开文件,指针位于开头,这就是为什么每次删除文件数据并从最开始粘贴数据的原因。因此,使用“a”代替那个,在附加模式下打开文件意味着您的现有数据将保留在那里,之后将附加新数据。
答案 5 :(得分:0)
您可以使用以下内容:
$myFile="text.txt";
$original_data=file_get_contents($myFile);
$new_data=original_data."\n\n".'PDOException Error: '.$e->getMessage();
file_put_contents($myFile,$new_data);