使用CURL和PclZip类

时间:2010-09-14 22:49:03

标签: php zip unzip

我正在使用CURL获取远程服务器上zip文件的内容,然后将其保存到temp_zip_file.zip,然后使用PclZip类提取文件内容。

问题是在某些服务器上,服务器不允许我的脚本从CURL返回中创建临时zip文件,因此我可以将其用于pclzip提取。

我想要做的是跳过临时zip文件的创建,只需使用原始CURL的字符串return和pclzip类进行提取。

我必须使用pclzip,因为有些服务器不允许使用默认的php zip类。

以下是用于从远程文件中获取内容的curl函数。

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

下面是我的pcl解压缩函数的副本,其中$ download_file是'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;

 }

}

感谢您的支持

1 个答案:

答案 0 :(得分:0)

如果您希望在文件上使用gzopen(),那么Data wrapper可能就是您要找的内容。请记住它是只读的,不可能写入。话虽这么说,我还没有遇到一个系统,它不允许我写入TMP目录(Linux中的TMP环境变量,Windows中的TMPDIR环境变量,我相信......)