как удалить каждую строку, кроме первых 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);