Как удалить пустые строки в файле на PHP?

Пользователь

от gage , в категории: PHP , 3 года назад

Как удалить пустые строки в файле на PHP?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dmitrypro77 , 3 года назад

@gage На самом деле, чтобы удалить пустые строки в файле на PHP у Вас есть несколько опций:

  • Если заданный файл имеет небольшой размер то вероятно можно использовать file() функцию с параметрами FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES которая удалит пустые файлы и затем просто перезаписать файл.


1
2
3
4
5
6
7
8
<?php

$path = 'test.txt';

$content = implode(PHP_EOL, file($path, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES));

// Перезаписать файл с удаленными пустыми строками
file_put_contents($path, $content);


  • Если заданный файл большого размера, то конечно читая весь файл в память Вы можете столкнуться с memory_limit (ограничением памяти) проблемой и вероятно нужно читать файл построчно и проверять если строка не пустая, то записывать во временный файл и затем просто удалить исходный файл и переменовать временный файл, пример такого кода:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

$path = 'test.txt';

// Создать временный файл
$temp = tempnam('./', 'tmp');
// Открываем файл в режиме чтения
$resource = fopen($path, "r");
if ($resource) {
    // Читаем файл
    while (!feof($resource)) {
        $buffer = fgets($resource, 4096);
        // Проверяем что строка не пустая
        if (!empty(trim($buffer))) {
            file_put_contents($temp, $buffer, FILE_APPEND);
        }
    }
    fclose($resource);
    // Удаляем исходный файл
    unlink($path);
    // Переиминовываем временный файл
    rename($temp, $path);
}


Всегда открыт для интересных проектов. Ссылки на мои соц. сети в профиле.

Пользователь

от judd , 2 года назад

@gage 

Чтобы удалить пустые строки в файле на PHP, вы можете использовать функцию file() для чтения файла в массив, использовать функцию array_filter() для удаления пустых строк из массива, а затем использовать функцию file_put_contents() для записи обновленного массива в файл. Пример кода:

1
2
3
4
5
$file = "example.txt";
$lines = file($file, FILE_IGNORE_NEW_LINES);
$lines = array_filter($lines, function($value) { return $value !== ''; });
file_put_contents($file, implode("
", $lines));


Где $file это путь к файлу.