Я ищу, чтобы открыть файл, захватить последнюю строку в файле, где строка = "?>", Которая является закрывающим тегом для 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, мне просто нужно все до последней строки, разве нет способа сделать это ??? Мне не нужно "?>"
Простой способ с файлом в файловой системе:
<?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)