2015-01-04 182 views
0

我有一个PHP循环,我读取和处理几个文件的内容。PHP fclose没有释放内存

<?php 
foreach($files as $file) 
{ 
    $f = fopen($file, 'r'); 
    $content = fread($f, filesize($file)); 
    import($content); 
    fclose($f); 
} 
?> 

但是,在多个循环迭代,我仍然在FREAD()线得到一个内存耗尽的错误 - 我的理解是,使用FCLOSE()将释放资源的内存,但这不是这种情况?

我已经阅读了关于此事的其他一些问题,并且他们都使用fclose()引用,我已经这样做了。我也抛出memory_get_usage()/ memory_get_peak_usage(),他们只是继续向上,直到它的错误。

我误解了fclose()如何处理释放内存?

+2

'import($ content)'做了什么?也许这就是吃掉记忆。 – Oswald 2015-01-04 13:22:05

+0

是的,'import()'不是内置的。该函数是否读取这些文件中的所有内容,然后在完成时不释放它? 'fclose()',因为你有它,将正常工作。 – 2015-01-04 13:27:01

+0

嗯,import()只是将数据插入到数据库中,但如果我不调用import(),它会到达foreach循环的末尾。但我不明白的是,内容是在foreach中用fread()读取的,并将它传递给import(),那么我将在哪里释放内存? – MattRogowski 2015-01-04 13:35:49

回答

1
<?php 
foreach($files as $file) 
{ 
    $f = fopen($file, 'r'); 
    $content = fread($f, filesize($file)); 
    import($content); 
    fclose($f); // this close file 
    unset($content); // this free memory allocated to content of file 
} 
?> 
+0

啊,当然。多么简单。谢谢! – MattRogowski 2015-01-04 17:20:08