【问题标题】:How to create a Phar archive without index?如何创建没有索引的 Phar 存档?
【发布时间】:2018-05-01 03:39:11
【问题描述】:

我正在尝试使用我的一个库制作 Phar 存档。 lib 只是一堆组织成文件夹和子文件夹的类。这里根本没有 index.php,只是一个静态 Config 类来调用来启动自动加载器。

无论如何,我建立了一个这样的存档:

$phar = new Phar(__DIR__ . '/lis.phar',0,'lib.phar');
$phar->buildFromDirectory(__DIR__ . '/class','/\.php$');
$phar->stopBuffering();

之后我尝试像这样使用 phar:

require('lib.phar');
Config::register(); // Config is in the phar

但我收到以下错误:

警告:包括(phar://D:\wamp\www_test\phar\lib.phar/index.php) [function.include]:无法打开流:phar 错误:“index.php”是 不是 phar "D:/wamp/www/_test/phar/lib.phar" 中的文件 D:\wamp\www_test\phar\lib.phar 在第 9 行

如何制作一个没有任何 index.php 文件的 phar 存档?事实上,我只需要将存档作为我的文件的容器,无需自动执行任何操作。

【问题讨论】:

  • 我认为您没有显示添加存根的代码。运行 {{$phar->getStub();}} 以查看您的存根代码。
  • 前面的代码是我用来创建 phar 的全部代码。我不使用任何 *stub() 方法。
  • 您是否按照我的建议尝试检查您是否有存根代码?

标签: php phar


【解决方案1】:

首先,我认为你必须在stopBuffering() 之前startBuffering()。我可能会认为buildFromDirectory 在内部为您执行此操作。 您不需要为“密封”档案做stopBuffering()。它“即时”准备就绪。

第二个:您可以像这样观看 defaultStub(在您的代码中隐式使用):

$phar->setDefaultStub();
var_dump($phar->getStub());

它有点神秘,但你会弄明白的。它确实检查 phar 流包装器支持(在 5.3 中),如果没有,它会将内容提取到临时文件,然后执行 Phar::START 常量文件 - 默认情况下为“index.php”。当然,它会执行 Phar::interceptFileFuncs() 并设置包含路径,这使得 phar 工作“神奇”。但是您的问题听起来像您只需要一个库的存档。所以你最好使用“PharData”类。还没有尝试过,但是文档是这么说的。

【讨论】:

    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2011-11-28
    • 2013-10-31
    相关资源
    最近更新 更多