За последние 24 часа нас посетили 21749 программистов и 1021 робот. Сейчас ищут 650 программистов ...

Запись в файл.

Тема в разделе "Сделайте за меня", создана пользователем Vovec800, 16 окт 2013.

  1. Vovec800

    Vovec800 Активный пользователь

    С нами с:
    7 ноя 2010
    Сообщения:
    6
    Симпатии:
    0
    Всем привет. Помогите доработать простой код.

    <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
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    к примеру просто перестань записывать. наверняка там уже есть 20 строк :)

    Добавлено спустя 2 минуты 33 секунды:

    я попытаюсь придать смысл твоей заявке: как читать из лога последние 20 строк?
    эта классическая задача называется tail. в юниксах есть такая программа, в интернетах есть одноименные веб-скрипты. на винду tail можно заполучить в составе cygwin или unxutils.
     
  3. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    эмм я мож чего не понял - т.е. чтобы если в логе 20 строчек - остановить запись в него ? странный лог..
    ну да ладно .. 20 так 20 ..
    Код (PHP):
    1. <?php
    2.  
    3. if(!session_is_registered('counted')){
    4. $ip = $_SERVER['REMOTE_ADDR'];
    5. $datetime=date("m/d/y G.i:s", time());
    6.  
    7. if($ref == ""){
    8. $ref = "None";
    9. }
    10. if($user == ""){
    11. $user = "None";
    12. }
    13. $entry_line = "$datetime - IP: $ip $login</br>";
    14. $fp = file("log.html");
    15.    if (count($fp) < 20) {
    16.         $fp = fopen("log.html", "a");
    17.  
    18.         fputs($fp, "$datetime || ip: $ip $page $login<br>\r\n");
    19.         fclose($fp);
    20.    }
    21. session_register('counted');
    22. }
    23. ?>
     
  4. Vovec800

    Vovec800 Активный пользователь

    С нами с:
    7 ноя 2010
    Сообщения:
    6
    Симпатии:
    0
    Запись идёт как только заходит новый юзер на сайт, при заполнении лога 20тью строками, надо записывать последнюю строку, а первую удалять.

    Как то уже делал этот код, но дело было давно, не получается заново его доделать...

    Нашёл примерное решение задачи viewtopic.php?t=28092 завтра попробую.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Код (PHP):
    1. $records = file('path/to/file');
    2. $records[] = 'new';
    3. if (count($records) > 20) array_shift($records); 
    формально соответствует поставленной задаче, только логи из 20 строк это, мягко говоря, не мудро.
    советую обратить внимание на tail.
     
  6. Vovec800

    Vovec800 Активный пользователь

    С нами с:
    7 ноя 2010
    Сообщения:
    6
    Симпатии:
    0
    Всем спасибо, ( не ожидал такого активного участия специалистов кстати )покумекал немного и вышло, как хотел.

    <?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);
    ?>
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
  8. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
  9. Vovec800

    Vovec800 Активный пользователь

    С нами с:
    7 ноя 2010
    Сообщения:
    6
    Симпатии:
    0
    ну да, изврат, но работает как надо.