2017-09-18 2 views
0

원격 URL의 zip 파일을 서버로 복사 한 후 다른 폴더로 추출하는 간단한 PHP 코드가 있습니다.URL에서 Zip 된 제품 피드를 다운로드하지 않는 PHP 스크립트 브라우저에서 방문하면 정상적으로 작동합니다.

function extract_remote_zip($new_file_loc, $tmp_file_loc, $zip_url) { 
 
    
 
    echo 'Copying Zip to local....<br>'; 
 
    
 
    //copy file to local 
 
    if (!copy($zip_url, $tmp_file_loc)) { 
 
     echo "failed to copy zip from".$zip_url."..."; 
 
    } 
 
    
 
    //unzip 
 
    $zip = new ZipArchive; 
 
    $res = $zip->open($tmp_file_loc); 
 
    
 
    if ($res === TRUE) { 
 
     echo 'Extracting Zip....<br>'; 
 
     if(! $zip->extractTo($new_file_loc)){ 
 
      echo 'Couldnt extract!<br>'; 
 
     } 
 
     $zip->close(); 
 
     echo 'Deleting local copy....<br>'; 
 
     unlink($tmp_file_loc); 
 
     return 1; 
 
     
 
     
 
    } else { 
 
     echo 'Failed to open tmp zip!<br>'; 
 
     return 0; 
 
    } 
 
}

그것은 Awin 및 다운로드에서 하나 개의 URL과 함께 완벽하게 작동하고 올바른 6백킬로바이트 우편을 추출하지만, Webgains에서 서로 그냥 크기가 0 바이트 Zip 파일을 다운로드합니다. 다운로드가 어딘가에서 손상되고있는 것 같습니까?

브라우저에서 URL을 방문하면 zip을 완벽하게 다운로드합니다 (크기는 약 3MB). PHP로 다운로드 할 수 없습니다.

도와주세요!

답변

1

문제 URL을 제공하지 않았으므로 확실히 말할 수는 없지만 파일 복사 방법에 문제가있을 수 있습니다. 직접 컬 호출을하면이 문제가 해결됩니다.

은 아래에보십시오 :

function file_get_contents_curl($url) { 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 

    $data = curl_exec($ch); 
    if (curl_errno($ch) <> FALSE) { 
    echo "ERROR at line " . __LINE__ . " in file_get_contents_curl: error number: " . curl_errno($ch) . ' error : ' . curl_error($ch) . " url: $url"; 
    return FALSE; 
    } 

    curl_close($ch); 

    return $data; 

} 

function extract_remote_zip($new_file_loc, $tmp_file_loc, $zip_url) { 

    echo 'Copying Zip to local....<br>'; 

    // read the zip 
    if ($zip_str = file_get_contents_curl($zip_url)) { 

     // write the zip to local 
     if ( !file_put_contents($tmp_file_loc, $zip_str)) { 
     echo "failed to write the zip to: " . $zip_url; 
     return FALSE;   
     } 

    } else { 
     echo "failed to read the zip from: " . $zip_url; 
     return FALSE; 
    } 

    //unzip 
    $zip = new ZipArchive; 
    $res = $zip->open($tmp_file_loc); 

    if ($res === TRUE) { 
     echo 'Extracting Zip....<br>'; 
     if(! $zip->extractTo($new_file_loc)){ 
      echo 'Couldnt extract!<br>'; 
     } 
     $zip->close(); 
     echo 'Deleting local copy....<br>'; 
     unlink($tmp_file_loc); 
     return 1; 


    } else { 
     echo 'Failed to open tmp zip!<br>'; 
     return 0; 
    } 
} 
+0

그것은했다! 정말 고맙습니다! 정말 큐를 사용하는 법을 배워야합니다! –

관련 문제