1

ファイルを開いて、ファイルの最後の行を取得します。ここで、行= "?>"であり、これは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を追加する必要がある実際のファイルへのファイルパス文字列ですが、「?>」に等しい最後の行を削除した後です。

さて、私は実際にいくつかの変更を加えました、そしてそれはうまくいくようです、しかしそれは今そこにデータを2回コピーします... arggg、それでファイルの各行は今そこに2回あります:(

OK、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

次のような行があるため、各行を2回コピーしています。

 @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 に答える