Удаление строки из файла с помощью php

Введение

Удаление строки из файла с помощью phpВ этой статье я хочу показать, как можно с помощью php написать удаление строки из файла по ее номеру. Поскольку задача сама по себе не сложная, на ее примере я хочу еще показать, как в php можно выводить ошибки в пользовательских функциях.
Для вывода ошибок удобно использовать функцию trigger_error, она служит для вызова пользовательских ошибок, предупреждений или уведомлений.

Функция реализующая удаление строки из файла

Ниже приведу код функции, которая удаляет строку из файла по номеру. Код подробно прокомментирован:

/**
* Функция для удаления строки из файла
*
* @param string $fileName - расположение файла
* @param string $num - номер строки, которую нужно удалить
*/
function delStringByNum($fileName, $num){
	// Открываем файл
	$file = @file($fileName);
	// если файл не найден, выводим ошибку
	if(!$file){
		trigger_error("File '$fileName' not found!");
		return false;
	}
	// если номер строки не корректный, сообщим об этом
	if(!isset($file[$num-1])){
		trigger_error("Incorrect number string: ($num)");
		return false;
	}
	// удаляем строку
	$num = intval($num)-1;
	unset($file[$num]);
	// открываем файл для записи
	$fileOpen = @fopen($fileName,"w"); 
	// если файл невозможно редактировать, сообщаем об этом
	if(!$file){
		trigger_error("File '$fileName' is not writable!");
		return false;
	}
	// перезаписываем файл
	fputs($fileOpen,implode("",$file)); 
	fclose($fileOpen);
	return true;
}

И приведу пример использования нашей функции:

// пример использования функции
$result = delStringByNum('/files/test.txt', 3);
var_dump($result);
Рассказать друзьям:


Удаление строки из файла с помощью php: 3 комментария

  1. Все ни чего, но есть одно но. Если в файле пару тысяч или десятков тысяч строк, у вас просто не хватит ресурсов. Правильней считывать файл построчно и записывать во «временный» файл при этом пропустить определенную строку. В конце операции переименовать «временный файл».

    1. И да и нет. В вашем случае необходимо будет занимать место на диске равное почти объёму. Тут всё зависит от хостинга и ваших ресурсов.
      + когда речь идёт о удалении строки из файла в 10 000 строк задача будет решаться возможно совсем по-другому.

  2. В коде ошибка. При открытии файла на запись сообщение об ошибке выводится при проверке переменной файла, который читали.
    Код:

    // открываем файл для записи
    $fileOpen = @fopen($fileName,"w");
    // если файл невозможно редактировать, сообщаем об этом
    if(!$file){
    trigger_error("File '$fileName' is not writable!");
    return false;
    }

    следует заменить на:

    // открываем файл для записи
    $fileOpen = @fopen($fileName,"w");
    // если файл невозможно редактировать, сообщаем об этом
    if(!$fileOpen){
    trigger_error("File '$fileName' is not writable!");
    return false;
    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*