Problema download e file compressi

Discussione in 'PHP' iniziata da LaKanka, 29 Luglio 2009.

  1. LaKanka

    LaKanka Utente Attivo

    Registrato:
    29 Agosto 2008
    Messaggi:
    166
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao a tutti!
    Eccomi con un altro bel rompicapo.. :hammer:
    Ho un sito su un server che ha una vecchia versione di php e quindi non contiene le librerie php zip e non sono nemmeno installabili.
    Ho un file zip che contiene un xml di 100Mb su un ftp esterno al server su cui lavoro.

    Devo fare il download del file sul mio sito e dezipparlo per poterci lavorare.

    Il problema è che una volta nel mio server non riesco a dezipparlo per la mancanza delle librerie php zip e le classi gz (sono l'unica cosa che ho trovato in sostituzione alle librerie php zip) hanno un limite di memoria che il file supera abbondantemente!! e come risultato non ottengo niente....

    Allora ho provato a decomprimerlo sull'ftp esterno e poi fare il download (che con il file .zip ha sempre funzionato) sul mio sito ma il server su cui lavoro :incazz: non riesce a terminare il download e da "internal server error".

    Esistono altri modi per decomprimere file zip senza le librerie oltre alle classi gz?
    Altrimenti non riesco proprio a venirne fuori....
     
  2. Eliox

    Eliox Utente Attivo

    Registrato:
    25 Febbraio 2005
    Messaggi:
    4.391
    Mi Piace Ricevuti:
    3
    Punteggio:
    0
    lavorando da remoto non è che hai un ampio ampio margine di manovra, hai provato a segnalare la cosa al provider?
     
  3. LaKanka

    LaKanka Utente Attivo

    Registrato:
    29 Agosto 2008
    Messaggi:
    166
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Certo, mi hanno fatto un mucchio di storie, mandaci il link, dacci le password e sono ancora in attesa di una risposta...
    L'unica cosa che sono riusciti a dirmi è stata di comprare un server dedicato o virtuale per avere ftp secondari.

    Ma davvero non ci sono altre soluzioni per decomprimere file??
     
  4. Trogo

    Trogo Utente Attivo

    Registrato:
    11 Gennaio 2008
    Messaggi:
    370
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Occupazione:
    sistemista programmatore
    Località:
    Sanremo
    Non ho mai provato ad usarle, però phpMyAdmin usa due classi (./libraries/unzip.lib.php e ./libraries/zip.lib.php) per gestire i file ZIP.

    Ho fatto solo un test per verificarne il funzionamento:

    PHP:
    <?php

    include 'unzip.lib.php';

    $unzip = new SimpleUnzip("crayon.zip");

    foreach(
    $unzip->Entries as $entry) {
        if(
    $entry->Error == 0) {
            if(!
    file_exists($entry->Path)) {
                if(!@
    mkdir($entry->Path0777true)) {
                    echo 
    "<div>Errore nella creazione della cartella: " $entry->Path "</div>";
                }
            }
            
    $fp fopen($entry->Path "/" $entry->Name"w");
            
    fwrite($fp$entry->Data);
            
    fclose($fp);
        } else {
            echo 
    "Errore file compresso: " $entry->ErrorMsg;
        }
    }

    ?>
    Ma non garantisco su memoria e timeout...
     
  5. LaKanka

    LaKanka Utente Attivo

    Registrato:
    29 Agosto 2008
    Messaggi:
    166
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ma ho chiesto al provider del server su cui lavoro se hanno a disposizione librerie come php zip e mi ha risposto:
    "La informo che sui nostri Server allo stato attuale non sono presenti le librerie "Php_zip" e non sono installabili."

    Ora phpMyAdmin l'ho utilizzato una volta per un sito di cui necessitavo di un pannello di controllo del database... in questo server ho già a disposizione questo...

    Aiuto.... mi stò perdendo...
     
  6. Trogo

    Trogo Utente Attivo

    Registrato:
    11 Gennaio 2008
    Messaggi:
    370
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Occupazione:
    sistemista programmatore
    Località:
    Sanremo
    Non volevo intendere di usare phpMyAdmin, ma solo le sue due librerie, anzi solo quella per decomprimere.

    La libreria la puoi scaricare da qui.

    La salvi e fai l'upload nel tuo sito, insieme ad uno script come quello che ho postato prima. L'unica cosa che devi cambiare è:

    PHP:
    $unzip = new SimpleUnzip("tuo_file_zip.zip");
     
  7. LaKanka

    LaKanka Utente Attivo

    Registrato:
    29 Agosto 2008
    Messaggi:
    166
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ho aumentato la versione di php al 5.2 ed ho 64MB di memoria ma ora riscontro un problema di codice....:dipser:

    Ecco la mia classe gz:
    PHP:
    class gz_single {

    /* Inizializza le variabili */
    var $source;
    var 
    $dest;
    var 
    $level;
    var 
    $pointer;
    var 
    $gzdata;
    var 
    $data;
    var 
    $status;

    function 
    compress($source$dest$level)
    {
    /* Inizializza le variabili */
    $this->source $source;
    $this->dest $dest;
    $this->level $level;

    /* Controlla che il file d'origine esista e che sia leggibile */
    if(!is_file($this->source) OR !file_exists($this->source) OR !is_readable($this->source)) exit("Error 1: Source file doesn't exists or it's not readable!<br>");

    /* Controlla che il file di destinazione non sia di sola lettura */
    if(is_file($this->dest) AND !is_writeable($this->dest)) exit("Error 2: The destination file it's not writeable");

    /* Arrotonda il livello di compressione */
    $this->level round($this->level);

    /* Controlla il livello e se è troppo grande, lo porta al massimo */
    if($this->level == 'MAX' OR $this->level 9$this->level 9;

    /* Controlla il livello e se è troppo piccolo, lo porta al minimo */
    if($this->level == 'MIN' OR $this->level 1$this->level 1;

    /* Prende i dati dal file d'origine */
    $this->data file_get_contents($this->source);

    /* Comprime i dati del file d'origine */
    $this->gzdata gzcompress($this->data$this->level);

    /* Scrive i dati compressi nel file di destinazione */
    $this->status file_put_contents($this->dest$this->gzdata);

    /* Ritorna i valori positivi e negativi in base all'esito dell'operazione */
    if($this->status) return TRUE; else return FALSE;
    }

    function 
    decompress($source$dest)
    {
    /* Inizializza le variabili */
    $this->source $source;
    $this->dest $dest;

    /* Controlla che il file d'origine esista e che sia leggibile */
    if(!is_file($this->source) OR !file_exists($this->source) OR !is_readable($this->source)) exit("Error 1: Source file doesn't exists or it's not readable!<br>");

    /* Controlla che il file di destinazione non sia di sola lettura */
    if(is_file($this->dest) AND !is_writeable($this->dest)) exit("Error 2: The destination file it's not writeable");

    /* Prende i dati dal file d'origine */
    $this->gzdata file_get_contents($this->source);

    /* Comprime i dati del file d'origine */
    $this->data gzuncompress($this->gzdata);

    /* Scrive i dati decompressi nel file di destinazione */
    $this->status file_put_contents($this->dest$this->data);

    /* Ritorna i valori positivi e negativi in base all'esito dell'operazione */
    if($this->status) return TRUE; else return FALSE;
    }
    }
    Ecco il codice:
    PHP:
    $singlegz = new gz_single();
    $status $singlegz->decompress("file.zip""file.xml");
    if(!
    $status) print "Errore durante la decompressione dell'archivio gz";
    Come risultato ottengo:
    Warning: gzuncompress() [function.gzuncompress]: data error in /gz_single.class.php
    Errore durante la decompressione dell'archivio gz

    Non capisco quale sia il problema....
     
  8. Trogo

    Trogo Utente Attivo

    Registrato:
    11 Gennaio 2008
    Messaggi:
    370
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Occupazione:
    sistemista programmatore
    Località:
    Sanremo
    Il problema di fondo è che gzip e zip sono molto diversi anche se il nome è molto simile.

    In più la funzione gzuncompress effettua solo la decompressione di una stringa compressa con l'algoritmo usato da gzip.

    Per usare una classe come questa dovresti provare a comprimere il file XML sull'altro server usando la stessa classe che qui usi per decomprimere.
    Così facendo ci sarebbe omogeneità nei formati!
     
  9. LaKanka

    LaKanka Utente Attivo

    Registrato:
    29 Agosto 2008
    Messaggi:
    166
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    non esiste una classe per decomprimere zip e non gzip?
     
  10. LaKanka

    LaKanka Utente Attivo

    Registrato:
    29 Agosto 2008
    Messaggi:
    166
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Hoprovato la libreria che mi hai consigliato, ma ora come risultato da:
    Errore file compresso: Compressed size is not equal with the value in header information.Errore file compresso: Compressed size is not equal with the value in header information.

    Ho provato a dezippare il file sul mio pc ed all'interno ho 2 file
    -file.MDB
    -file.MDB.xml

    Forse è questo che da dei problemi?
     
  11. Trogo

    Trogo Utente Attivo

    Registrato:
    11 Gennaio 2008
    Messaggi:
    370
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Occupazione:
    sistemista programmatore
    Località:
    Sanremo
    Direi proprio di no. Lo ZIP che ho provato a decomprimere io contiene diversi file con cartelle nidificate. In più è un file scaricato da Internet, quindi non creato "ad hoc" come test per la classe.

    Ma nello ZIP non doveva esserci solo un file? Sei sicuro che lo ZIP non sia lievemente corrotto? Come viene creato lo ZIP sull'altro server?
     
  12. LaKanka

    LaKanka Utente Attivo

    Registrato:
    29 Agosto 2008
    Messaggi:
    166
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    No lo zip è corretto, pensavo contenesse solo un xml poi quando l'ho dezippato su pc ho visto anche il file MDB.... scusate...:p
    L'xml contenuto, dezippato è 101.000.000 Kb, forse è troppo grande?
    Lo zip viene creato su un server ancora diverso e non da me, ma da un professionista, che lo invia a questo ftp di cui ho i dati di accesso proprio per poterne fare il downlod sul server del mio sito....
     
  13. LaKanka

    LaKanka Utente Attivo

    Registrato:
    29 Agosto 2008
    Messaggi:
    166
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Se non trovo una soluzione mi conviene cambiare provider.......:gun:
    Questo server ha troppe limitazioni...
     
  14. Trogo

    Trogo Utente Attivo

    Registrato:
    11 Gennaio 2008
    Messaggi:
    370
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Occupazione:
    sistemista programmatore
    Località:
    Sanremo
    Ecco per quanto riguarda la dimensione potrebbe anche essere un problema. Lo ZIP che ho provato io decompresso era sui 12MB.
    potresti provare a configurarti un webserver di test in locale per fare le prove con questo ZIPPONE e verificare così se il problema è nella classe, o nelle risorse che hai a disposizione sul server dove risiede il tuo script.
     
  15. LaKanka

    LaKanka Utente Attivo

    Registrato:
    29 Agosto 2008
    Messaggi:
    166
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Grazie per il vostro aiuto, ma sto già procedendo a spostare il sito su un server migliore. Comunque se qualcuno ha il mio stesso problema ho trovato una classe adatta qui.

    Grazie ancora!:p
     
Sto caricando...

Condividi questa Pagina