Intereting Posts
PHP $ _FILES не работает должным образом Анонимные функции в ловушках WordPress Невозможно расшифровать зашифрованный AES-код php-кода в blackberry Замена PHP, но альтернативная замена строки Slim PHP: только улавливать допустимые маршруты с помощью промежуточного программного обеспечения Невозможно подключиться к MySQL через PHP-скрипт при использовании mysqli или PDO, но mysql работает Как улучшить мой редактор изображений php для поддержки альфа-PNG и прозрачных GIF-файлов Использование MySQL, как мне выбрать ранг результата запроса для одной конкретной строки? Оптимизация запросов для следующего и предыдущего элементов Проблема с: Неустранимая ошибка: оператор не поддерживается для строк в PHP 5.5 password_ * функции повторного хеширования Создание глобального var изнутри функции в PHP Как заменить устаревшее значение set_magic_quotes_runtime в php? Удаление файлов при загрузке зависимости с помощью композитора Slack PHP API – избежать ошибки тайм-аута

удалить все строки, кроме первых 20, используя php

как удалить каждую строку, кроме первых 20, используя php из текстового файла?

Для эффективного решения памяти вы можете использовать

$file = new SplFileObject('/path/to/file.txt', 'a+'); $file->seek(19); // zero-based, hence 19 is line 20 $file->ftruncate($file->ftell()); 

Если загрузка всего файла в памяти возможна, вы можете сделать:

 // read the file in an array. $file = file($filename); // slice first 20 elements. $file = array_slice($file,0,20); // write back to file after joining. file_put_contents($filename,implode("",$file)); 

Лучшим решением было бы использовать функцию ftruncate, которая берет дескриптор файла и новый размер файла в байтах следующим образом:

 // open the file in read-write mode. $handle = fopen($filename, 'r+'); if(!$handle) { // die here. } // new length of the file. $length = 0; // line count. $count = 0; // read line by line. while (($buffer = fgets($handle)) !== false) { // increment line count. ++$count; // if count exceeds limit..break. if($count > 20) { break; } // add the current line length to final length. $length += strlen($buffer); } // truncate the file to new file length. ftruncate($handle, $length); // close the file. fclose($handle); 

Извиняюсь, неправильно прочитал вопрос …

 $filename = "blah.txt"; $lines = file($filename); $data = ""; for ($i = 0; $i < 20; $i++) { $data .= $lines[$i] . PHP_EOL; } file_put_contents($filename, $data); 

Что-то вроде:

 $lines_array = file("yourFile.txt"); $new_output = ""; for ($i=0; $i<20; $i++){ $new_output .= $lines_array[$i]; } file_put_contents("yourFile.txt", $new_output); 

Это также должно работать без огромного использования памяти

 $result = ''; $file = fopen('/path/to/file.txt', 'r'); for ($i = 0; $i < 20; $i++) { $result .= fgets($file); } fclose($file); file_put_contents('/path/to/file.txt', $result);