後で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;}
このコードは3つの問題を引き起こします:
- ログファイルの最初の行をスキップします
- テキストには文字と数字(および私が定義した他のすべての特殊文字)のみを含めることができますが、区切り文字のみを除外できれば、より優れたデザインになります。
- fscanfは、このタスクに本当に最適な(最も速く、メモリを消費しない)関数ですか?または、区切り文字を使用した単純なfget関数の方が優れているでしょうか。
私は本当にあなたの助けをいただければ幸いです;-)