За последние 24 часа нас посетил 55831 программист и 1798 роботов. Сейчас ищут 908 программистов ...

Не удаётся сделать лог-счетчик (про массивы и запись в файл)

Тема в разделе "Прочие вопросы по PHP", создана пользователем [vs], 4 окт 2007.

  1. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Пытаюсь сделать скрипт, который бы записывал количество его вызовов сразу после даты.
    Т.е. чтобы он сохранял в текстовый файл строки вида
    Код (Text):
    1.  
    2. 01.10.2007
    3. 44
    4.  
    5. 02.10.2007
    6. 87
    7.  
    8. и т.д.
    Пытаюсь это сделать так: получаю содержимое файла в массиве, ищу в массиве текущую дату с помощью arra_search, если она есть, записываю в строку под ней (которая по-идее имеет ключ в массиве как ключ_элемента_с_датой + 1) число, которое там уже есть + 1.
    Если функция array_search возвращает false, то в конец файла дописываю две строки - одна с датой, другая с цифрой 1.

    Вот код:
    PHP:
    1.  
    2. <?php
    3. $data = date("d.m.Y");
    4. $log = file(log.bd);
    5.  
    6. if ($logI = array_search("$data\n",$log)!=false)
    7. {
    8.     $cur_data = $logI;
    9.     $ArNumbStat = $cur_data+1;
    10.     $log[$ArNumbLog] = $log[$ArNumbLog]+1;
    11.     $fp = fopen("log.bd",'w');
    12.     foreach ($log as $log_write)
    13.     {
    14.         fwrite($fp,$log_write);
    15.     }
    16.     fclose($fp);   
    17.        }
    18. else
    19.     {
    20.     $fp = fopen("log.bd",'a');
    21.     fwrite($fp,"\n".$data."\n"."1\n");
    22.     fclose($fp);
    23.    }
    24. ?>
    Пока текущая дата не меняется, счетчик всё работает нормально, но если дата изменяется, то создаётся новая записи совсем не там, где нужно, и соответственно после двух вызовов скрипта после смены даты получается вообще билеберда :(
    Где ошибка?
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    serialize() is the god!

    PHP:
    1. <?php
    2. $file = 'log.db';
    3. $date = date('Y.m.d');
    4. $data = array();
    5. if (file_exists($file)){
    6.     $data = unserialize(file_get_contents($file));
    7. }
    8. if (array_key_exists($date, $data)){
    9.     $data[$date]++;
    10. }else{
    11.     $data[$date] = 1;
    12. }
    13. ?>
    14.  
    А вывод данных просто другим скриптом, к примеру так:
    PHP:
    1. <?php
    2. $file = 'log.db';
    3. if (file_exists($file)){
    4.     $data = unserialize(file_get_contents($file));
    5.     foreach ($data as $key => $value){
    6.         print $key.' : '.$value."\n"; // Или <br> если выводиться в браузер
    7.     }
    8. }else{
    9.     print 'File '.$file.' not found';
    10. }
    11.  
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Спасибо за помощь :)
     
  4. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    [vs]
    Я там чуть подправил, т.к. немного ошибся :)