Написал функцию, пытаюсь передать номер строки которую нужно удалить. По итогу ничего не получается и строка не удаляется. Справа стоят 777.
function DeleteLine($line) {
$fopen=file($this->files);
unset($fopen[$line]);
$f=fopen($this->files, "w+");
foreach($fopen as $string) {
fwrite($f, $string);
}
fclose($f);
return true;
}
$strNum = 1;
$result = "";
$delLine = 2;
$fp = fopen("test.txt", "r");
while (!feof($fp)) {
$line = fgets($fp);
if ($strNum != $delLine) $result .= $line;
$strNum++;
}
fclose($fp);
$fw = fopen("test.txt", "w");
fwrite($fw, $result);
fclose($fw);
Еще вариант:
$file = preg_split("/\n/", file_get_contents("test.txt"));
unset($file[2]);
$fw = fopen("test.txt", "w");
foreach ($file as $str){
fwrite($fw, $str."\n");
}
fclose($fw);
Не большое замечание: так как в результате чтения файла, функция file() возвращает массив, элементы которого начинаются с нуля, то при попытке удаления первой строки DeleteLine(1) будет удалена вторая строка. В остальном же, код должен работать (у меня на локалке он работает) Посмотрите, что приходит в свойство $this->files - скорее всего только в этом и есть проблема.
Следующее, что не мешало бы подкорректировать, так это результат, возвращаемый функцией (у вас результат всегда true, даже если ничего не было удалено). Ну и конечно, не помешает проверка на существование удаляемого элемента. С учётом этих замечаний код будет иметь такой вид:
var_dump(DeleteLine(2));
// Функция возвращает строку, которая была удалена, или false
function DeleteLine($line) {
$delete_string = false;
$lines = file($this->files, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (isset($lines[--$line])) {
$delete_string = $lines[$line];
unset($lines[$line]);
$f = fopen($this->files, 'w+');
foreach ($lines as $string) {
fwrite($f, $string);
}
fclose($f);
}
return $delete_string;
}
Ваша функция рабочая, но я бы добавил проверку на существование файла:
function DeleteLine($line){
if (file_exists($this->files)){
$fopen = file($this->files);
unset($fopen[$line]);
$f = fopen($this->files, "w+");
foreach($fopen as $string) {
fwrite($f, $string);
}
fclose($f);
return true;
} else {
return false;
}
}
Далее смотрите, что возвращается true или false. Если false, значит проблема с $this->files
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Изучаю LaravelХочется понять структуру валидации данных
Есть РНР-файл с классом и функцией внутри класса, который подключается к файлу с главным классом: