2012-06-03 14 views
8

Próbuję pobrać plik zip za pomocą curl z jednego hosta wirtualnego na inny, na tym samym serwerze. Plik Zip zawiera pliki * .php i * .jpg.Uszkodzony obraz po wypakowaniu z suwaka

Problemem jest: czasami JPG dostać uszkodzony, tak:

jpg file

Oto mój kod:

$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(); 

ja nie rozumiem, co się stało z moim jpg . Próbowałem również używać pclzip.lib.php, ale bez powodzenia. Jak rozwiązać ten problem?

góry dzięki

+2

Próbujesz wykluczyć oczywistość - jeśli normalnie ściągasz i rozpakowujesz plik (np. Ręcznie, bez PHP) to działa? –

+0

Tak, to działa. Plik przesłany na serwer przy użyciu trybu binarnego FTP (próbowałem też trybu ASCII), Dzięki. –

+1

Nie jestem ekspertem w tej dziedzinie, ale wiem, że pliki zip mogą mieć różne algorytmy. Może jest problem ze zgodnością? –

Odpowiedz

1

W końcu znalazłem, jaki jest problem.

Używam serwera WWW Nginx, kiedy zmienić nginx pliki config:

sendfile on; 

stał już

sendfile off; 

Mój obraz nie uszkodzony. Więc nie jest to problem php ani curl. Interesujący artykuł: http://technosophos.com/node/172

1

Czy próbowałeś pobierania pliku poprzez zwinięcie i rozpakować go normalnie (tzn bez php)? Aby dowiedzieć się, czy pobieranie powoduje problem lub rozpakować.

Możesz także spróbować zastąpić jedną z obu części za pomocą powłoki shell_exec (wget zamiast curl, unzip zamiast ZipArchive). Mam na myśli tylko debugowanie, może nie dla produkcji.

Powiązane problemy