如何以兼容的方式包含 PHP 文件以使用和不使用 Phar 进行打包?

Pat*_*ert 5 php require phar

给定具有以下结构的 PHP 应用程序:

/
    lib/
        mylib.php
    web/
        index.php // includes "mylib.php" with: require_once __DIR__ . "/../lib/mylib.php"
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用相同的源代码库同时涵盖以下情况:

  1. No Phar:能够按原样使用应用程序,DocumentRoot指向web/并将所有请求重定向到index.php
  2. Minimal Phar:能够生成仅包含web/index.php的 phar并将保存为:web/application-minimal.phar
  3. Full Phar:能够生成一个包含lib目录和web/index.php的内容的 phar ,并将保存为:web/application-full.phar

对于 phar 文件,所有请求都将重定向到 phar 文件本身。

是否有可能实现所有这些用例而不必更改 *require_once*?

我尝试了不同的方法(相对/绝对)来包含来自 *web/index.php" 的lib/mylib.php ",并尝试使用Phar::mount() 的一些技巧。我的尝试都没有成功。

cwe*_*ske 1

只需依赖您的包含路径即可。

不要这样做:

require_once __DIR__ . "/../lib/mylib.php";
Run Code Online (Sandbox Code Playgroud)

但:

require_once "mylib.php";
Run Code Online (Sandbox Code Playgroud)

并在脚本的开头设置包含路径:

set_include_path(__DIR__ . '/../lib/' . PATH_SEPARATOR . get_include_path());
Run Code Online (Sandbox Code Playgroud)