3

我找不到我需要的答案,所以我希望你明白我在追求什么。

我需要能够打开一个 tar.gz 文件(从远程网站),读取文件,并在我的网站上复制/替换这些文件。我一直在尝试这段代码(以及无数其他代码):

$zipFile= 'http://awebsite.com/file.tar.gz';
$dir = 'myfolder';
$zp = @gzopen($zipFile, "r");
$fp = @fopen($dir, "w");
while(!@gzeof($zp)) {$string = @gzread($zp, 4096); @fwrite($fp, $string, strlen($string));}
@gzclose($zp);
@fclose($fp);

所有人似乎都提出了不同类型的错误。我似乎能够读取 zip 文件,但实际上并没有将内容保存到我的网站。

感谢您提前提供任何帮助。

克里托

4

2 回答 2

2

除了解压,有效去除.gz后缀,还需要解析tar文件格式,有效去除.tar后缀。最简单的方法是简单地使用 tar 程序本身。将要拉取的内容通过管道传输到 tar,在要更新的目录中运行。Read the tar man page to see the appropriate options for how you want to update the files. (有很多选择。)

于 2012-04-30T02:27:15.193 回答
1

尝试这个:

<?php
$zipFile= 'http://awebsite.com/file.tar.gz';
$dir = 'myfolder';
$zp = @gzopen($zipFile, "r");
$fp = @fopen("temp.tar", "w");
while(!@gzeof($zp)) {$string = @gzread($zp, 4096); @fwrite($fp, $string, strlen($string));}
@gzclose($zp);
@fclose($fp);
exec('tar xf temp.tar --overwrite --directory='.$dir);
?>


更新:

这是一个不使用临时文件并tar自行处理 gzip 解压缩的解决方案:

<?php
$zipFile= 'http://awebsite.com/file.tar.gz';
$dir = 'myfolder';
$zp = @fopen($zipFile, "r");
$fp=popen('tar xzf - --overwrite --directory='.$dir,'w');
while(!@feof($zp)) {$string = @fread($zp, 4096); @fwrite($fp, $string, strlen($string));}
@fclose($zp);
@fclose($fp);
?>
于 2012-04-30T03:51:17.133 回答