2013-04-03 29 views
0

我在查詢數據庫,然後用file_put_contents()將返回的數據存儲到XML文件中。我想知道哪種方式調用這個函數更好。請注意,$ data是大數組,在這種情況下變量$ rss可以包含一個大字符串。優化PHP使用file_put_contents函數的功能

起初,我實現了這樣的事情:

foreach($data as $item) 
{ 
    $rss .= '<title>'.getTitle($item['id']).'</title>'; 
    $rss .= '<data>'.getData($item['id']).'</data>.'; 
    file_put_contents($this->fileRss, $rss); 
    unset($rss); 
} 

然後我上面改爲:

foreach($data as $item) 
{ 
    $rss .= '<title>'.getTitle($item['id']).'</title>'; 
    $rss .= '<data>'.getData($item['id']).'</data>.'; 
} 

file_put_contents($this->fileRss, $rss); 

哪種方式更好?製作一個大的,大的變量$ rss,然後保存它或每次保存一個很小的變量?我不確定,但我認爲IO操作比內存操作慢,所以第一種方式更好。唯一的問題可能是內存限制。

+1

你試過了嗎?這可能會給你一些指示。 –

+0

我該怎麼做?我已經測試過使用...手錶。兩者都在我認爲的同一時間執行。 –

+0

你的意思是每次使用'。='嗎?或者你想在每次循環迭代中重新初始化'$ rss'? –

回答

4

第一個示例不正確,除非將FILE_APPEND添加到file_put_contents。

file_put_contents($this->fileRss, $rss, FILE_APPEND); 

循環之前,我寧願手動打開文件,寫入循環內RSS的每個數據塊,並在循環之後關閉文件。

$file = fopen($this->fileRss, 'w'); 
foreach($data as $item) 
{ 
    $rss = ''; 
    $rss .= '<title>'.getTitle($item['id']).'</title>'; 
    $rss .= '<data>'.getData($item['id']).'</data>.'; 
    fwrite($file, $rss); 
} 
fclose($file); 

這樣,你不存儲在內存中的所有的RSS條目,而你避免打開和關閉文件中的每個迭代。 我也用$rss = '';替換了unset以避免循環內的垃圾收集。

+0

與您的解決方案相比,file_fut_contents速度非常慢,因此值得更換(如果有很多函數調用)。 – 2013-08-05 07:17:44