2012-06-03 13 views
8

Ho provato a scaricare un file zip utilizzando il ricciolo da un host virtuale a un altro, in uno stesso server. Il file zip contiene i file * .php e * .jpg.Immagine danneggiata quando estratto dal file zip

Il problema è: a volte file JPG ottenere corrotti, in questo modo:

jpg file

Ecco il mio codice:

$out = fopen(ABSPATH.'/templates/default.zip','w+'); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_FILE, $out); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_URL, 'http://share.example.com/templates/default.zip'); 
curl_exec($ch); 
curl_close($ch); 


$zip = new ZipArchive; 
if ($zip->open(ABSPATH.'/templates/default.zip') === TRUE) 
{ 
    if($zip->extractTo(ABSPATH.'/templates')) 
    { 
     echo 'OK'; 
    } 

    $zip->close(); 
} 

//$zip->close(); 

Non capisco cosa succede al mio jpg . Ho anche provato a usare pclzip.lib.php, ma senza fortuna. Come risolvere questo problema?

Grazie in anticipo

+2

Cercando di escludere l'ovvio - se si scarica e decomprimere il file normalmente (cioè manualmente, senza PHP) funziona? –

+0

Sì, il suo lavoro. File caricato sul server usando la modalità binaria FTP (ho provato anche la modalità ascii), grazie. –

+1

Non sono un esperto in questo settore, ma so che i file zip possono avere algoritmi diversi. Forse c'è un problema di compatibilità? –

risposta

1

Finalmente ho trovato qual è il problema.

Sto utilizzando il server web Nginx, quando cambio i file di configurazione nginx:

sendfile on; 

diventato più

sendfile off; 

La mia immagine non corrotto. Quindi non è un problema con php o arricciatura. Articolo interessante: http://technosophos.com/node/172

1

Hai provato il download tramite ricciolo e decomprimere normalmente (cioè senza php)? Per capire se il download causa il problema o la decompressione.

Si potrebbe anche provare a sostituire una delle due parti usando shell_exec (wget invece di arricciare, decomprimere invece di ZipArchive). Intendo solo per il debug, non per la produzione forse.

Problemi correlati