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

Я ищу, чтобы открыть файл, захватить последнюю строку в файле, где строка = "?>", Которая является закрывающим тегом для php-документа. Чем я хочу добавить данные в него и добавить обратно в «?>» До последней строки.

Я пробовал несколько подходов, но мне не повезло.

Вот что я получил до сих пор, так как читаю из zip-файла. Хотя я знаю, что все это неправильно, просто нужна помощь с этим, пожалуйста …

// Open for reading is all we can do with zips and is all we need. if (zip_entry_open($zipOpen, $zipFile, "r")) { $fstream = zip_entry_read($zipFile, zip_entry_filesize($zipFile)); // Strip out any php tags from here. A Bit weak, but we can improve this later. $fstream = str_replace(array('?>', '<?php', '<?'), '', $fstream) . '?>'; $fp = fopen($curr_lang_file, 'r+'); while (!feof($fp)) { $output = fgets($fp, 16384); if (trim($output) == '?>') break; } fclose($fp); file_put_contents($curr_lang_file, $fstream, FILE_APPEND); } 

$curr_lang_file – это строка пути к файлу, в которой должен быть присоединен файл fstream, но после удаления последней строки, равной '?>'

Хорошо, я сделал несколько изменений, и, похоже, он работает, НО он теперь копирует данные там дважды … arggg, поэтому каждая строка в файле теперь находится там 2 раза 🙁

Хорошо, удалил fwrite, хотя теперь он добавляет его внизу, чуть ниже?>

OMG, мне просто нужно все до последней строки, разве нет способа сделать это ??? Мне не нужно "?>"

Related of "Как открыть файл и удалить последнюю строку?"

Простой способ с файлом в файловой системе:

 <?php $path = "file.txt"; $content = file($path); // Parse file into an array by newline $data = array_pop($content); if (trim($data) == '?>') { $content[] = 'echo "... again";'; $content[] = "\n$data"; file_put_contents($path, implode($content)); } 

Что делает ..

 $ cat file.txt <?php echo 'Hello world'; ?> $ php test.php $ cat file.txt <?php echo 'Hello world'; echo "... again"; ?> 

Он копирует каждую строку дважды из-за вашей строки, которая гласит:

  @fwrite($fp, $output); 

Вы просто читаете файл, чтобы найти конечный тег, нет необходимости писать строку, которую вы читали, когда читаете.

Я бы добавил новый <? YOUR CODE ?> <? YOUR CODE ?> После последней строки …

Или, если у вас есть новый PHP-код для добавления в $code это можно сделать с помощью регулярного выражения

$output = preg_replace('\?>','?>'.$code,$output)