Strict Standards: Resource ID#29 used as offset, casting to integer (29) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#31 used as offset, casting to integer (31) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#32 used as offset, casting to integer (32) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: ограничение количества строк в файле при записи в него
ТвойWeb » WebMaster класс » PHP/Perl » ограничение количества строк в файле при записи в него

Страниц (1): [1]
 

1. 23Rus - 04 Июля, 2006 - 05:24:22 - перейти к сообщению
Имеется файл в который происходит запись с формы построчно.

Но необходимо органичить кол-во строк, чтоб при превышении этого кол-ва происходила запись поверх первой, чтобы была как бы текучка (ПЕРЕЗАПИСЬ).

А то получается файл растет как на дрожжах.

Запись производится с помощью $outputstring.
2. Ray Wen - 04 Июля, 2006 - 06:14:37 - перейти к сообщению
23Rus
У меня практики по PHP уже больше полугода небыло... но на соклько я помню есть хорошая функция file(), которая открывает файл как массив, где каждая строка элемент... Подсчитываем колличество элементов, если больше лимита, удаляем первый и записываем в конец следующий, можно писать в файл обратно...
3. 23Rus - 05 Июля, 2006 - 07:37:49 - перейти к сообщению
Короче моими усилиями было написано следующее, как мне кажется логично, но в самом конце не происходит запись нового массива в файл - пишет следующее: Array to string conversion in (строчка тут такая: fwrite($fp, $new_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);
}
?>


Как решить проблемку не знаю - с массивами работаю первый раз. Уже пол дня бьюсь.

Вместо записи всего нового массива в файл записывает (Array).
4. 23Rus - 06 Июля, 2006 - 01:08:11 - перейти к сообщению
Может перед записью нового массива в файл его надо как-нить обрабатывать, а то вместо массива он пишет в файл просто слово (array) и все?

Прошу помощи, а то уже голова кипит и в php.net ничего на эту тему не могу найти.
5. Ray Wen - 06 Июля, 2006 - 04:24:25 - перейти к сообщению
23Rus
Нужно снова распечатать весь массив построчно циклом 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);
}

Зато разобрался как работать с массивами немного.

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0354]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33