gpt4 book ai didi

php - 是否可以将 phar 放入 phar 中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:32 25 4
gpt4 key购买 nike

首先要做的是:我的 Phars 确实在运行。我正在玩一点,我有以下场景:

  • 应用程序的 Phar(没有任何不规则之处)(application-phar)
  • 第二个 phar,例如用于图书馆。 (lib-phar)

我想把 lib-phar 放到 application-phar 中。并且只需要 application-phar。这样来自 application-phar 的 Bootstrap ( stub )从 lib-phar 加载 Bootstrap 。

这是我想出的最好的介绍资源: http://www.slideboom.com/presentations/26182/PHP-5.3-Part-3---Introducing-PHAR

我有以下内容:

lib-phar

$innerPharFile = $this->newFile('lib.phar');
$innerPhar = new Phar((string) $innerPharFile);
$innerPhar->addFromString('index.php', '<?php echo " inner index loaded"; ?>');
$innerPhar->setStub(file_get_contents('inner_stub.php'));

内部 stub

<?php
echo " inner stub loaded\n\n";

// Here is the problem: how do i execute index.php from inner, here?
var_dump(Phar::running (TRUE));

echo "\n";
__HALT_COMPILER();
?>

应用程序

$pharFile = $this->newFile('application.phar');
$phar = new Phar((string) $pharFile);
$phar->addFile($innerPharFile,'lib.phar');
$phar->addFromString('index.php', '<?php echo "outer index loaded"; ?>');
$phar->setStub(file_get_contents('outer-stub.php'));

外 stub

<?php
echo "outer stub loaded\n";

$inner_phar = 'phar://'.__FILE__.'/lib.phar';
require $inner_phar;

require 'phar://'.__FILE__.'/index.php';
__HALT_COMPILER();
?>

主要

php -f 'application.phar'

输出:

outer stub loaded

inner stub loaded
string(xx) "phar://full/path/to/application.phar"

outer index loaded

这么久,这么好,但是...如何执行内部 index.php?我认为问题是,我想做一些非常困惑的事情:

 require 'phar://phar://full/path/to/application.phar/lib.phar';

这是可读的形式::

 require 'phar://  
phar://full/path/to/application.phar
/lib.phar';

因为我的 lib.phar 在 application.phar 中。所以我想我需要一个 wrapper 。所以也许 PHAR-Extension 不是为此而制作的。正如我们所见,第二个 stub 被调用,但是神奇的 __FILE__ 常量(以及 Phar::running(TRUE|FALSE) 在这里设置错误。

你有什么想法吗?或者做了类似的设置?

我当然知道其他选择:

  • 对 lib + application 使用一个 stub 和一个 phar
  • 将 lib.phar 解压缩到一个临时位置,并使用 Phar::load() 从那里获取它

我真的很喜欢考虑这种嵌套设置。也许你有另一个好主意?

最好的问候菲利普

最佳答案

您使用 phar 的想法看起来很棒并且也嵌套了它。虽然我看到你解释了同样的问题。

在 Java 世界中,他们使用 jar 和 war,jar 用于库,而 war 用于应用程序,它包含所有 jar 并在执行之前将其解压缩到 Web 服务器上,最终以包含所有 jar 的 lib 文件夹结束。

phar 在 jar 从 Java 之后出现在 PHP 中,所以他们绝对应该尝试遵循类似的东西。

phar 的目的是在其他一些应用程序中再次重用该 phar,使其成为其他 phar 的一部分将使它不容易被其他应用程序访问。所以我更喜欢使用 phpmaven

使用 phpmaven 构建库项目并发布到 maven 服务器。使用 phpmaven 并构建依赖于所有库项目的应用程序项目

您获得了包含所有库 phar 的构建,您甚至可以使用 onestub 从中创建一个 phar,正如您使用 maven 所解释的那样,这更容易理解项目及其依赖项。

关于php - 是否可以将 phar 放入 phar 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7991708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com