Я могу напрямую загрузить дамп базы данных, используя:
$filename = $database . '-' . date("d-m-Y_(G_i_s)") . ".sql.gz";
$mime = "application/x-gzip";
header("Content-Type: " . $mime);
header('Content-Disposition: attachment; filename="' . $filename . '"');
$cmd = "mysqldump --opt -h $host -u $username -p$password $database";
passthru($cmd);
exit(0);
Могу ли я сделать это с помощью файла .tar из каталога? Просто сгенерировать файл и скачать его, не сохраняя на сервере?
Я могу выполнить это (и файл правильный):
exec('tar -czf /path/download/backup.tar.gz /path/download/');
Но я не хочу хранить файл резервной копии на сервере... Я хочу загрузить его напрямую. Я попытался сделать что-то вроде моего примера с дампом базы данных... но безуспешно.
Любые идеи, как это сделать?
РЕДАКТИРОВАТЬ:
Спасибо за помощь. Удаление -f было хорошей идеей.
Теперь это работает:
$filename = 'download-' . date("d-m-Y_(G_i_s)") . ".tar.gz";
$mime = "application/x-tgz";
header("Content-Type: " . $mime);
header('Content-Disposition: attachment; filename="' . $filename . '"');
$cmd = "tar -cz " . $_SERVER['DOCUMENT_ROOT'] . "/download/";
passthru($cmd);
exit(0);
-f
, тогдаtar
отправляет его прямо на стандартный вывод, что подходит дляpassthru()
. - person mario   schedule 19.11.2013$cmd = "tar -cz -C " . $_SERVER['DOCUMENT_ROOT'] . " download";
опция-C
эквивалентна предварительному переходу в указанный каталог. - person Sammitch   schedule 19.11.2013