2017-09-18 1 views
0

Ich habe ein einfaches Stück PHP-Code, der eine Zip-Datei von einer Remote-URL auf den Server kopiert und dann in einen anderen Ordner extrahiert.PHP Script Download eines gezippten Produkt Feeds von URL - Download funktioniert gut, wenn im Browser

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; 
 
    } 
 
}

Es arbeitet perfekt mit einer URL aus Awin und Downloads und extrahiert die richtigen 600kb zip, aber mit einem anderen von Webgains lädt es nur eine Zip-Datei mit einer Größe von 0 Byte. Ich vermute, der Download wird irgendwo beschädigt?

Wenn ich die URL in meinem Browser besuche, wird die ZIP-Datei perfekt heruntergeladen (die Größe beträgt etwa 3 MB). Ich kann es einfach nicht mit PHP herunterladen.

Bitte helfen!

Antwort

1

Da Sie die Problem-URL nicht angegeben haben, kann ich nicht sicher sagen, aber Sie stoßen wahrscheinlich auf ein Problem mit der Methode, die die Kopie zum Lesen der Datei verwendet. Wenn Sie einen direkten Anruf tätigen, sollte dies gelöst werden.

Versuchen Sie die folgenden:

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

Es hat funktioniert! Ich danke dir sehr! Ich muss wirklich lernen, cURL zu benutzen! –