1

現在、関数fwrite();を使用しています。PHPで。しかし、私は特定のルールの後に私の新しいものを見つけたいと思っています。

これが出力になります。

<?xml version="1.0" encoding="utf-8" ?> 
<logs>
    <log type="text">the new log</log>
    <log type="text>the old log</log>
    <log type="login">some other log.</log>
</logs>

最後ではなく、新しいログで新しいログを取得するにはどうすればよいですか。file_get_contentsとstr_replaceのようなものしか見つかりません。しかし、それは本当に効率的ではないようです。

私のphpコード:

$file = $this->path.'logs.xml';
    // Open our file. And Create file if it doesn't exsist
    $fopen = fopen($file, "w+");

    // Looks if file is empty.
    if(filesize($file) == 0) {

        /*
         * Put your data in XML data.
         */
        $xmlData = "<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r\n";
        $xmlData .= "<logs> \r\n";
            $xmlData .= "\t<log type=\"".$data[0]."\">\r\n";
                $xmlData .= "\t\t<author>".$data[1]."</author>\r\n";
                $xmlData .= "\t\t<action>".$data[2]."</action>\r\n";
                $xmlData .= "\t\t<result>".$data[3]."</result>\r\n";
                $xmlData .= "\t\t<note>".$data[4]."</note>\r\n";
            $xmlData .- "\t</log>\r\n";
        $xmlData .= "</logs>";

    } else {



    }

    if(is_writeable($file)) {

        fwrite($fopen, $xmlData);
        return true;

    }
    return false;
    fclose($fopen);

心より感謝申し上げます。

4

2 に答える 2

2

この方法を使用できますarray_splice。このようにして、配列の任意の位置に新しい要素を挿入できます。

$file = $this->path.'logs.xml';

$content = file($file); //is array with all lines as elements.

/*
0: <?xml version="1.0" encoding="utf-8" ?> 
1: <logs>
2:    <log type="text>the old log</log>
3:    <log type="login">some other log.</log>
4: </logs>
*/

//insert the new line at position 2
array_splice( $content, 2, 0, '    <log type="text">the new log</log>' );

/*
0: <?xml version="1.0" encoding="utf-8" ?> 
1: <logs>
2:    <log type="text">the new log</log>
3:    <log type="text>the old log</log>
4:    <log type="login">some other log.</log>
5: </logs>
*/

$fopen = fopen($file, "w+");
fwrite($fopen, implode("\n", $content);
fclose($fopen);
于 2013-01-23T08:41:58.087 に答える
2

幸運なことに、データはXMLになっています。PHPには、XMLデータを処理する使いやすいライブラリ(拡張機能)がたくさんあります。たとえば、SimpleXMLまたはより高性能なDOM(両方の拡張機能がデフォルトで有効になっています)。

<?php
    $filename = $this->path.'logs.xml';

    if (!file_exists($filename)) {
       // Here's your code from above, although it would be easier to use
       // the libraries here, as well
    } else {
       $logs = simplexml_load_file($filename);
       // See if there's a "text" log element
       $txtlog = $logs->xpath('./log[@type = "text"]');
       ...
    }
于 2013-01-23T08:40:22.473 に答える