Я хочу создать простой лог-файл в 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 с разделителем будет лучше?
Буду очень признателен за вашу помощь; -)