PHP变量为.sql,压缩然后下载

时间:2014-09-21 15:05:56

标签: php mysql download

我正在生成mySQL脚本。结果是这样的......

INSERT INTO `TABLE` (`v1`,`v2`) VALUES ('1', '2');
INSERT INTO `TABLE` (`v1`,`v2`) VALUES ('1', '2');
INSERT INTO `TABLE` (`v1`,`v2`) VALUES ('1', '2');
INSERT INTO `TABLE` (`v1`,`v2`) VALUES ('1', '2');
INSERT INTO `TABLE` (`v1`,`v2`) VALUES ('1', '2');

有超过10,000行。我将所有这些分配给一个名为$ sql_dump

的变量

然后我使用以下脚本下载此变量...

header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=backup_export.sql");
echo $sql_dump;

它工作得非常好。但是,文件太大,可能大到20mb。而不是将其下载为.sql文件。我想拉链并下载它。我不想在服务器上保留任何内容。它应该在运行中生成。就像我们从phpmyadmin转储mySQL一样,当我们选择下载为zipped时。

请帮助谢谢

2 个答案:

答案 0 :(得分:0)

生成sql文件后,您可以使用php exec函数压缩带有zip服务器功能的文件。之后,您需要检查是否file exist并下载它。 您需要有一个用于存储文件的文件夹和一个用于清理服务器的rutine,我的意思是删除所有zip生成的文件。

答案 1 :(得分:0)

您可以使用file_put_content将字符串的内容放入文件中,并创建一个zip文件。

$file = 'abc.sql';

file_put_contents($file, $sql_dump);
$z = new ZipArchive();
$z->open("sqldump.zip", ZIPARCHIVE::CREATE);

$current = file_get_contents($file);

$z->addFile($current);
$z->close();