我正在构建一个系统供人们在PHP上传.tar(和.tar.gz,.tar.bz2,.zip等)文件。上传文件很好,但我想列出归档后包含在档案中的文件。
有人可以推荐一个可以读取文件档案的好的PHP库吗?
我在Pear上发现了File_Archive,但是几年后它还没有更新。 ZipArchive非常适合.zip文件,但我需要能够处理更多文件类型的东西。
更新我在RHEL6,PHP 5.2和Apache 2.2上运行。
答案 0 :(得分:27)
您可以使用PharData
类:
// Example: list files
$archive = new PharData('/some/file.tar.gz');
foreach($archive as $file) {
echo "$file\n";
}
这甚至适用于phar://
流包装器:
$list = scandir('phar:///some/file.tar.gz');
$fd = fopen('phar:///some/file.tar.gz/some/file/in/the/archive', 'r');
$contents = file_get_contents('phar:///some/file.tar.gz/some/file/in/the/archive');
如果您没有Phar,请查看PHP-only implementation或the pecl extension。
答案 1 :(得分:4)
以下代码读取 .gz zip文件
中的文件 <?php
$z = gzopen('zipfile.gz','r') or die("can't open: $php_errormsg");
$string = '';
while ($line = gzgets($z,1024)) {
$string .= $line;
}
echo $string;
gzclose($z) or die("can't close: $php_errormsg");
?>
注意您需要启用php的zip扩展才能使此代码正常工作。
答案 2 :(得分:3)
不要试图自己构建它。使用像http://pear.php.net/package/Archive_Tar这样的现有类来为您处理。
答案 3 :(得分:2)
使用zlib扩展名
答案 4 :(得分:2)
我不认为第一个答案有效。或者它只对我不起作用。当你预先知道它时,你无法读取文件内容。我在下面提供我的工作代码。
$fh = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('phar:///dir/file.tar.gz'),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($fh as $splFileInfo) {
echo file_get_contents($splFileInfo->getPathname());
}
这适用于gz,zip,tar和bz文件。