使用下面的函数,我从表中提取行,对它们进行编码,然后将它们放入 csv 格式。我想知道是否有更简单的方法来防止高内存使用。我不想依赖 ini_set。我相信内存消耗是由于读取临时文件并将其压缩造成的。我希望能够使用 64mb 内存的限制。有任何想法吗?谢谢!
function exportcsv($tables) {
foreach ($tables as $k => $v) {
$fh = fopen("php://temp", 'w');
$sql = mysql_query("SELECT * FROM $v");
while ($row = mysql_fetch_row($sql)) {
$line = array();
foreach ($row as $key => $vv) {
$line[] = base64_encode($vv);
}
fputcsv($fh, $line, chr(9));
}
rewind($fh);
$data = stream_get_contents($fh);
$gzdata = gzencode($data, 6);
$fp = fopen('sql/'.$v.'.csv.gz', 'w');
fwrite($fp, $gzdata);
fclose($fp);
fclose($fh);
}
}