Имеется файл в который происходит запись с формы построчно.
Но необходимо органичить кол-во строк, чтоб при превышении этого кол-ва происходила запись поверх первой, чтобы была как бы текучка (ПЕРЕЗАПИСЬ).
А то получается файл растет как на дрожжах.
Запись производится с помощью $outputstring.
1. 23Rus - 04 Июля, 2006 - 05:24:22 - перейти к сообщению
2. Ray Wen - 04 Июля, 2006 - 06:14:37 - перейти к сообщению
23Rus
У меня практики по PHP уже больше полугода небыло... но на соклько я помню есть хорошая функция file(), которая открывает файл как массив, где каждая строка элемент... Подсчитываем колличество элементов, если больше лимита, удаляем первый и записываем в конец следующий, можно писать в файл обратно...
У меня практики по PHP уже больше полугода небыло... но на соклько я помню есть хорошая функция file(), которая открывает файл как массив, где каждая строка элемент... Подсчитываем колличество элементов, если больше лимита, удаляем первый и записываем в конец следующий, можно писать в файл обратно...
3. 23Rus - 05 Июля, 2006 - 07:37:49 - перейти к сообщению
Короче моими усилиями было написано следующее, как мне кажется логично, но в самом конце не происходит запись нового массива в файл - пишет следующее: Array to string conversion in (строчка тут такая: fwrite($fp, $new_array)
Ну а вот сам
Как решить проблемку не знаю - с массивами работаю первый раз. Уже пол дня бьюсь.
Вместо записи всего нового массива в файл записывает (Array).
Ну а вот сам
CODE:
<?php
//короткие имена переменных
$DOCUMENT_ROOT=$HTTP_SERVER_VARS['DOCUMENT_ROOT'];
$text = trim($HTTP_POST_VARS['text']);
if (empty ($text))
{
echo '<p style="color:#f00">Новость не может быть добавлена, так как Вы ничего не написали.<BR>Пожалуйста, введите текст новости.</p><p><a href="javascript:history.back(1)" title="вернуться к форме добавления новости">вернуться</a></p>';
exit;
}
$text = htmlspecialchars(stripslashes($text)); // запрет использования html
echo '<p><b>Новость:</b><p>';
echo nl2br($text);
echo '<p><b>Размещена на сайте в</b> ';
echo date('d.m.Y');
$text = str_replace("\n","\\n", $text);
$line = file("$DOCUMENT_ROOT/new/news.txt");
$number_news = count($line);
if ( $number_news < 4)
{
$fp = @fopen("$DOCUMENT_ROOT/new/news.txt", 'a');
$new_text = "<img src='img/news.gif' class='img_news'> <strong>".date('d.m.Y').
"</strong> ".$text."</br>\n";
flock ($fp, LOCK_EX); // блокирование файла для записи
fwrite($fp, $new_text);
flock ($fp, LOCK_UN); //снятие блокировки на запись
fclose($fp);
}
if ( $number_news == 4)
{
$new_text = "<img src='img/news.gif' class='img_news'> <strong>".date('d.m.Y')."</strong> ".$text."</br>\n";
array_splice($line, 0, 1, $new_text);
print ($line);
$fp = fopen("$DOCUMENT_ROOT/new/news.txt", 'w');
flock ($fp, LOCK_EX); // блокирование файла для записи
fwrite($fp, $line);
flock ($fp, LOCK_UN); //снятие блокировки на запись
fclose($fp);
}
?>
//короткие имена переменных
$DOCUMENT_ROOT=$HTTP_SERVER_VARS['DOCUMENT_ROOT'];
$text = trim($HTTP_POST_VARS['text']);
if (empty ($text))
{
echo '<p style="color:#f00">Новость не может быть добавлена, так как Вы ничего не написали.<BR>Пожалуйста, введите текст новости.</p><p><a href="javascript:history.back(1)" title="вернуться к форме добавления новости">вернуться</a></p>';
exit;
}
$text = htmlspecialchars(stripslashes($text)); // запрет использования html
echo '<p><b>Новость:</b><p>';
echo nl2br($text);
echo '<p><b>Размещена на сайте в</b> ';
echo date('d.m.Y');
$text = str_replace("\n","\\n", $text);
$line = file("$DOCUMENT_ROOT/new/news.txt");
$number_news = count($line);
if ( $number_news < 4)
{
$fp = @fopen("$DOCUMENT_ROOT/new/news.txt", 'a');
$new_text = "<img src='img/news.gif' class='img_news'> <strong>".date('d.m.Y').
"</strong> ".$text."</br>\n";
flock ($fp, LOCK_EX); // блокирование файла для записи
fwrite($fp, $new_text);
flock ($fp, LOCK_UN); //снятие блокировки на запись
fclose($fp);
}
if ( $number_news == 4)
{
$new_text = "<img src='img/news.gif' class='img_news'> <strong>".date('d.m.Y')."</strong> ".$text."</br>\n";
array_splice($line, 0, 1, $new_text);
print ($line);
$fp = fopen("$DOCUMENT_ROOT/new/news.txt", 'w');
flock ($fp, LOCK_EX); // блокирование файла для записи
fwrite($fp, $line);
flock ($fp, LOCK_UN); //снятие блокировки на запись
fclose($fp);
}
?>
Как решить проблемку не знаю - с массивами работаю первый раз. Уже пол дня бьюсь.
Вместо записи всего нового массива в файл записывает (Array).
4. 23Rus - 06 Июля, 2006 - 01:08:11 - перейти к сообщению
Может перед записью нового массива в файл его надо как-нить обрабатывать, а то вместо массива он пишет в файл просто слово (array) и все?
Прошу помощи, а то уже голова кипит и в php.net ничего на эту тему не могу найти.
Прошу помощи, а то уже голова кипит и в php.net ничего на эту тему не могу найти.
5. Ray Wen - 06 Июля, 2006 - 04:24:25 - перейти к сообщению
23Rus
Нужно снова распечатать весь массив построчно циклом FOR, ну или каким удобнее, в переменную и записывать уже ее...
Нужно снова распечатать весь массив построчно циклом FOR, ну или каким удобнее, в переменную и записывать уже ее...
6. 23Rus - 06 Июля, 2006 - 04:34:05 - перейти к сообщению
Справился вот таким способом, потратив еще пол дня
Зато разобрался как работать с массивами немного.
CODE:
if ( $number_news == 4)
{
$new_text = "<img src='img/news.gif' class='img_news'> <strong>".date('d.m.Y')."</strong> ".$text."</br>\n";
array_shift($line);
array_push($line, $new_text);
$fp = fopen("$DOCUMENT_ROOT/new/news.txt", 'w');
flock ($fp, LOCK_EX); // блокирование файла для записи
for($i=0; $i<count($line); $i++)
{
fputs($fp, $line[$i]);
}
flock ($fp, LOCK_UN); //снятие блокировки на запись
fclose($fp);
}
{
$new_text = "<img src='img/news.gif' class='img_news'> <strong>".date('d.m.Y')."</strong> ".$text."</br>\n";
array_shift($line);
array_push($line, $new_text);
$fp = fopen("$DOCUMENT_ROOT/new/news.txt", 'w');
flock ($fp, LOCK_EX); // блокирование файла для записи
for($i=0; $i<count($line); $i++)
{
fputs($fp, $line[$i]);
}
flock ($fp, LOCK_UN); //снятие блокировки на запись
fclose($fp);
}
Зато разобрался как работать с массивами немного.