使用PHP检查.tar中是否存在文件

时间:2014-06-19 09:12:19

标签: php file pear tar

在我的程序中,我需要从.tar文件中读取.png文件。

我正在使用pear Archive_Tar类(http://pear.php.net/package/Archive_Tar/redirected

如果我正在查找的文件存在,那么一切都很好,但如果它不在.tar文件中,那么函数会在30秒后结束。在类文档中,它声明如果找不到文件,它应该返回null ...

$tar = new Archive_Tar('path/to/mytar.tar');

$filePath = 'path/to/my/image/image.png';

$file = $tar->extractInString($filePath); // This works fine if the $filePath is correct
                                          // if the path to the file does not exists
                                          // the script will timeout after 30 seconds

var_dump($file);
return;

有关解决此问题或任何其他我可用于解决问题的库的建议吗?

1 个答案:

答案 0 :(得分:1)

listContent方法将返回指定存档中存在的所有文件(以及有关它们的其他信息)的数组。因此,如果您首先检查要提取的文件是否存在于该阵列中,则可以避免遇到的延迟。

下面的代码没有经过优化 - 对于多次调用来提取不同的文件,例如$ files数组只应填充一次 - 但这是一个很好的前进方法。

include "Archive/Tar.php";
$tar = new Archive_Tar('mytar.tar');

$filePath = 'path/to/my/image/image.png';

$contents = $tar->listContent();
$files = array();
foreach ($contents as $entry) {
    $files[] = $entry['filename'];
}

$exists = in_array($filePath, $files);
if ($exists) {
    $fileContent = $tar->extractInString($filePath);
    var_dump($fileContent);
} else {
    echo "File $filePath does not exist in archive.\n";
}