2010-09-14 7 views
0

J'utilise CURL pour extraire le contenu d'un fichier zip sur un serveur distant, puis l'enregistrer dans un temp_zip_file.zip, puis utiliser la classe PclZip pour extraire le contenu d'un fichier. Le problème est que sur certains serveurs, le serveur ne permettra pas à mon script de créer un fichier zip temporaire à partir du retour CURL afin que je puisse l'utiliser pour l'extraction de pclzip. Ce que je voudrais faire est d'ignorer la création d'un fichier zip temporaire et d'utiliser simplement la chaîne de retour du CURL d'origine avec la classe pclzip pour l'extraction.Utilisation de CURL avec PclZip Classe

Je dois utiliser pclzip car certains serveurs n'autorisent pas l'utilisation de la classe zip par défaut de php. Voici la fonction curl utilisée pour extraire le contenu du fichier distant:

function copy_file($download_file) 
{ 
    //get file 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$download_file); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_FAILONERROR, true); 
    curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $file = curl_exec($ch); 
    curl_close($ch); 
    $fp = fopen('temp_zip_file.zip', 'w'); 
    fwrite($fp, $file); 
    fclose($fp); 
    //exit; 
} 

Voici une copie de ma fonction Décompressez pcl, dans lequel download_file de $ est 'temp_zip_file.zip':

function zip_extract($download_file, $store_path, $remove_path) 
{ 
//echo 1; exit; 
//echo $remove_path; exit; 
$archive = new PclZip($download_file); 
$list = $archive->extract(PCLZIP_OPT_REMOVE_PATH, $remove_path, PCLZIP_OPT_PATH, $store_path, PCLZIP_OPT_REPLACE_NEWER); 
if ($list == 0) 
{ 
    //echo "death here"; exit; 
    die("Error : ".$archive->errorInfo(true)); 

} 
else 
{ 
    //print_r($list); exit; 
    return 1; 

} 

} 

Nous vous remercions de tout soutien

+0

Can vous devez également publier votre code cURL? Ce serait utile, et il semble que le problème provient probablement de là. – defines

+0

Ajouté ci-dessus merci. – atwellpub

Répondre

0

Si vous souhaitez utiliser gzopen() sur quelque chose d'autre qu'un fichier, le Data wrapper pourrait être ce que vous cherchez. Gardez à l'esprit qu'il est en lecture seule, aucune écriture possible. Cela dit, je n'ai pas encore trouvé de système qui ne me permette pas d'écrire dans le répertoire TMP (la variable d'environnement TMP sous Linux, la variable d'environnement TMPDIR sous Windows je crois ...)