File: downloaddump.php

Recommend this page to a friend!
  Classes of Alessandro Quintiliani  >  PHP Multi MySQLDump  >  downloaddump.php  >  Download  
File: downloaddump.php
Role: Example script
Content type: text/plain
Description: file to create dinamically zip, tgz archives to download all the sql dump tables database or one single sql dump table in both zip or gzip format
Class: PHP Multi MySQLDump
Dump MySQL database tables for file download
Author: By
Last change:
Date: 4 years ago
Size: 9,641 bytes
 

Contents

Class file image Download
<?php
/*
* ***************************************************************************************************
*
* File name: downloaddump.php
*
* Copyright 2017 Alessandro Quintiliani
*
* This file is part of MultiDump package.
*
* MultiDump is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MultiDump is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MultiDump package. If not, see <http://www.gnu.org/licenses/>.
*
* ***************************************************************************************************
*/
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT);

include_once (
"Class.MultiDump.php");

$log = new LogDeltaTime("log", "logpostvars.txt", 1);
$oddmp = new MultiDump ();

if(isset(
$_POST) && $_POST)
{

   
$typeCompression = $_POST[$oddmp->getPostVarCompressionType()];
   
$allTablesToArchive = unserialize(json_decode(urldecode($_POST[$oddmp->getPostVarAllTablesToArchive()])));
   
$dbnametoarchive = $_POST[$oddmp->getPostVarDbArchived()];

   
$log->wlog("compression type requested: $typeCompression");
   
$log->wlog("total number tables received via POST: " . count($allTablesToArchive));

    if(
$typeCompression && $allTablesToArchive && $dbnametoarchive)
    {
       
### download all database tables dumped

       
$log->wlog("download all database tables requested");

       
$log->wlog("database selected for compression: $dbnametoarchive");

       
$log->wlog("start list tables db $dbnametoarchive to archive:");
        foreach(
$allTablesToArchive as $tableToArchive)
        {
           
$log->wlog("table name candidated to archive: $tableToArchive");
        }
       
$log->wlog("end list tables db $dbnametoarchive to archive");

       
$typeDbToDump = $_POST[$oddmp->getPostVarTypeDb()];

       
$oddmp->setDumpParameters ();
       
$pobjref = $oddmp->getDumpParamsRef ();

       
$dirfiledumped = $pobjref->getParamValue('folder_dump_files');
       
$log->wlog("directory with all dump tables: $dirfiledumped");

       
//$parameter_format_dump_file = 'dump_'.$typeDbToDump.'_output_file_format';
       
$parameter_format_dump_file = $oddmp->getDumpOutputFileFormat();
       
$log->wlog("parameter_format_dump_file : $parameter_format_dump_file");
       
$list_files_db_tables = array_filter($allTablesToArchive,
            function(
$var) use ($dbnametoarchive)
            {
                return
preg_match("/\b^$dbnametoarchive\\.\b/i", $var);
            });

       
$archivedDbFileName = $dbnametoarchive . "_" . date('Ymd-His');

        if(
$typeCompression == "zip")
        {

           
$compressedDbFile = $archivedDbFileName . ".zip";
           
$log->wlog("start creation zip archive with name $compressedDbFile");
           
$zip = new ZipArchive();

           
$zip->open($dirfiledumped . DIRECTORY_SEPARATOR . $compressedDbFile, ZipArchive::CREATE);
           
$zip->addEmptyDir($archivedDbFileName);

           
set_time_limit($oddmp->getTimeoutLimit());

            foreach(
$list_files_db_tables as $file_table_dumped)
            {

                list(
$dbname,$tableNameDumped) = explode(".", $file_table_dumped, 2);

               
$list_replacements = array($dbname,$tableNameDumped);

               
$format_dump_file_to_add = $pobjref->parseParamPlaceHoldersString($parameter_format_dump_file,$list_replacements);
               
$iterator = new RecursiveDirectoryIterator($dirfiledumped);
               
$regexdumpfile = new RegexIterator($iterator, "/".$format_dump_file_to_add."/", RecursiveRegexIterator::GET_MATCH);
               
$list_dump_file_matched = iterator_to_array($regexdumpfile, false);
               
$dump_file_to_add = $list_dump_file_matched[0][0];

               
$full_path_file_to_add = $dirfiledumped . DIRECTORY_SEPARATOR . $dump_file_to_add;
               
$full_path_file_added_to_zip = $archivedDbFileName . DIRECTORY_SEPARATOR . $dump_file_to_add;

               
$log->wlog("file $full_path_file_to_add added to zip $compressedDbFile (added: $full_path_file_added_to_zip)");
               
$zip->addFile($full_path_file_to_add, $full_path_file_added_to_zip);

            }
           
$zip->close();
           
$log->wlog("end creation zip archive with final name $archivedDbFileName");

        }
        elseif(
$typeCompression == "tgz")
        {

           
$log->wlog("start creation tar archive with final name $archivedDbFileName.tar.gz");

           
$tarName = $archivedDbFileName . ".tar";

            try
            {
               
$pathToTarName = $dirfiledumped . DIRECTORY_SEPARATOR . $tarName;
               
$atgz = new PharData($pathToTarName);

               
$atgz->addEmptyDir($archivedDbFileName);
               
$log->wlog("added empty directory $archivedDbFileName to $tarName before compression");
                foreach(
$list_files_db_tables as $file_table_dumped)
                {

                    list(
$dbname,$tableNameDumped) = explode(".", $file_table_dumped, 2);

                   
$list_replacements = array($dbname,$tableNameDumped);

                   
$format_dump_file_to_add = $pobjref->parseParamPlaceHoldersString($parameter_format_dump_file,$list_replacements);
                   
$iterator = new RecursiveDirectoryIterator($dirfiledumped);
                   
$regexdumpfile = new RegexIterator($iterator, "/".$format_dump_file_to_add."/", RecursiveRegexIterator::GET_MATCH);
                   
$list_dump_file_matched = iterator_to_array($regexdumpfile, false);
                   
$dump_file_to_add = $list_dump_file_matched[0][0];

                   
$full_path_file_to_add = $dirfiledumped . DIRECTORY_SEPARATOR . $dump_file_to_add;
                   
$full_path_file_added_to_tgz = $archivedDbFileName . DIRECTORY_SEPARATOR . $dump_file_to_add;

                   
$log->wlog("file $full_path_file_to_add added to tgz $compressedDbFile (added: $full_path_file_added_to_tgz)");
                   
$atgz->addFile($full_path_file_to_add, $full_path_file_added_to_tgz);
                }

               
set_time_limit($oddmp->getTimeoutLimit());
               
$atgz->compress(Phar::GZ);
               
$log->wlog("archive file $tarName.tar compressed to $tarName.tar.gz");
            }
            catch(
Exception $e){
                echo
"Exception : " . $e;
            }
           
$log->wlog("end creation tar archive with final name $archivedDbFileName.tar.gz");
        }

       
ignore_user_abort(true);

       
# headers disabling cache browser
       
header("Expires: on, 01 Jan 1970 00:00:00 GMT");
       
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
       
header("Cache-Control: no-store, no-cache, must-revalidate");
       
header("Cache-Control: post-check=0, pre-check=0", false);
       
header("Pragma: no-cache");

       
# headers download file compressed
       
header('Content-Description: File Transfer');
       
//header('Content - Type: application / octet - stream');
       
header("Content-Transfer-Encoding: binary");

        if(
$typeCompression == "zip")
        {
           
header('Content-Type: application/zip');
           
$compressedDbFile = $archivedDbFileName . ".zip";
        }
        elseif(
$typeCompression == "tgz")
        {
           
header('Content-type: application');
           
$compressedDbFile = $archivedDbFileName . ".tar.gz";
        }

       
$full_path_to_compressed_file = $dirfiledumped . DIRECTORY_SEPARATOR . $compressedDbFile;
       
$log->wlog("downloading file $full_path_to_compressed_file");
       
header('Content-Disposition: attachment; filename="'.basename($compressedDbFile).'"');
       
header('Content-Length: ' . filesize($full_path_to_compressed_file));

       
readfile($full_path_to_compressed_file);

       
unlink($full_path_to_compressed_file);

        if(
$typeCompression == "tgz")
        {
           
unlink($pathToTarName);
        }

    }

}
elseif( isset(
$_GET) && $_GET )
{
   
### download single dump file

   
$filedumped = urldecode($_GET[$oddmp->getPostVarDumpFile()]);
   
$typeCompression = $_GET[$oddmp->getPostVarCompressionType()];

   
$log->wlog("compression type requested: $typeCompression");
   
$log->wlog("downloading file $filedumped with one table dumped");


    if(
file_exists($filedumped) && $typeCompression)
    {
       
$log->wlog("file $filedumped exists");

       
$dirfiledumped = pathinfo($filedumped, PATHINFO_DIRNAME);
       
$filename = pathinfo($filedumped, PATHINFO_BASENAME);
       
$extension_filename = pathinfo($filedumped, PATHINFO_EXTENSION);

       
# headers disabling cache browser
       
header("Expires: on, 01 Jan 1970 00:00:00 GMT");
       
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
       
header("Cache-Control: no-store, no-cache, must-revalidate");
       
header("Cache-Control: post-check=0, pre-check=0", false);
       
header("Pragma: no-cache");


       
$zip = new ZipArchive();
       
$tmp_file_dump = tempnam($dirfiledumped,'tmp_');
       
$zip->open($tmp_file_dump, ZipArchive::CREATE);
       
//$download_file_dump = file_get_contents($filedumped);
       
$log->wlog("path to the file to add in the zip: $filedumped");
       
$log->wlog("file $filedumped compressed to zip format");
       
set_time_limit($oddmp->getTimeoutLimit());
       
$zip->addFile($filedumped, basename($filedumped));
       
$zip->close();

       
# header download file compressed
       
header('Content-Description: File Transfer');
        if(
$typeCompression == "zip")
        {
           
header('Content-Type: application/zip');
           
$filerenamed = str_replace("sql","zip",$filename);
        }
        elseif(
$typeCompression == "gzip")
        {
           
header('Content-type: application/x-gzip');
           
$filerenamed = str_replace("sql","gzip",$filename);
        }
       
$filedumpcompressed = $dirfiledumped . DIRECTORY_SEPARATOR . $filerenamed;

       
header('Content-Type: application/octet-stream');
       
header("Content-Transfer-Encoding: binary");
       
header('Content-Disposition: attachment; filename="'.$filerenamed.'"');
       
header('Content-Length: ' . filesize($tmp_file_dump));
       
readfile($tmp_file_dump);

       
unlink($tmp_file_dump);

    }

}

unset(
$oddmp);
$log->end();
unset(
$log);

For more information send a message to info at phpclasses dot org.