-1

我的问题是我不知道如何使用fwrite. 我使用 simplexml 解析 xml,然后,虽然echo工作正常,但我无法在文件中写入相同的结果。在下面的示例中,我从 xml 提要中回显 5 个项目,但是当我将其写入文件时,它只写入第 5 个项目。谁能告诉我有什么问题?

$file = simplexml_load_file($url); {
$c = 0;
foreach($file->channel->item as $post) {
if($c == 5){
break;
}

$headline = (string) $post->title;

echo $headline;

$fp=fopen('myfile.htm', "w+");  
fwrite($fp, $headline."<br />");
fclose($fp);
        $c++;
        }
}

编辑:第二次尝试。我使用了一个while循环,而不是if,但我只设法写了第 5项的5次。我需要(而不是)每次更新文件时都覆盖文件,而不是每次都添加内容:w+a+

$file = simplexml_load_file($url); {

foreach($file->channel->item as $post) {

$fp=fopen('myfile.htm', "w+");
$c = 1;
while ($c <= 5){
    $headline = (string) $post->title;
    fwrite($fp, "$headline<br />");
    $c++;
}
fclose($fp);
}
include 'myfile.htm';
}
4

3 回答 3

0

您需要打开文件进行附加:

改变:

$fp=fopen('myfile.htm', "w+");  

至:

$fp=fopen('myfile.htm', "a");  

而且,为了提高效率,您应该在开始循环之前打开文件并在循环后关闭它。

fopen 中的“w+”打开文件“进行读写;将文件指针放在文件的开头并将文件截断为零长度。如果文件不存在,请尝试创建它。”

每当您使用 w+ 命令打开文件时,它将从文件开头开始写入并删除文件中已有的所有数据。如果您仍然想使用“w+”,您应该将 fopen 命令放在循环之前(以及循环之后的 fclose)以按照您想要的方式编写。

见:http ://www.php.net/manual/en/function.fopen.php

于 2013-02-09T00:16:39.550 回答
0

您可以在循环外打开文件,或者如果必须在循环内打开文件,请使用a模式打开。

$fp = fopen('myfile.htm', 'w+');
foreach(...) {
    //write here
}  
fclose($fp);

或者

foreach(...) {
    $fp = fopen('myfile.htm', 'a');
    //write here
    fclose($fp);
}

w+模式所做的是以写入模式打开文件,并指向文件的开头,这导致只有最后一次迭代被写入文件。所有以前的迭代都被覆盖。

于 2013-02-09T00:16:53.067 回答
0

而不是以“w+”模式打开文件,您需要使用“a”模式,并且您应该在循环之前打开文件,因为它与您每次打开的文件相同,并在循环之后关闭文件。

$fp=fopen('myfile.htm', "a+");  

//the loop starts here

//your code

// the loop ends here.

fclose($fp);
于 2013-02-09T00:17:11.287 回答