Я надеюсь открывать файл, захватывать последнюю строку в файле где строка ="?>", который является закрывающим тэгом для 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
строка filepath в фактический файл, которому нужно было добавить fstream к ней, но после того, как мы удаляем последнюю строку, которая равняется'?>'
Хорошо, я на самом деле внес несколько изменений, и это, кажется, работает, НО это теперь копирует данные там дважды... arggg, таким образом, каждая строка в файле теперь там 2 раза :(
Хорошо, удаленный fwrite, хотя теперь это добавляет его внизу, чуть ниже?>
OMG, мне просто нужно все до последней строки, нет ли способ сделать это??? Мне не нужно"?>"
Он копирует каждую строку дважды, потому что ваша строка говорит:
@fwrite($fp, $output);
Вы просто читаете файл, чтобы найти конечный тег, нет необходимости напишите строку, которую вы читали, когда читаете.
Я бы добавил новый ВАШ КОД?>
после последней строки ...
Или, если у вас есть новый PHP-код, который нужно добавить в $ code
, это можно сделать с помощью регулярного выражения
$ output = preg_replace ('\?>', '?>'. $ code, $ output)
Простой способ работы с файлом в файловой системе:
<?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";
?>