Игорь_Vasinsky
16.06.2013 - 22:09
файл большой? какой максимальный вес файла ожидается?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Stasonix
16.06.2013 - 22:35
Цитата (Игорь_Vasinsky @ 16.06.2013 - 18:09) |
файл большой? какой максимальный вес файла ожидается? |
маленький файл, я думаю если удаление будет происходит нормально, то размер будет колебаться от 15 до 20 или 30-ти строк, всего-лишь.
sergeiss
16.06.2013 - 23:02
Цитата (Stasonix @ 16.06.2013 - 22:06) |
Собственно сабж. |
Собственно, используй file(). Затем удаляешь первый элемент массива. Все оставшиеся элементы записываешь в тот же файл, перезаписывая его.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
innovate
16.06.2013 - 23:36
$file = file("test.txt");
$fopn = fopen("test.txt", "w+");
$arr = array_reverse($file);
foreach ($arr as $k => $v) {
if($i++ == 15) {
break;
}
fwrite($fopn, $v);
}
sergeiss
16.06.2013 - 23:45
innovate - зачем столько телодвижений перед записью? И зачем array_reverse() - он тут совсем не нужен, потому что поменяет порядок следования элементов. И точное количество строк тоже не известно, как я понял.
Вобщем, тут достаточно использовать unset() для первого элемента массива.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Stasonix
16.06.2013 - 23:59
Точно кол-во строк можно посчитать:
Пробовал так:
$linecount = 0;
$handle = fopen('test.txt', "r");
while(!feof($handle)){
$line = fgets($handle);
$linecount++;
}
fclose($handle);
if ($linecount>15)
{
$lines = file('test.txt');
$lines = array_slice($lines,$linecount-15);
$content = '';
foreach ($lines as $line){
$content.=$line;
}
file_put_contents('test.txt',$content);
}
Но что-то не очень мне нравится, мне кажется что-то здесь неправильно
innovate
17.06.2013 - 00:04
Цитата |
зачем array_reverse() - он тут совсем не нужен |
согласен - мой косяк.
$fopen = fopen("test.txt", "w+");
$arr = file("test.txt");
$linec = count($arr);
if($linec > 15) {
for($i = $linec-15; $i != $linec; $i++) {
fwrite($fopen, $arr[$i]);
}
}
"тут достаточно использовать unset() для первого элемента массива."
Очень хочу взглянуть на это решение. ;)
sergeiss
17.06.2013 - 00:25
Цитата (innovate @ 17.06.2013 - 00:04) |
"тут достаточно использовать unset() для первого элемента массива."Очень хочу взглянуть на это решение. ;) |
Цитата (Stasonix @ 16.06.2013 - 23:59) |
Но что-то не очень мне нравится, мне кажется что-то здесь неправильно |
Тебе же уже подсказали: используй функцию file(). И количество элементов массива (т.е. строк файла) можно легко подсчитать, не надо никакие циклы писать.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Stasonix
17.06.2013 - 00:32
$arr = file("test.txt");
$count = count($arr);
if ($count>=15) {
$fopen = fopen("test.txt", "w+");
for($i = $count-14; $i != $count; $i++) {
fwrite($fopen, $arr[$i]);
}
fclose($fopen);
}
Спасибо
innovate, как раз то что нужно!
innovate
17.06.2013 - 00:34
Так получишь 14 строк, а не 15(\r\n не в cчет).
sergeiss
17.06.2013 - 00:35
innovate, ну и чего с того? А кто мешает в цикл загнать то, что я написал?
while( count( $arr ) > 15 )
{
unset( $arr[0] );
array_shift( $arr );
}
И не надо никаких лишних телодвижений делать :)
Автору темы: прочитай внимательно то, что я написал (особенно код ПХП). Он тебе может быть очень полезен.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Stasonix
17.06.2013 - 00:38
Цитата (innovate @ 16.06.2013 - 20:34) |
Так получишь 14 строк, а не 15 |
Я специально это сделал, просто после всех этих удалений пользователь добавляет новое сообщение и становится как раз 15, вот примерно так:
if (isset($_POST['msg']) and !empty($_POST['msg']))
{
$arr = file("text.txt");
$count = count($arr);
if ($count>=15) {
$fopen = fopen("text.txt", "w+");
for($i = $count-14; $i != $count; $i++) {
fwrite($fopen, $arr[$i]);
}
fclose($fopen);
}
file_put_contents('text.txt',file_get_contents('text.txt').$_POST['msg'].'<br />'."\r\n");
echo file_get_contents('text.txt');
}