¿Cómo abrir un archivo y eliminar la última línea?

Estoy buscando abrir un archivo, tomar la última línea en el archivo donde la línea = “?>”, Que es la etiqueta de cierre para un documento de php. De lo que quiero es añadir datos y volver a agregarlos en “?>” Hasta la última línea.

He estado intentando algunos enfoques, pero no estoy teniendo suerte.

Esto es lo que obtuve hasta ahora, ya que estoy leyendo un archivo comprimido. Aunque sé que todo esto está mal, solo necesito ayuda con esto, por favor …

// 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', ''; $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 es una cadena de $curr_lang_file archivo para el archivo real que necesita tener el fstream añadido, pero después de eliminar la última línea que es igual a ‘?>’

Ok, en realidad hice algunos cambios, y parece funcionar, PERO ahora copia los datos allí dos veces … arggg, así que cada línea en el archivo ahora está ahí 2 veces 🙁

Ok, eliminé el fwrite, aunque ahora está anexándolo en la parte inferior, justo debajo del?>

Dios mío, solo necesito todo hasta la última línea, ¿no hay una manera de hacer esto? No necesito “?>”

Una forma simple con el archivo en el sistema de archivos:

 ') { $content[] = 'echo "... again";'; $content[] = "\n$data"; file_put_contents($path, implode($content)); } 

Lo cual hace ..

 $ cat file.txt  $ php test.php $ cat file.txt  

Está copiando cada línea dos veces debido a su línea que dice:

  @fwrite($fp, $output); 

Solo está leyendo el archivo para encontrar la etiqueta final, no es necesario que escriba la línea que ha leído mientras lee.

Agregaría un nuevo Después de la última línea …

O si tiene el nuevo código PHP para agregar $code esto podría hacerse con una expresión regular

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