|
|
|
| Пожалуйста помогите.
Допустим у меня есть файлы cd.txt и script.php. Файл script.php генерирует случайное шестизначное число и после этого записавает его в файл cd.txt .
1. Как мне сделать так, что после выполнения скрипта script.php новое число записывалось в файл cd.txt с новой строки, при этом старые записанные числа в файле cd.txt не удалялись, то есть как добавить еще одну строку в файле не удаляя предыдущие?
2. Как потом вывести последнюю строку?
3. Можно ли сделать так, что если к файлу cd.txt ближайшие 60 секунд не дописывали новую строку, то он автоматические удаляется?
P.S.: Если можно, то ответ получить наглядно в виде скрипта или алгоритма.
Заранее благодарен. | |
|
|
|
|
|
|
|
для: Sc
(28.11.2006 в 13:54)
| | 1. нужно написать не
fread("cd.txt",w);
а вот так
fread("cd.txt",a+);
|
2. воспользоваться count эта фонкция получает число всех строк в файле, и просто взять последнею! | |
|
|
|
|
|
|
|
для: Sc
(28.11.2006 в 13:54)
| |
<?php
// инициализируем генератор и получаем случайное шестизначное число
srand((double) microtime() * 1000000);
$new_string=rand (100000, 999999);
// определяем время последнего изменения файла и текущее время
$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, -6, SEEK_END);
// считываем последнюю запись (шестизначный номер)
$last_string=fgets($fp, 6);
// записываем в конец новый номер
fputs($fp, $new_string);
fclose($fp);
// выводим последнюю запись
echo $last_string;
?>
|
Код не проверял, возможна ошибка в синтаксисе/логике строки fseek($fp, -6, SEEK_END); | |
|
|
|
|
|
|
|
для: tuder
(28.11.2006 в 15:03)
| | Большое спасибо, буду пробывать! | |
|
|
|
|
|
|
|
для: Sc
(28.11.2006 в 19:05)
| | Вот уточнённый, подправленный, проверенный скрипт.
<?php
// инициализируем генератор и получаем случайное шестизначное число
srand((double) microtime() * 1000000);
$new_string=rand (100000, 999999);
// если файл имеется
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, -6, SEEK_END);
// считываем последнюю запись (шестизначный номер)
$last_string=fgets($fp, 7);
// записываем в конец новый номер
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мь(с разделителем строк) ? | |
|
|
|
|
|
|
|
для: tuder
(29.11.2006 в 09:22)
| | Спасибо. Кстати, я вчера еще на предыдущем примере тоже думал, почему, когда считавыешь 6 символов, то он выводит 5, а когда 7, то выводит 6. | |
|
|
|