Как открыть файл и удалить последнюю строку? - PullRequest
1 голос
/ 26 апреля 2010

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

Ответы [ 3 ]

2 голосов
/ 26 апреля 2010

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

<?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";
?>
0 голосов
/ 26 апреля 2010

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

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

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

0 голосов
/ 26 апреля 2010

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

 @fwrite($fp, $output);

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

...