Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

удалить заданное кол-во строк из файла [php]

930
27 июля 2009 года
Sash1k
115 / / 27.04.2007
пишу админ панель гостевой книги, возникла проблема с удалением сообщений. все сообщения хранятся в текстовом файле, для удаления спользую код:
Код:
$lines=file("msg.txt");
    $f=fopen("msg.txt", "r+t") or die("Не могу открыть файл <b>data/msg.txt</b>");
    flock($f, 2);
    ftruncate($f, 0);
    //кол-во выведенных сообщений
    $a=0;
    //элемент массива
    $s=0;
    while (!(count($lines)==$s))
    {
        if (!($a==$_GET['num']))
        {
            fputs($f, $lines[$s]);
            $s++;
            fputs($f, $lines[$s]);
            $s++;
            fputs($f, $lines[$s]);
            $s++;
            fputs($f, $lines[$s]);
            $s++;
            fputs($f, $lines[$s]);
            $s++;
            fputs($f, $lines[$s]);
            $s++;
            fputs($f, $lines[$s]);
            $s++;
            fputs($f, $lines[$s]);
            $s++;
        }
        else
        {
            $s=$s+8; //пропускаем удаляемое сообщение
        }
        $a++;

    }
    flock($f, 3);
    fclose($f);
}


всё просто... читаем в массив файл, по после записываем массив обратно в файл, но пропускаем строки которые надо удалить. но у меня почему то ничего не удалятеся. подскажите в чём проблема??
12
27 июля 2009 года
alekciy
3.0K / / 13.12.2005
Код конечно писец... Открой для себя РСУБД, ну в крайнем случае file() или serialize()/unserialize().
353
27 июля 2009 года
Nixus
840 / / 04.01.2007
Код весьма запутан. Хорошо, что удаляемых строк всего 8. :)

 
Код:
$record_len = 8;
$start = $_GET['num']*$record_len;
$end = $start + $record_len;
$count = count($lines);

for( $i = 0; $i < $start; $i++ )
     fputs( $f, $lines[$i] );

for( $i = $end; $i < $count; $i++ )
     fputs( $f, $lines[$i] );

или
 
Код:
$record_len = 8;
$num = $_GET['num'];
$count = count($lines);

for( $i = 0; $i < $count; $i += $record_len ) {
     if( $num*$record_len != $i ) { // Тут можно подобрать условие для удаляения нескольких записей одновременно.
         for( $j = $i; $j < $i + $record_len; $j++ )
             fputs( $f, $lines[$j] );
     }
}


PS. Давно не писал на PHP, могу наврать в синтаксисе, но идея, надеюсь, понятна.
366
27 июля 2009 года
int
668 / / 30.03.2005
Автор, открой для себя !=
А под условием вообще что-то адское идёт, неужели это нельзя в цикл загнать?
Когда я писал гостевушку на файлах, у меня каждое сообщение лежало в отдельном файле, для удаления достаточно было удалить файл с этим сообщением.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог