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

Ваш аккаунт

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

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

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

Удаление строки из файла

Q: Есть ли функция удаления строки из файла.
Q: Как удалить строку из файла.

Я очень часто встречаю вопрос типа "Как удалить определенную строку из файла?". Народ совсем не хочет шевелиться, ведь так легко зайти на любой крупный форум по PHP, и в сроке поиска написать что-то типа "Удаление строк из файла". Пятерка результатов гарантирована. Итак, в первой части статьи мы как раз рассмотрим способ удаления определенной строки из текстового файла.

Для начала было бы совсем не плохо создать текстовый файл. Назовём его file.txt, который будет состоять из строк, которые мы будем удалять:

строка один
строка два
строка три
строка четыре
строка пять

Затем создаём что-нибудь типа file.php, занимающий около 11 строк!

<?
if ($id != "") {
	$id--;
	$file=file("file.txt"); 

	for($i=0;$i<sizeof($file);$i++)
		if($i==$id) unset($file[$i]); 

	$fp=fopen("file.txt","w"); 
	fputs($fp,implode("",$file)); 
	fclose($fp);
	}
?>

Сначала определимся, что для удаления определенной строки нам нужен её номер. Его мы будем передавать с идентификатором id: file.php?id=2 (удалим строку под номером ТРИ, так как исчисления элементов в массиве ведётся с нуля, но позже мы это сгладим).

  • функция file() считывает весь файл в массив (каждая строка - это его элемент);
  • $id-вычитает один из нашего идентификатора, так что 2 становится 2, а 3 - 3;
  • unset($file[$i]) удаляет или обнуляет элемент массива (но только из памяти, т. е. виртуально:);
  • implode() объединяет массив в одну строку. Это очень важно, так как если бы это опустили, наш файл бы похудел до бесполезной записи Array;

Оглавление

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
+2 / -0
Мне нравитсяМне не нравится
1 июня 2006, 10:43:31
Да! Это круто! А прикиньте, что будет если Ваш текстовый файл будет иметь размер не пять строчек, а.. ну скажем 999999 :)
Не слабый напряг на сервак... Может есть смысл создавать какой-нить темп-файлик, в который построчно копировать исходный файл исключая нужную (точнее ненужную :) строку?
2.
Аноним
Мне нравитсяМне не нравится
9 февраля 2006, 18:22:58
Просто объясню принцип. Я это уже сто раз делал. Значит считываем из файла каждый раз по строке и записываем в массив только если она не равна нащей строке. потом массив записываем в файл. Уаля!
3.
Аноним
Мне нравитсяМне не нравится
1 февраля 2006, 12:25:35
А так нельзя?
Код:
if ($id != "") {

    $id--;

    $file=file("file.txt");



    unset($file[$id]);



    $fp=fopen("file.txt","w");

    fputs($fp,implode("",$file));

    fclose($fp);

}
4.
Аноним
Мне нравитсяМне не нравится
10 июня 2005, 14:34:36
А можно и так! ))
Код:
function kill_line_from_file($inf, $line)

{

 $fcont = file ($inf);

 array_push ($fcont, "###");

 $fp = fopen($inf, 'w');

 $i = 0;

 while ($fcont[$i] != "###")

  {

   if ($line-1 != $i) fputs($fp, $fcont[$i]);

   $i++;

  }

 fclose($fp);

}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог