0

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

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

我想要做的是跳过创建临时 zip 文件,只使用原始 CURL 的字符串返回和 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;

 }

}

感谢您的任何支持

4

1 回答 1

0

如果您想在gzopen()文件之外使用其他东西,那么数据包装器可能就是您要寻找的东西。请记住,它是只读的,不能写入。话虽如此,我还没有遇到一个不允许我在 TMP 目录中写入的系统(Linux 中的 TMP 环境变量,我相信 Windows 中的 TMPDIR 环境变量......)

于 2010-09-15T00:22:12.023 回答