mysql — переменная PHP в .sql, заархивируйте ее и затем загрузите

Я генерирую скрипт 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');

Есть более 10000 строк. Я назначаю все это переменной с именем $ sql_dump

Затем я загружаю эту переменную, используя следующий скрипт …

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

Работает отлично. Тем не менее, файл слишком большой, он может достигать 20 МБ. Вместо того, чтобы загружать его как файл .sql. Я хочу заархивировать его и скачать. Я не хочу ничего хранить на сервере. Это должно генерироваться на лету. Точно так же, как мы выгружаем MySQL из phpmyadmin, когда мы выбираем загрузку в виде архива.

Пожалуйста, помогите спасибо

0

Решение

Вы можете использовать PHP Exec функция сжатия файла с помощью функции zip-сервера после создания файла sql. После этого вам нужно будет проверить, файл существует и скачать его.
Вам понадобится папка для хранения файлов и рутина для очистки вашего сервера, я имею в виду удаление всех сгенерированных zip-файлов.

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();
0

По вопросам рекламы [email protected]