-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++;
        }
}

編集: 2回目の試行。whileの代わりにループを使用しましたが、 5番目のアイテムを5ifしか書き込むことができませんでした。ファイルが更新されるたびに上書きし、毎回コンテンツを追加する必要はありません(ではありません)。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 に答える