Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Zippare una cartella

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    183

    Zippare una cartella

    Ciao a tutti, Avrei un problemino per creare un file zip in PHP di una intera cartella


    Esempio struttura cartella da zippare


    CartellaRoot (principale)
    All'interno di CartellaRoot mi trovo


    Sub1
    Sub2
    Sub3
    ....


    Io devo zippare tutto il contenuto sia file che sub folder presenti in una cartella presente dentro CartellaRoot


    Es. Voglio zippare Sub2


    Lo script di seguito lo fà pero nel zip mi mette il contenuto di Sub2. Io vorrei che prima mi scriva Sub2 e dentro il suo contenuto. Non so se mi spiego. In fine non so se sia possibile avere un qualche messaggio che indica che lo script stà lavorando. Grazie a chi può aiutarmi



    $infile = $_REQUEST['filezip']; //percorso e nome file zip
    $outfile = $_REQUEST['outfile']; //cartella da comprimere


    // Get real path for our folder
    $rootPath = $outfile;


    // Initialize archive object
    $zip = new ZipArchive();
    $zip->open($infile, ZipArchive::CREATE | ZipArchive::OVERWRITE);


    // Create recursive directory iterator
    /** @var SplFileInfo[] $files */
    $files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
    );


    foreach ($files as $name => $file)
    {
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
    // Get real and relative path for current file
    $filePath = $file->getRealPath();
    $relativePath = substr($filePath, strlen($rootPath) + 1);


    // Add current file to archive
    $zip->addFile($filePath, $relativePath);
    }
    }




    $zip->close();


    //ricavo il solo nome del file da scaricare
    $pathArr = explode(DIRECTORY_SEPARATOR, $infile);
    $filename = end($pathArr);
    echo $filename;


    //download file zip creato
    header("Content-type: application/zip");
    header("Content-Disposition: attachment; filename=".$filename);
    header("Content-length: " . filesize($infile));
    header("Pragma: no-cache");
    header("Expires: 0");
    readfile($infile);

  2. #2
    Non reinventare la ruota:


    https://packagist.org/packages/alchemy/zippy

    codice:
    // Creates an archive.zip that contains a directory "folder" that contains// files contained in "/path/to/directory" recursively
    $archive = $zippy->create('archive.zip', array(
        'folder' => '/path/to/directory'
    ), true);

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    183
    Non sono molto pratico di php. Per usare questo codice devo usare la libreria zippy che a sua volta necessita di composer oppure non ciò capito nulla.

  4. #4
    codice:
    function zip_files( $file_name = "test.zip", $files = array() ) {
    		$zip = new ZipArchive();
    		if (file_exists( $file_name )) {
    			unlink( $file_name );
    		}
    		if ($zip->open( $file_name, ZipArchive::CREATE ) !== TRUE) {
    			$zip->close();
    			return false;
    		}
    		if (is_array( $files )) {
    			foreach ( $files as $file_name_orig => $file ) {
    				if (! is_numeric( $file_name_orig )) {
    					$zip->addFile( $file, $file_name_orig );
    				} else {
    					$file_info = get_file_info( $file );
    					$zip->addFile( $file, $file_info [ "name" ] );
    				}
    			}
    		} else {
    			$zip->addFile( $files );
    		}
    		$zip->close();
    	}
    
    $file_comprimere = array (
    	"file_1.pdf" => "/percorso/percorso2/file.pdf",
    	"file_2.doc" => "/percorso/percorso2/file.doc"
    );
    zip_files( "download.zip", $file_comprimere );
    Adatta un pelo con le tue necessità...
    Nel file zip avrai un file chiamato "file_1.pdf" che sarà il file "/percorso/percorso2/file.pdf" zippato ecc ecc. Se come chiave dell'array usi "/cartella4/file_1.pippo", nello zip avrai un file "/cartella4/file_1.pippo" che sarà il file "/percorso/percorso2/file.pdf", e anche se cartella4 non esiste (sul server) a te non importa....quando lo scompatti il software sul pc creerà eventualmente la cartella4

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.