我有一个名为logToFile
的函数,当我调用它时,它会记录到文件但不添加新行。
这是我的代码:
function logToFile($msg) {
$filename = "log.txt";
$fd = fopen($filename, "a");
$str = "[" . date("Y/m/d h:i:s", mktime()) . "] " . $msg;
fwrite($fd, $str . "\n");
fclose($fd);
}
我试过了:
$msg . "\n"
$msg . "\r\n"
他们都输出了这个:
[2013/11/03 06:32:06]Test[2013/11/03 06:34:58]Test2[2013/11/03 06:37:10]Test3
答案 0 :(得分:0)
尝试:
fwrite($fd, $str . PHP_EOL);
这将为运行PHP的平台编写正确类型的行尾字符串。在Unix上它会写\n
,在Windows上它应该写\r\n
。
答案 1 :(得分:0)
这些\n
和\r
只能由浏览器查看。因此,如果您想要看到它,请停止使用NotePad对其进行操作,并在浏览器中打开该log.txt文件。
为此,请尝试以下代码:
function logToFile($msg) {
$filename = "log.txt";
$fd = fopen($filename, "a");
$str = "[" . date("Y/m/d h:i:s") . "] " . $msg . "\n";
fwrite($fd, $str . "\n");
fclose($fd);
}
但是,另一种方法是使用html文件而不是txt文件。你可以在那里使用。所以:
function logToFile($msg) {
$filename = "log.html";
$fd = fopen($filename, "a");
$str = "[" . date("Y/m/d h:i:s") . "] " . $msg . "<br>";
fwrite($fd, $str . "\n");
fclose($fd);
}
你也可以设计风格:
$str = "<span style='background-color: red;'>[" . date("Y/m/d h:i:s") . "] " . $msg . "</span><br>";
答案 2 :(得分:0)
除了缺少的新行(最有可能是记事本的“功能”)之外,您可以在PHP中使用error_log
函数。使用它们,您不必担心打开和关闭文件句柄的开销,因为它们都会为您解决:
/**
* logMessage
* @param string $message
* @param string $filename
* @param resource $logHandle
*/
function logMessage($message=null, $filename=null, $logHandle=null)
{
if (!is_null($filename))
{
$logMsg=date('Y/m/d H:i:s').": {$message}\n";
error_log($logMsg, 3, $filename);
}
if (is_object($logHandle))
{
try
{
$errorPS=$logHandle->prepare("insert into ".LOG_TABLE." (insertDateTime,logText) values (now(),:message)");
$errorPS->bindParam(':message', $message, PDO::PARAM_STR);
$errorPS->execute();
} catch (PDOException $e)
{
logError($e->getMessage(), ERROR_LOG);
}
}
}
/**
* logError
* @param string $message
* @param string $filename
* @param resource $logHandle
*/
function logError($message=null, $filename=null, $logHandle=null)
{
if (!is_null($message))
{
logMessage("***ERROR*** {$message}", $filename, $logHandle);
}
}
以上函数是我为自定义日志记录(以及数据库表)而编写的函数
希望这有帮助