$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] );
удалить заданное кол-во строк из файла [php]
Код:
$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);
}
$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);
}
всё просто... читаем в массив файл, по после записываем массив обратно в файл, но пропускаем строки которые надо удалить. но у меня почему то ничего не удалятеся. подскажите в чём проблема??
Код конечно писец... Открой для себя РСУБД, ну в крайнем случае file() или serialize()/unserialize().
Код:
или
Код:
$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] );
}
}
$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, могу наврать в синтаксисе, но идея, надеюсь, понятна.
А под условием вообще что-то адское идёт, неужели это нельзя в цикл загнать?
Когда я писал гостевушку на файлах, у меня каждое сообщение лежало в отдельном файле, для удаления достаточно было удалить файл с этим сообщением.