从.phar文件归档中提取文件

60

关于phar文件,我错过了一个重要的东西。 我正在安装需要phpunit、pdepend和其他依赖项的项目。 我获取了它们作为.phar文件。 但是,我不能使用命令行工具(php命令)从中提取文件。 我在网上搜索这个问题,但没有找到真正回答这个问题的东西。 有人可以帮忙吗?


1
为什么要提取它们?你可以直接使用它们作为phar,参见:http://sebastian-bergmann.de/archives/924-Using-PHPUnit-from-a-PHP-Archive-PHAR.html - Dennis Haarbrink
3
上面评论中的链接指向一个404未找到页面。 - Kmeixner
7个回答

99

在 @pozs 的回答基础上,你实际上可以使用 PharData->extractTo 来完成简单的一行命令:

php -r '$phar = new Phar("phar-file.phar"); $phar->extractTo("./directory");'

1
在我的Windows PHP 5.6上无法工作。命令行代码中出现了“Parse error: syntax error, unexpected ''$phar' (T_ENCAPSED_AND_WHITESPACE) on line 1”错误。 - Oliboy50
4
'" 颠倒一下,变成 php -r "$phar = new Phar('phar-file.phar'); $phar->extractTo('./directory');". 可能与 Windows 相关的引号问题。 - Xenos
从PHP 5.4开始,你甚至可以更简短地写成:(new Phar("phar-file.phar"))->extractTo("./directory"); - Gras Double
为了解决phar只读错误,我执行了以下命令: php -d phar.readonly=Off -r '(new Phar("phar-file.phar"))->extractTo("./directory");' - Scott P.

72

我不确定这是否是新功能,但在 PHP 5.4.16 中可以运行:

phar extract -f %some phar file%

Phar 文件会相对于当前的工作目录进行提取。


3
可以在 PHP 5.3.3 中使用。 - ellipse-of-uncertainty
1
Windows PHP 5.6需要phar.phar提取 -f %某个phar文件%。 - Magicianeer
@Magicianeer 这可能只是 phar 命令在您的环境中安装的方式,例如即使在 Windows 中,您也应该能够将 phar.phar 重命名为 phar,然后正常的命令就可以工作了。 - lyte

22

1
请注意,它似乎无法很好地处理已经使用gzip压缩的Phar档案(http://www.php.net/manual/en/pharfileinfo.compress.php)。至少在Windows上对我来说是这样的,但作为开发环境,它有gzip,bz2等工具,所以应该能够提取它们,但结果却是混乱的(甚至不像有效的.gz文件)。然而,目录结构是正确的。 - Camilo Martin

14

PhpStorm IDE可以用于查看phar存档的内容。


1
在我的情况下不起作用。我正在使用最新的当前版本(我相信是2016.3),但我无法打开phar文件。 - The Onin
有时候你需要重新启动PhpStorm来获取文件索引。 - ya.teck
1
也尝试过那个方法,但没有用。 - The Onin

8

这个网站可以轻松地将 .phar 文件转换为 .zip 文件。

试一下吧。


4
如果您只想使用它,您应该将其包含为phar:///path/to/myphar.phar/file.php
但是如果您真的想拆包它,请参考PharData类 - 没有已知的(内部)命令行提取方式,但您可以编写一个脚本来实现。

3

PHP也有提取phar归档文件的功能,但是文件会保留当前的压缩形式。为了正确地提取归档文件,需要先将其转换为未压缩形式,然后再进行提取:

<?php
$phar = new Phar('Someclass.phar');
$phar2 = $phar->convertToExecutable (Phar::TAR,Phar::NONE); // Convert to an uncompressed tar archive
$phar2->extractTo('/some/path/'); // Extract all files

这将提供给您所有未经压缩的文件!

2
要使用CLI提取只读的phar档案,请使用以下命令:php -dphar.readonly=0 extract.phpextract.php文件包含上述代码。 - Alin Razvan
4
php -dphar.readonly=0 -r '(new Phar("archive.phar"))->convertToExecutable(Phar::TAR,Phar::NONE)->extractTo("./output");' - Alex Barker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接