打开.gz文件并读取/替换


Open a .gz file and read/replace

我找不到我需要的答案,所以我希望你能理解我想要的是什么。

我需要能够打开 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文件,但实际上并没有将内容保存到我的网站。

提前感谢您的任何帮助。

克里托

除了解压,有效去掉.gz后缀,还需要解读tar文件格式,有效去掉.tar后缀。 最简单的方法是简单地使用 tar 程序本身。 将要拉取的内容通过管道传输到 tar,在要更新的目录中运行。 阅读 tar 手册页,了解有关如何更新文件的相应选项。 (有很多选择。

试试这个:

<?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);
?>