我正在使用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;
}
}
感谢您的支持
答案 0 :(得分:0)
如果您希望在文件上使用gzopen()
,那么Data wrapper可能就是您要找的内容。请记住它是只读的,不可能写入。话虽这么说,我还没有遇到一个系统,它不允许我写入TMP目录(Linux中的TMP环境变量,Windows中的TMPDIR环境变量,我相信......)