Visualizzazione risultati 1 fino 1 di 1

Discussione: Esempio creazione ZIP e Download automatico da progetto su Altervista

  1. #1
    Guest

    Predefinito Esempio creazione ZIP e Download automatico da progetto su Altervista

    Oggi avevo poco da fare al lavoro, così ho fatto una funzione che mi permette di zippare e scaricare le cartelle del progetto che ho qui su altervista MvcWebLog, dato che dal lavoro non posso usare l'ftp perchè me lo blindano, ho seguito il consiglio di Karl e mi sono creato questa funzioncina che da una form html dove si inserisce il nome della cartella da zippare all'interno del progetto crea lo zip ed automaticamente parte anche il download della cartella...Io ho un progetto che ha una directory principale(diciamo il nome del Progetto) MvcWebLog, all'interno della cartella MvcWebLog ci sono tutte le sottocartella, il codice sotto in base al nome dalla cartella inserita presente all'interno dell'MvcWebLog la compatta e la scarica....Se dovesse essere di aiuto a qualcuno lo condivido qui con voi.
    Io uso una action nel form che voi dovrete ovviamente cambiare, ma la action della form chiama la funzione creaZip quindi basta che mettete il codice in una pagina php e la chiamate dalla action del post, il nome MvcWebLog è il nome della cartella principale del progetto, voi metterete il nome della vostra cartella, e img/error.png è una png di errore inclusa in una cartella img voi mettetene una vostra.
    Per l'Html io uso Bootstrap quindi ovviamente non vedrete l'html giusto però comunque lo metto, ma è una form con input type="text" name="pathZip" che viene poi ripreso in post...

    DOVETE CREARE UNA FOLDER NELLA DIRECTORY DEL PROGETTO IO L'HO CHIAMATA zipFolder e dentro questa folder un file con estensione .zip nominato filezip.zip dove si crea la compattazione vera e propria.
    Ciao

    Ps:Funziona alla grande.... ;)

    Codice HTML:
    <fieldset class="weblog">
    	<form method="post" action="../index.php?azione=creaZip">
            <div class="well fieldsetZip">	
    				<div class="alert-info" style="margin: 2% 0 0 0">
    					<h3 style="color: blue" class="head" align="center">Crea Cartella Zip da Directory</h3>
    				</div>   
    			<div class="contieniRigheZip">      	
    			<b class="alert-success">Per compattare tutta la directory inserire nel campo il nome del Progetto:<br>MvcWebLog</b>               	
    			<div class="input-group">
    				<span class="input-group-addon" id="basic-addon1"><b>Nome della cartella : </b></span>
    				<input type="text" class="form-control" aria-describedby="basic-addon1" value="" id="pathZip" size="40" name="pathZip" onkeypress="return noNumbers(event);">
    			</div><br><br>
    			</div>
    	
            	<input type="submit" class="btn btn-primary" value="Crea Zip" id="btnZip"><br><br>  
        	</div><br><br>
    	</form>
    </fieldset>
    
    <style type="text/css">
    	
        .fieldsetZip{
           margin-top :5%;
           margin-left: 15%;
           margin-right: 15%;
           margin-bottom:auto;
           -moz-border-radius: 6px;
           -webkit-border-radius: 6px;
           border-radius: 4px;
           border: 2px solid #AED0EA;       
           padding:0%;
           position:relative;         
        }	
    	
        .contieniRigheZip
        {
            float : right;
    		margin : 0 25% 0 10%;
        }
    </style>
    
    <script type="text/javascript">
    
    function noNumbers(e) {
        var keynum;
        var keychar;
        var numcheck;
    
        if (window.event)// IE
        {
            keynum = e.keyCode;
        } 
        else if (e.which)// Netscape/Firefox/Opera
        {
            keynum = e.which;
        }
        keychar = String.fromCharCode(keynum);
    
        if ((keynum == 8)){
          return true;
        }
       
        //numcheck = /\d/;
        numcheck = /[a-zA-Z\s\ ]/;
    
        //return !numcheck.test(keychar);
        return numcheck.test(keychar);
    }
    
    </script>

    Codice PHP:

    public function creaZip(){

    $nomeCartella = trim($_POST['pathZip']);
    /**
    * Controlli sulla variabile recuperata in POST
    */
    if (trim($nomeCartella) == ''){
    $error='background: url("img/error.png") no-repeat scroll left top #ffd0dc;
    border: 1px solid #ac343d;
    margin: 5px 0 15px;
    padding: 5px 5px 5px 40px;'
    ;
    echo
    "<div style='$error'>Inserire il nome della cartella da compattare</div>";
    exit;
    }

    if (
    strpos($nomeCartella,".") !== false){
    $error='background: url("img/error.png") no-repeat scroll left top #ffd0dc;
    border: 1px solid #ac343d;
    margin: 5px 0 15px;
    padding: 5px 5px 5px 40px;'
    ;
    echo
    "<div style='$error'>Non puoi inserire dots(puntini) nel nome cartella</div>";
    exit;
    }
    //Se il nome cartella ha il nome della cartella principale di progetto istanzio la dirname(__DIR__)
    //e recupero tutte lo sottocartelle e file altrimento prendo la realpath della cartella specifica
    if (trim($nomeCartella) == 'MvcWebLog'){
    $rootPath = dirname(__DIR__);
    }
    else{
    $rootPath = realpath($nomeCartella);
    }

    if (
    $rootPath == false) {
    $error='background: url("img/error.png") no-repeat scroll left top #ffd0dc;
    border: 1px solid #ac343d;
    margin: 5px 0 15px;
    padding: 5px 5px 5px 40px;'
    ;
    echo
    "<div style='$error'>La cartella <b>$nomeCartella</b> non esiste</div>";
    exit;
    }

    $fileName = 'zipFolder/filezip.zip';
    //Inizializza la classe archivio e mettiamo i file nella cartella zipFolder creiamo o facciamo
    //l'overWrite dato che la scarichiamo subito.
    $zip = new ZipArchive();
    $zip->open($fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE);

    //Iteriamo tutti i file del path con la recursive iterator iterator
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootPath));

    foreach (
    $files as $nome => $file){
    if (!
    $file->isDir()){
    $filePath = $file->getRealPath();
    $relativePath = substr($filePath, strlen($rootPath.'/'));
    //Aggiungiamo i file all'archivio
    $zip->addFile($filePath, $relativePath);
    //print 'Relative PATH :'.$relativePath .' FILE : '.$filePath.'<br>';
    }
    }
    //Zip close e crea oggetto
    $zip->close();
    //Forza il download della compattazione appena creata
    header("Content-type: application/zip");
    header("Content-Disposition: attachment; filename=$nomeCartella");
    header("Content-length: " . filesize($fileName));
    header("Pragma: no-cache");
    header("Expires: 0");
    readfile("$fileName");

    }
    Ultima modifica di fractalcosmo : 18-02-2016 alle ore 17.52.33

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •