【问题标题】:Extracting files from .phar archive从 .phar 档案中提取文件
【发布时间】:2012-10-11 10:24:31
【问题描述】:

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

【问题讨论】:

  • 为什么要提取它们?您可以直接将它们用作 phar,请参阅:sebastian-bergmann.de/archives/…
  • 上面评论中的链接指向一个 404 not found 页面。

标签: php phar


【解决方案1】:

扩展@pozs 的答案,您实际上可以在一个简单的单行中使用PharData->extractTo

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

【讨论】:

  • 在 Windows PHP 5.6 上对我不起作用 Parse error: syntax error, unexpected ''$phar' (T_ENCAPSED_AND_WHITESPACE) in Command line code on line 1
  • @Oliboy50 将'" 反转为php -r "$phar = new Phar('phar-file.phar'); $phar->extractTo('./directory');"。可能是与 Windows 相关的引号的东西。
  • 从 PHP 5.4 开始,您甚至可以缩短它:(new Phar("phar-file.phar"))->extractTo("./directory");
  • 修复 phar readonly 错误我做了php -d phar.readonly=Off -r '(new Phar("phar-file.phar"))->extractTo("./directory");'
【解决方案2】:

不确定它是否是新的,但在 PHP 5.4.16 下可以:

phar extract -f %some phar file%

phar 是相对于您当前的工作目录提取的。

【讨论】:

  • 也适用于 PHP 5.3.3
  • windows php 5.6 需要 phar.phar extract -f %some phar file%
  • @Magicianeer 这可能只是 phar 命令在您的环境中的安装方式,例如,即使在 Windows 中,您也应该能够将 phar.phar 重命名为 phar,然后正常的命令就可以工作了。
【解决方案3】:

是的,这个库可以做到:https://github.com/koto/phar-util

phar-extract library.phar 输出目录

【讨论】:

  • 请注意,它似乎不适用于 Phar 档案 whose contents were gzipped。至少在 Windows 上对我而言,但作为开发设置,它具有 gzip、bz2 等,因此它应该能够提取它们,但结果被破坏(并且似乎甚至不像 .gz 文件那样有效) .不过,目录结构是正确的。
【解决方案4】:

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

【讨论】:

  • 在我的情况下不起作用。我正在使用最新的当前版本(我相信是 2016.3),我无法打开 phar 文件。
  • 有时你需要重启 PhpStorm 才能让文件被索引。
  • 也试过了,没用。
【解决方案5】:

This site 轻松将 .phar 文件转换为 .zip 文件。

试试看。

【讨论】:

    【解决方案6】:

    如果你只想使用它,你应该包含phar:///path/to/myphar.phar/file.php

    但如果你真的想解压它,请查看PharData 类 - 在命令行中没有已知的(内部)提取,但你可以为此编写一个脚本。

    【讨论】:

      【解决方案7】:

      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
      

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

      【讨论】:

      • 使用 cli 提取只读 phar 档案 > php -dphar.readonly=0 extract.php extract.php 包含上面的代码。
      • php -dphar.readonly=0 -r '(new Phar("archive.phar"))-&gt;convertToExecutable(Phar::TAR,Phar::NONE)-&gt;extractTo("./output");'
      猜你喜欢
      • 2015-08-10
      • 2017-09-06
      • 2017-12-18
      • 2021-03-04
      • 2010-10-01
      • 2014-12-30
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      相关资源
      最近更新 更多