我想在 PHP中创建一个简单的日志文件,以后可以由 PHP读取。
此日志文件应如下所示:
1303942306 26.4 "Lore ipsum 1" 84.169.73.55 appname1
1303942308 28.8 "Lore ipsum 2" 84.169.73.55 appname2
1304078658 31.2 "Lore ipsum 3" 80.187.103.95 appname3
如您所见,它应该包含以下变量:
$timestamp
$float
$text (with spaces and other special characters)
$ip
$appname
到目前为止,无需在此日志文件中保存文本(带空格),因此我可以使用一个简单的 fscanf 函数。
我试过用“|” 作为 fscanf 的分隔符 - 但是,它有一些“故障”;-):
//write to file
$statisticsfile = fopen("user.history",'a+b');
fputs($statisticsfile, time().' | '.$float.' | '.$text.' | '.$_SERVER['REMOTE_ADDR'].' | '.$appname."\r\n");
//read from file
while ($userinfo = fscanf($statisticsfile, "%[0-9] | %[0-9.-] | %[a-zA-Z0-9 ,] | %[0-9.] | %[0-9]"))
{list ($timestamp[], $float[], $text[], $ip[], $appname[]) = $userinfo;}
这段代码产生了三个问题:
- 它跳过日志文件中的第一行
- 文本只能包含字母和数字(以及我定义的所有其他特殊字符),但如果我只能排除分隔符,这是一个更好的设计
- fscanf 真的是这项任务的最佳(最快、最少内存消耗)功能吗?或者带有分隔符的简单 fget 函数会更好吗?
我将衷心感谢您的帮助 ;-)