以下の関数を使用して、テーブルから行を取得し、エンコードしてから、csv形式で配置しています。高いメモリ使用量を防ぐためのより簡単な方法があるかどうか疑問に思っています。ini_setに依存する必要はありません。メモリの消費は、一時ファイルを読み取ってそれを圧縮することによって引き起こされると思います。64MBのRAMを使用できるようにしたいと思います。何か案は?ありがとう!
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);
}
}