作者bobju (寶貝豬)
看板PHP
標題Re: [請益] out of memory
時間Thu Oct 15 22:51:40 2009
我剛用10000次幫你測試, ok的呀.
應該不是開檔關檔次數的問題.
<?php
for($i=0;$i<10000;$i++){
$input_string="hello\n";
//省略小文件的處理過程
$fp_Small = fopen("small_$i.txt", "w");
fputs($fp_Small , $input_string); //將字串寫入檔案 ,各自的小檔案
fclose($fp_Small);
}
?>
※ 引述《Joe8 (Beautiful Stranger)》之銘言:
: 抱歉更正一下, 我把寫入大文件的語法給註解掉之後
: 還是會發生 out of memory錯誤 所以似乎不是組成大文件那邊的問題
: 我在想會不會是for loop裡面的開檔寫檔讀檔太多次 (共3800個小檔案)
: 造成記憶體負擔@@?
: ※ 引述《Joe8 (Beautiful Stranger)》之銘言:
: : 想請教一下我在執行程式的時候發生out of memory,
: : 我大概描述一下我的作法, 麻煩各位幫我建議ㄧ下 ^^"
: : 目的: 1. 將n個小文件個別做處理 (產出n個small.txt)
: : 2. 將1的處理結果集合成一份大文件 (只有1個 Big.txt)
: : 程式:
: : $fp_Big = fopen ("BigArticle.txt", "a+");
: : for loop n次{
: : //省略小文件的處理過程
: : $fp_Small = fopen ("small_{n}.txt", "w");
: : fputs($fp_Small , $input_string); //將字串寫入檔案 ,各自的小檔案
: : fclose($fp_Small);
: : fputs($fp_Big , $input_string); //將字串寫入檔案, 集合的大文件
: : }
: : fclose($fp_Big);
: : 結果: 這樣的程式是可行的,至少在讀入的檔案數量不會太多的時候是ok
: : 但如果太多就會發生以下錯誤訊息
: : Fatal error: Out of memory (allocated 30408704)
: : (tried to allocate 9252474 bytes ) in C:\AppServ\php5\extract.php
: : on line 82
: : 發生錯誤的那行是執行fputs($fp_Big , $input_string);
: : 請問我該怎麼解決呢,我改過php.ini裡面的memory size也沒用... Orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.115.151.184
推 Joe8:咦...會不會是系統不同 你家記憶體比較大嗎xd 10/16 09:05
推 arrack:你有檢查過所有的檔案,確定都是小文件嗎? 10/16 09:07
→ bobju:嘿!我的記憶體說出來可別嚇著了: 768MB 10/16 09:48
→ bobju:cpu: 1.06MHZ, 系統: win2000 10/16 09:49
推 Joe8:有阿 都是小文件... bobju的系統真強大Orz 10/16 11:29
→ bobju:10年前稱強大或許還可以,現在的話嘛...:P 10/16 18:29
→ bobju:你這問題還無解的話恐怕得追原始碼,一個個try才知道原因了. 10/16 18:31