1

我正在寻找打开一个文件,抓住文件中的最后一行,其中 line = "?>",这是一个 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,我只需要最后一行的所有内容,难道没有办法做到这一点吗???我不需要“?>”

4

3 回答 3

2

文件系统上文件的简单方法:

<?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";
?>
于 2010-04-26T08:08:00.620 回答
0

它复制每行两次,因为您的行说:

 @fwrite($fp, $output);

您只是在阅读文件以查找结束标记,无需在阅读时写下您已阅读的行。

于 2010-04-26T05:39:22.800 回答
0

我会<? YOUR CODE ?>在最后一行之后添加一个新...

或者,如果您要添加新的 PHP 代码,$code可以使用正则表达式来完成

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

于 2010-04-26T05:46:50.943 回答