Всем привет. Помогите доработать простой код. <html> <head> <Meta Http-equiv="Content-Type" Content="text/html; charset=Windows-1251"> <title>userinfo view</title> </head> <body> <?php /*powered by Pron pronweb@gmail.com*/ if(is_writable("log.html")) echo("У нас есть права на запись в log.html"); echo("<br>"); echo("Размер файла log.html (кб) - "); $size=filesize("log.html"); $count=$size/4; echo("$count"); echo("<hr>"); include("log.html"); ?> <?php session_start(); if(!session_is_registered('counted')){ $ip = $_SERVER['REMOTE_ADDR']; $datetime=date("m/d/y G.i:s", time()); if($ref == ""){ $ref = "None"; } if($user == ""){ $user = "None"; } $entry_line = "$datetime - IP: $ip $login</br>"; $fp = fopen("log.html", "a"); fputs($fp, "$datetime || ip: $ip $page $login<br>\r\n"); fclose($fp); session_register('counted'); } ?> Собственно вопрос, как в лог файле записывать к примеру не более 20 строк ? PHP 5.1.6
к примеру просто перестань записывать. наверняка там уже есть 20 строк Добавлено спустя 2 минуты 33 секунды: я попытаюсь придать смысл твоей заявке: как читать из лога последние 20 строк? эта классическая задача называется tail. в юниксах есть такая программа, в интернетах есть одноименные веб-скрипты. на винду tail можно заполучить в составе cygwin или unxutils.
эмм я мож чего не понял - т.е. чтобы если в логе 20 строчек - остановить запись в него ? странный лог.. ну да ладно .. 20 так 20 .. Код (PHP): <?php session_start(); if(!session_is_registered('counted')){ $ip = $_SERVER['REMOTE_ADDR']; $datetime=date("m/d/y G.i:s", time()); if($ref == ""){ $ref = "None"; } if($user == ""){ $user = "None"; } $entry_line = "$datetime - IP: $ip $login</br>"; $fp = file("log.html"); if (count($fp) < 20) { $fp = fopen("log.html", "a"); fputs($fp, "$datetime || ip: $ip $page $login<br>\r\n"); fclose($fp); } session_register('counted'); } ?>
Запись идёт как только заходит новый юзер на сайт, при заполнении лога 20тью строками, надо записывать последнюю строку, а первую удалять. Как то уже делал этот код, но дело было давно, не получается заново его доделать... Нашёл примерное решение задачи viewtopic.php?t=28092 завтра попробую.
Код (PHP): $records = file('path/to/file'); $records[] = 'new'; if (count($records) > 20) array_shift($records); формально соответствует поставленной задаче, только логи из 20 строк это, мягко говоря, не мудро. советую обратить внимание на tail.
Всем спасибо, ( не ожидал такого активного участия специалистов кстати )покумекал немного и вышло, как хотел. <?php session_start(); if(!session_is_registered('counted')){ $ip = $_SERVER['REMOTE_ADDR']; $datetime=date("m/d/y G.i:s", time()); if($ref == ""){ $ref = "None"; } if($user == ""){ $user = "None"; } $a1="log.html"; $a2=fopen($a1,"r"); // открываем для чтения $text=fread($a2,filesize($a1)); //читаем fclose($a2); $what="$datetime - IP: $ip $login</br>\r\n"; // строка $f=fopen("log.html","w"); // открываем для записи // пишем нашу строку и к ней добавляем раннее содержимое файла fwrite($f,$what.$text); fclose($f); session_register('counted'); } ?> <?php $num_stroka = 20; //Удалим 20-тую строку из файла $file = file("log.html"); // Считываем весь файл в массив for($i = 0; $i < sizeof($file); $i++) if($i == $num_stroka) unset($file[$i]); $fp = fopen("log.html", "w"); fputs($fp, implode("", $file)); fclose($fp); ?>