2012-06-03 2 views
8

동일한 가상 호스트에서 다른 서버로 curl을 사용하여 zip 파일을 다운로드하려고합니다. Zip 파일에는 * .php 및 * .jpg 파일이 포함되어 있습니다.zip에서 추출 할 때 손상된 이미지

문제는 : 때로는 JPG 파일은 다음과 같이 손상를 얻을 : 내 jpg이 일어날 것을

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

이해가 안 : 여기

jpg file

내 코드입니다 . 나는 또한 pclzip.lib.php를 사용해 보았지만 행운은 없었다. 이 문제를 해결하는 방법? 사전에

덕분에

+2

파일을 정상적으로 다운로드하거나 압축을 풀면 (즉, PHP없이 수동으로) 작동하는지 여부는 확실하지 않습니다. –

+0

예. FTP 바이너리 모드를 사용하여 서버에 업로드 한 파일 (아스키 모드도 시도했습니다), 감사합니다. –

+1

저는이 분야의 전문가는 아니지만 zip 파일이 다른 알고리즘을 가질 수 있음을 알고 있습니다. 어쩌면 호환성 문제가있을 수 있습니까? –

답변

1

마지막으로 나는 무엇이 문제인지를 발견했다.

난의 nginx 설정 파일을 변경할 때 나는, Nginx에 웹 서버를 사용하고 있습니다 :

sendfile on; 

더 이상

sendfile off; 

내 이미지가 손상되지되었다. 따라서 php 나 curl 문제는 아닙니다. 재미있는 문서 : http://technosophos.com/node/172

1

당신은 컬를 통해 파일을 다운로드하고 정상적으로 압축을 해제 봤어 (즉, PHP는 제외)? 다운로드로 인해 문제가 발생하는지 아니면 압축이 풀리는 지 알아 내야합니다.

또한 shell_exec (curl 대신 wget, ZipArchive 대신 unzip)를 사용하여 두 부분 중 하나를 대체하려고 할 수 있습니다. 나는 디버깅을위한 것이지, 프로덕션을위한 것은 아닙니다.

관련 문제