作者Joe8 (Beautiful Stranger)
看板PHP
標題Re: [請益] out of memory
時間Thu Oct 15 21:56:25 2009
抱歉更正一下, 我把寫入大文件的語法給註解掉之後
還是會發生 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: 123.192.35.49
推 bobju:我倒對於$input_string的內容感到很好奇.該不會是因為這原因 10/15 22:15
→ bobju:?例如不小心用上這種寫法: $input_string.=$line; 結果 10/15 22:15
→ bobju:$input_string愈滾愈大? 10/15 22:15
→ Joe8:喔沒有,那個字串每跑一次都是新的, 沒有累加!! 10/15 22:27
推 shadowjohn:small_{$n} ? small_{n} ? 10/16 09:07
→ Joe8:喔喔 那是我筆誤 那是個變數沒錯 10/16 11:30
推 mosquito520:你有從phpinfo確認你有修改記憶體限制了嗎?? 10/16 13:59
→ mosquito520:appserv的php.ini我忘記是在%appserv$\php? 10/16 14:00
→ mosquito520:還是在%win%\php.ini? 10/16 14:00
→ Joe8:我有改過了 我從phpinfo看已經是 128M 10/16 14:08