这个PHP代码有什么问题吗?

时间:2010-03-20 18:00:23

标签: php xml

第一,我不得不说我对php一无所知。我实际上正在做我的AS3留言簿,通过Activetut的部分教程,我成功地制作了一本flash客座书。所以我现在面临的问题是,客户端只能注入1个XML数据,而且它总是会清除旧的1,而闪存仍在缓存旧的XML文件。

我发现了一些其他的教程(我认为它很难,因为我不知道任何关于PHP的东西)并且与我正在使用的php代码相比,它似乎非常短。我不知道代码是做什么的,所以目前我不确定问题是来自php还是我的AS3。

 <?php
        if (isset($GLOBALS["HTTP_RAW_POST_DATA"])){
            $xml = $GLOBALS["HTTP_RAW_POST_DATA"];
            $file = fopen("wish.xml","wb");
            fwrite($file, $xml);
            fclose($file);
        }
    ?>

及以下是我正确的XML格式:

<WISHES>
    <WISH>
        <NAME>Test</NAME>
        <EMAIL>test@tes.com</EMAIL>
        <DATENTIME>2/3/10</DATENTIME>
        <MESSAGE>Dummy Message</MESSAGE>
    </WISH>
<WISH>
        <NAME>Test</NAME>
        <EMAIL>test@tes.com</EMAIL>
        <DATENTIME>2/3/10</DATENTIME>
        <MESSAGE>Dummy Message</MESSAGE>
    </WISH>
</WISHES>

所以任何人都可以解释这个PHP代码的作用?因为它用以下代码替换我的XML:

<WISH>
        <NAME>Test</NAME>
        <EMAIL>test@tes.com</EMAIL>
        <DATENTIME>2/3/10</DATENTIME>
        <MESSAGE>Dummy Message</MESSAGE>
    </WISH>

3 个答案:

答案 0 :(得分:2)

代码获取$ GLOBALS [“HTTP_RAW_POST_DATA”]的值并将其写入wish.xml,删除以前的文件内容。

答案 1 :(得分:0)

在fopen中尝试“ab”而不是“wb”。

wb:开放写作。 'b'表示二进制数据。

ab:打开追加。 'b'表示二进制数据。

答案 2 :(得分:0)

正如Michael和Nifle所说,代码在存储新条目时会删除xml文件中的当前条目。为了克服这个问题并按照你的预期做,用这种方式修改代码:

<?php
    if (isset($GLOBALS["HTTP_RAW_POST_DATA"])){
        $xml = $GLOBALS["HTTP_RAW_POST_DATA"];

        // read in the old ontent of the file
        $oldXML = join('', file('wish.xml'));

        // replace the old file ending with the new entry and a new file ending
        $newXML = str_replace('</WISHES>', $xml."\n</WISHES>");

        // finally store the new data to the file
        $file = fopen("wish.xml","w");
        fwrite($file, $newXML);
        fclose($file);
    }
?>