Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работа с файлами
 
 автор: Sc   (28.11.2006 в 13:54)   письмо автору
 
 

Пожалуйста помогите.

Допустим у меня есть файлы cd.txt и script.php. Файл script.php генерирует случайное шестизначное число и после этого записавает его в файл cd.txt .

1. Как мне сделать так, что после выполнения скрипта script.php новое число записывалось в файл cd.txt с новой строки, при этом старые записанные числа в файле cd.txt не удалялись, то есть как добавить еще одну строку в файле не удаляя предыдущие?
2. Как потом вывести последнюю строку?
3. Можно ли сделать так, что если к файлу cd.txt ближайшие 60 секунд не дописывали новую строку, то он автоматические удаляется?

P.S.: Если можно, то ответ получить наглядно в виде скрипта или алгоритма.

Заранее благодарен.

   
 
 автор: Diablo_   (28.11.2006 в 14:05)   письмо автору
 
   для: Sc   (28.11.2006 в 13:54)
 

1. нужно написать не

fread("cd.txt",w);
а вот так
fread("cd.txt",a+);

2. воспользоваться count эта фонкция получает число всех строк в файле, и просто взять последнею!

   
 
 автор: tuder   (28.11.2006 в 15:03)   письмо автору
 
   для: Sc   (28.11.2006 в 13:54)
 


<?php
// инициализируем генератор и получаем случайное шестизначное число
srand((double) microtime() * 1000000);
$new_string=rand (100000999999);
// определяем время последнего изменения файла и текущее время
$time_file=filemtime("cd.txt");
$time_now=time();
// если файл старше 60 секунд - удаляем
if ($time_now-$time_file>60) {
   
unlink("cd.txt");
}
// открываем на чтение с возможностью дозаписи. Если файла нет - создаётся.
$fp=fopen("cd.txt""a+");
// "отматываем" курсор назад
fseek($fp, -6SEEK_END);
// считываем последнюю запись (шестизначный номер)
$last_string=fgets($fp6);
// записываем в конец новый номер
fputs($fp$new_string);
fclose($fp);
// выводим последнюю запись
echo $last_string;
?>


Код не проверял, возможна ошибка в синтаксисе/логике строки fseek($fp, -6, SEEK_END);

   
 
 автор: Sc   (28.11.2006 в 19:05)   письмо автору
 
   для: tuder   (28.11.2006 в 15:03)
 

Большое спасибо, буду пробывать!

   
 
 автор: tuder   (29.11.2006 в 09:22)   письмо автору
 
   для: Sc   (28.11.2006 в 19:05)
 

Вот уточнённый, подправленный, проверенный скрипт.


<?php
// инициализируем генератор и получаем случайное шестизначное число
srand((double) microtime() * 1000000);
$new_string=rand (100000999999);
// если файл имеется
if (is_file("cd.txt")) {
// определяем время последнего изменения файла
   
$time_file=filemtime("cd.txt");
// и текущее время
   
$time_now=time();
// если файл старше 60 секунд - удаляем
   
if ($time_now-$time_file>60) {
      echo 
"Файл - суперстар";
      
unlink("cd.txt");
   }
}
// открываем на чтение с возможностью дозаписи. Если файла нет - создаётся.
$fp=fopen("cd.txt""a+");
// "отматываем" курсор назад
fseek($fp, -6SEEK_END);
// считываем последнюю запись (шестизначный номер)
$last_string=fgets($fp7);
// записываем в конец новый номер
fputs($fp$new_string);
fclose($fp);
// выводим последнюю запись
echo $last_string;
?>


Если для наглядности, хочется, чтобы коды писались не подряд, а с разбивкой по строкам - подправить две строки:

$new_string=rand (100000, 999999)."\n";



fseek($fp, -7, SEEK_END);



P.S. Кто бы мне объяснил, почему чтобы считать ШЕСТЬ символов, приходится задавать fgets($fp, 7);, в любом случае, хоть "отматываю" на 6ть назад, хоть на 7мь(с разделителем строк) ?

   
 
 автор: Sc   (29.11.2006 в 11:54)   письмо автору
 
   для: tuder   (29.11.2006 в 09:22)
 

Спасибо. Кстати, я вчера еще на предыдущем примере тоже думал, почему, когда считавыешь 6 символов, то он выводит 5, а когда 7, то выводит 6.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования