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

时间:2012-04-30 01:57:06

标签: php gzip fopen fwrite

我找不到我需要的答案,所以我希望你能理解我所追求的目标。

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

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

克利托

2 个答案:

答案 0 :(得分:3)

除了解压缩,有效删除.gz后缀外,还需要解释tar文件格式,有效删除.tar后缀。最简单的方法是简单地使用tar程序本身。将您要提取的内容传递给tar,在要更新的目录中运行。阅读tar手册页以查看有关如何更新文件的相应选项。 (有很多选择。)

答案 1 :(得分: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);
?>