我的代码中有以下行,它在 PHP-5.6 中运行良好,但在 PHP-7.1 中运行良好。
require_once '/app/plugin.php';
当我将其更改为以下之一时,它是否适用于 PHP-7.1?
require_once './app/plugin.php';
或者
require_once 'app/plugin.php';
第一行代码有什么问题?
第一行代码有什么问题?
那么首先让我们注意它适用于 PHP 5.6(在您的设置中),而不适用于 7.x。所以不能完全错,只是说。
甚至你的报告也让我感到惊讶——以前从未经历过——这可能已经解释了一点并导致了解决方案。
即使在 PHP 5.6 中,使用引用 PHP 脚本本身目录的所谓魔术常量也是完全安全的。 __DIR__
这很方便,尤其是。对于相对包含/需要路径。
让我们举个例子:
require_once '/app/plugin.php';
是您当前的 (PHP 5.6) 代码。让我们利用__DIR__
:
require_once __DIR__ . '/app/plugin.php';
如果您可以确认它在 PHP 5.6 上工作,我的理解是,这个修改后的代码应该可以移植到 PHP 7 及更高版本(PHP 5.6 之后的下一个版本),因为它始终包含to-require脚本__DIR__
的绝对(真实)路径,所以您可以使用它来安全地表达与其他文件的关系。
作为页边空白的注释:
require_once
也与realpath相关(如__DIR__
),因此这是兼容的(在文件系统stat调用中只有一些开销,但我确信在此答案的上下文中可以忽略它们)。
再次:
第一行代码有什么问题?
至少在 PHP 7 及更高版本中,分辨率似乎对当前工作目录是正确的,这意味着 PHP 7+ 在绝对路径中查找文件:
/app/plugin.php
该文件很可能在该框中不存在。/
是文件系统的根目录,任何以斜杠 ( ) 开头的/
路径都是绝对路径。
也许(正如我个人从未经历过的那样)PHP 5.6可能是罪魁祸首,没有遵守关于什么构成和绝对或相对路径(前导斜杠)的 POSIX/UNIX/LINUX 约定。
我个人的建议:使用标准,前导斜杠 = 绝对路径。__DIR__
为您在 PHP 中的利益使用。
我认为您在 PHP5 和 PHP7 中设置了不同的包含路径。运行get_include_path()
并比较两个 PHP 版本的结果。