首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >require_once可以在PHP5.6中运行,但不能在PHP7中运行

require_once可以在PHP5.6中运行,但不能在PHP7中运行
EN

Stack Overflow用户
提问于 2017-02-22 18:34:00
回答 2查看 9.8K关注 0票数 1

我的代码中有下面这一行,它在PHP-5.6中工作得很好,但在PHP-7.1中就不行。

代码语言:javascript
复制
require_once '/app/plugin.php';

当我将其更改为以下选项之一时,它是否适用于PHP-7.1?

代码语言:javascript
复制
require_once './app/plugin.php';

代码语言:javascript
复制
require_once 'app/plugin.php';

代码的第一行出了什么问题?

EN

回答 2

Stack Overflow用户

发布于 2021-07-30 22:16:31

代码的第一行出了什么问题?

首先,让我们注意,它适用于PHP5.6(在您的设置中),而不适用于7.x。所以这不可能是完全错误的,只是说。

甚至你的报告也让我大吃一惊--以前从未经历过--这可能已经解释了一点,并导致了一个解决方案。

即使在PHP5.6中,使用所谓的魔力常数__DIR__也是非常安全的,它指的是PHP脚本本身的目录。

这很方便,尤指。用于相对包含/要求路径。

让我们举个例子:

代码语言:javascript
复制
require_once '/app/plugin.php';

是您当前的(PHP 5.6)代码。让我们利用__DIR__

代码语言:javascript
复制
require_once __DIR__ . '/app/plugin.php';

如果你可以确认它可以在PHP5.6上工作,我的理解是,这个修改后的代码应该可以移植到PHP7和更高版本(PHP5.6之后的下一个版本),因为__DIR__总是包含to-require脚本的绝对(,真实)路径,所以你可以使用它来安全地表达与其他文件的关系。

在页边空白处注意:require_once也与

相关(像__DIR__一样),所以这是兼容的(只有一些文件系统状态调用的开销,但我确信在本答案的上下文中可以忽略它们)。

再一次:

代码的第一行出了什么问题?

至少在PHP7和更高版本中,看起来对当前工作目录的解析是正确的,这意味着PHP 7+在绝对路径中查找文件:

代码语言:javascript
复制
/app/plugin.php

该文件很可能不存在于该盒子上。/是文件系统的根目录,任何以斜杠(/)开头的路径都是绝对路径。

也许(我个人从未经历过这种情况) PHP 5.6可能是罪魁祸首,没有遵守POSIX/UNIX/LINUX关于什么是组成和绝对路径或相对路径(前导斜杠)的约定。

我个人的建议是:使用标准的前导斜杠=绝对路径。在PHP中使用__DIR__为您带来好处。

票数 1
EN

Stack Overflow用户

发布于 2017-02-22 18:41:45

我认为您在PHP5和PHP7中设置了不同的包含路径。运行get_include_path()并比较两个版本的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42388744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档