2017-09-18 2 views
0

J'ai un simple code PHP qui copie un fichier zip d'une URL distante au serveur, puis l'extrait dans un autre dossier.Script PHP ne pas télécharger un flux de produit zippé à partir d'URL - Le téléchargement fonctionne bien sur le navigateur

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

Il fonctionne parfaitement avec une URL de Awin et télécharge et extrait le zip 600kb correct, mais avec un autre de Webgains il télécharge juste un fichier Zip avec la taille de 0 octets. Je suppose que le téléchargement est corrompu quelque part?

Lorsque je visite l'URL sur mon navigateur, il télécharge le zip parfaitement (la taille est d'environ 3 Mo). Je ne peux tout simplement pas le télécharger avec PHP.

Aidez s'il vous plaît!

Répondre

1

Étant donné que vous n'avez pas fourni l'URL du problème, je ne peux pas le dire avec certitude, mais vous rencontrez probablement un problème avec la méthode de copie utilisée pour lire le fichier. Faire un appel curl direct devrait résoudre ce problème.

Essayez le ci-dessous:

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

Il a fonctionné! Merci beaucoup! J'ai vraiment besoin d'apprendre à utiliser cURL! –