Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Aiuto funzione scriviZip

    Stavo scrivendo una funzione per creare archivi zip solo che mi va in loop e mi da errore...
    Codice PHP:
    function contenutoCartella($percorso)
    {
        
    $apri opendir($percorso);
        
    $i=0;
        
        while (
    false !== ($files readdir($apri))) //...qui
            
    if ($files != '.' && $files != '..')
                {
                    
    $c=$files;
                    
    $contenuto[$i]=$c;
                    
    $i++;
                }
        return 
    $contenuto;
    }

    function 
    scriviZip($doveScriverlo$datiZip)
    {
        
    fopen($doveScriverlo,"w+");
        
        
    $zip = new ZipArchive();
        
    $zip->open($doveScriverlo);
            
    $NuoviDati=$datiZip;
            do
            {
              if(
    is_dir($datiZip))
                {
                    
    $zip->addEmptyDir($NuoviDati);
                    
    $listafile=contenutoCartella($NuoviDati);
                    for(
    $i=0;$i!=count($listafile);$i++)
                    {
                        
    $NuoviDati.="/".$listafile[$i];
                        
    scriviZip($doveScriverlo,$NuoviDati);
                    }
                }
                else
                {
                    
    $zip->addFile($NuoviDati$NuoviDati);
                    if(
    $NuoviDati!=$datiZip){
                        
    $NuoviDati=explode("/"$NuoviDati);
                        
    $NuoviDati[count($NuoviDati)-1]=null;
                        
    $NuoviDati=implode("/"$NuoviDati);
                    }
                    
                }
            }while (
    $NuoviDati!=$datiZip);

    mi dareste una mano a correggere l'errore e magari anche a completare la funzione?

  2. #2
    il loop sembra corretto, che errore ti viene ritornato?

  3. #3
    Se gli dico di scrivere un file non c'è problema, mentre se glio dico di scrivere una cartella con uno o più files mi da questo errore
    codice:
    Warning: opendir(archivio/index.php,archivio/index.php) [function.opendir]: Nome di directory non valido. (code: 267) in \\LACIE-5BIG\RAID25\Preventivi OGA Locale\info\test\index.php on line 6
    
    Warning: opendir(archivio/index.php) [function.opendir]: failed to open dir: Invalid argument in \\LACIE-5BIG\RAID25\Preventivi OGA Locale\info\test\index.php on line 6
    
    Warning: readdir() expects parameter 1 to be resource, boolean given in \\LACIE-5BIG\RAID25\Preventivi OGA Locale\info\test\index.php on line 9
    
    Warning: readdir() expects parameter 1 to be resource, boolean given in \\LACIE-5BIG\RAID25\Preventivi OGA Locale\info\test\index.php on line 9
    e mi da questo risultato:
    codice:
    Se la cartella che voglio archiviare è la cartella "archivio":
    archivio
    archivio--index.php
    archivio--file2.txt
    
    il risultato è:
    fileZip.zip
    fileZip.zip--archivio
    fileZip.zip--archivio--index.php
    fileZip.zip--archivio--index.php--file2.txt
    
    dove index.php e file2.txt sono cartelle

  4. #4
    up

  5. #5
    up

  6. #6
    su internet ho trovato la soluzione che riadattata assume questa forma:
    Codice PHP:
    function scriviZip($doveScriverlo$datiZip)
    {
        if (
    extension_loaded('zip') === true)
        {
            if (
    file_exists($datiZip) === true)
            {
                    
    $zip = new ZipArchive();

                    if (
    $zip->open($doveScriverloZIPARCHIVE::CREATE) === true)
                    {

                            if (
    is_dir($datiZip) === true)
                            {
                                    
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($datiZip), RecursiveIteratorIterator::SELF_FIRST);

                                    foreach (
    $files as $file)
                                    {

                                            if (
    is_dir($file) === true)
                                            {
                                                    
    $zip->addEmptyDir(str_replace($datiZip '/'''$file '/'));
                                            }

                                            else if (
    is_file($file) === true)
                                            {
                                                    
    $zip->addFromString(str_replace($datiZip '/'''$file), file_get_contents($file));
                                            }
                                    }
                            }

                            else if (
    is_file($datiZip) === true)
                            {
                                    
    $zip->addFromString(basename($datiZip), file_get_contents($datiZip));
                            }
                    }

                    return 
    $zip->close();
            }
        }

        return 
    false;

    La usi chiunque ne abbia bisogno!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.