Пытаюсь сделать скрипт, который бы записывал количество его вызовов сразу после даты. Т.е. чтобы он сохранял в текстовый файл строки вида Код (Text): 01.10.2007 44 02.10.2007 87 и т.д. Пытаюсь это сделать так: получаю содержимое файла в массиве, ищу в массиве текущую дату с помощью arra_search, если она есть, записываю в строку под ней (которая по-идее имеет ключ в массиве как ключ_элемента_с_датой + 1) число, которое там уже есть + 1. Если функция array_search возвращает false, то в конец файла дописываю две строки - одна с датой, другая с цифрой 1. Вот код: PHP: <?php $data = date("d.m.Y"); $log = file(log.bd); if ($logI = array_search("$data\n",$log)!=false) { $cur_data = $logI; $ArNumbStat = $cur_data+1; $log[$ArNumbLog] = $log[$ArNumbLog]+1; $fp = fopen("log.bd",'w'); foreach ($log as $log_write) { fwrite($fp,$log_write); } fclose($fp); } else { $fp = fopen("log.bd",'a'); fwrite($fp,"\n".$data."\n"."1\n"); fclose($fp); } ?> Пока текущая дата не меняется, счетчик всё работает нормально, но если дата изменяется, то создаётся новая записи совсем не там, где нужно, и соответственно после двух вызовов скрипта после смены даты получается вообще билеберда Где ошибка?
serialize() is the god! PHP: <?php $file = 'log.db'; $date = date('Y.m.d'); $data = array(); if (file_exists($file)){ $data = unserialize(file_get_contents($file)); } if (array_key_exists($date, $data)){ $data[$date]++; }else{ $data[$date] = 1; } file_put_contents($file, serialize($data)); ?> А вывод данных просто другим скриптом, к примеру так: PHP: <?php $file = 'log.db'; if (file_exists($file)){ $data = unserialize(file_get_contents($file)); foreach ($data as $key => $value){ print $key.' : '.$value."\n"; // Или <br> если выводиться в браузер } }else{ print 'File '.$file.' not found'; }