我正在构建一个系统,供人们用 PHP 上传 .tar(以及 .tar.gz、.tar.bz2、.zip 等)文件。上传文件没问题,但我想在上传后列出存档中包含的文件。
有人可以推荐一个好的可以读取文件档案的PHP库吗?
我在 Pear 上找到了 File_Archive,但它已经几年没有更新了。 ZipArchive 对于 .zip 文件非常有用,但我需要可以处理更多文件类型的东西。
更新 我正在 RHEL6、PHP 5.2 和 Apache 2.2 上运行。
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');
不要尝试自己构建这个。使用现有的类(如 http://pear.php.net/package/Archive_Tar)来为您处理该问题。
下面的代码读取 .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 扩展名才能使此代码正常工作。
我认为第一个答案不起作用。或者它只是对我不起作用。 foreach 时无法读取文件内容。我在下面给出了我的工作代码。
$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 文件。
使用zlib扩展
坚持使用原始 tar 库(如果预安装)怎么样?
echo shell_exec('tar -tf <path/to/file.tgz>');// lists the contents of a Gzipped Tarball