附加模式下fopen的PHP内存使用情况

时间:2011-06-30 23:27:41

标签: php cakephp memory-management fopen

我有一个自定义的CakePHP购物车应用程序,我正在尝试创建一个CSV文件,其中包含每个事务的一行数据。当PHP通过编译MySql数据库中的相关数据一次创建CSV文件时,我遇到了内存问题。目前,CSV文件包含大约200行数据。

或者,我考虑通过在每次进行交易时向文件追加一行数据来逐步创建CSV:fopen($ mFile.csv,'a');

我的开发人员说,当CSV文件过大时,我仍会遇到这种方法的内存问题,因为PHP会将整个文件读入内存。是这样的吗?当使用append模式时,PHP会尝试将整个文件读入内存吗?如果是这样,你能推荐一种更好的方法吗?

提前致谢, 本

2 个答案:

答案 0 :(得分:2)

我运行了以下脚本几分钟,并生成了一个1.4gb的文件,远远超过了我的php内存限制。我也没有问题地从文件中读取。如果遇到内存问题,可能还有其他因素导致问题。

$fp = fopen("big_file.csv","a");

for($i = 0; $i < 100000000; $i++)
{
    fputcsv($fp , array("val1","val2","val3","val4","val5","val6","val7","val8","val9"));
}

答案 1 :(得分:0)

你不能像这样从db导出:

SELECT list_fields INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;