加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – set_include_path()无法使用相对require()

发布时间:2020-12-13 16:59:53 所属栏目:PHP教程 来源:网络整理
导读:我“需要”一个具有自己的require()调用的文件.但是调用set_include_path()不能使用require()中的相对路径.不幸的是,我无法控制所需的代码文件. C:/myapp/index.php – 我的代码 set_include_path(get_include_path() . ';C:/app/subfolder');require('C:/a
我“需要”一个具有自己的require()调用的文件.但是调用set_include_path()不能使用require()中的相对路径.不幸的是,我无法控制所需的代码文件.

C:/myapp/index.php – 我的代码

set_include_path(get_include_path() . ';C:/app/subfolder');
require('C:/app/subfolder/index.php');

C:/app/subfolder/index.php – 第三方代码(无控件)

require('../config.php'); // Require file located at C:/app/config.php

结果:

无法打开所需的’../config.php'(include_path =’.; C:/ app / subfolder’)

即使C:/ app /子文件夹位于包含路径中,这也不起作用.我希望../config.php是C:/ app / subfolder /../ config.php.也许我没有正确地做到这一点.

在这种情况下,C:/app/subfolder/index.php最初从未打算包含在另一个PHP文件中.但是,我正在构建代码,我希望C:/app/subfolder/index.php仍然能够要求/包含文件,就好像它从未离开过它的位置一样.

我已经读过使用dirname()或__DIR__修复了require()中的相对路径问题,但是我无法更改C:/app/subfolder/index.php中的代码.

有没有办法让这项工作?

解决方法

您的问题与set_include_path()范围无关.您的致命错误也会显示实际的include_path,您可以在其中看到添加的路径.

问题是../调用不会查看include_path,而是查看当前工作目录.通过HTTP URL调用脚本很难理解,但如果可以通过命令行调用脚本则更清楚.

如果您在/usr/angelina/myproject/subfolder/index.php中编写此脚本(注意:在此解释性示例中,我将使用Unix filePath /命令):

set_include_path( '/usr/angelina/myproject/subfolder' );
require( '../config.php' );

然后,在终端中,你写道:

cd /usr/angelina/myproject/subfolder
php index.php

脚本将被执行正常.但如果你写:

cd /usr/angelina/myproject
php subfolder/index.php

即使在您调用的同一脚本中设置了包含路径,脚本也会失败.

上面的例子解释你的问题不是包含路径,而是当前的工作目录.要解决您的问题,您必须使用chdir()更改当前目录.

所以,在C:/myapp/index.php中你必须写:

chdir( 'C:/app/subfolder' );
require( 'C:/app/subfolder/index.php' );

你的脚本将起作用(或者,至少:在我身边它的工作……)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读