我的代码中有下面这一行,它在PHP-5.6中工作得很好,但在PHP-7.1中就不行。
require_once '/app/plugin.php';当我将其更改为以下选项之一时,它是否适用于PHP-7.1?
require_once './app/plugin.php';或
require_once 'app/plugin.php';代码的第一行出了什么问题?
发布于 2021-07-30 22:16:31
代码的第一行出了什么问题?
首先,让我们注意,它适用于PHP5.6(在您的设置中),而不适用于7.x。所以这不可能是完全错误的,只是说。
甚至你的报告也让我大吃一惊--以前从未经历过--这可能已经解释了一点,并导致了一个解决方案。
即使在PHP5.6中,使用所谓的魔力常数__DIR__也是非常安全的,它指的是PHP脚本本身的目录。
这很方便,尤指。用于相对包含/要求路径。
让我们举个例子:
require_once '/app/plugin.php';是您当前的(PHP 5.6)代码。让我们利用__DIR__
require_once __DIR__ . '/app/plugin.php';如果你可以确认它可以在PHP5.6上工作,我的理解是,这个修改后的代码应该可以移植到PHP7和更高版本(PHP5.6之后的下一个版本),因为__DIR__总是包含to-require脚本的绝对(,真实)路径,所以你可以使用它来安全地表达与其他文件的关系。
在页边空白处注意:require_once也与
相关(像
__DIR__一样),所以这是兼容的(只有一些文件系统状态调用的开销,但我确信在本答案的上下文中可以忽略它们)。
再一次:
代码的第一行出了什么问题?
至少在PHP7和更高版本中,看起来对当前工作目录的解析是正确的,这意味着PHP 7+在绝对路径中查找文件:
/app/plugin.php该文件很可能不存在于该盒子上。/是文件系统的根目录,任何以斜杠(/)开头的路径都是绝对路径。
也许(我个人从未经历过这种情况) PHP 5.6可能是罪魁祸首,没有遵守POSIX/UNIX/LINUX关于什么是组成和绝对路径或相对路径(前导斜杠)的约定。
我个人的建议是:使用标准的前导斜杠=绝对路径。在PHP中使用__DIR__为您带来好处。
发布于 2017-02-22 18:41:45
我认为您在PHP5和PHP7中设置了不同的包含路径。运行get_include_path()并比较两个版本的结果。
https://stackoverflow.com/questions/42388744
复制相似问题