包含包含文件的php文件

包含包含文件的php文件,php,include,Php,Include,下面是目录结构 /global.php /包括/class_bootstrap.php /包括/init.php /plugins/myplugin.php 下面是这些文件中的代码 /start.php require('./includes/class_bootstrap.php'); define('CWD', (($getcwd = getcwd()) ? $getcwd : '.')); require_once(CWD . '/includes/init.php'); requ

下面是目录结构

  • /global.php
  • /包括/class_bootstrap.php
  • /包括/init.php
  • /plugins/myplugin.php
下面是这些文件中的代码 /start.php

require('./includes/class_bootstrap.php');
define('CWD', (($getcwd = getcwd()) ? $getcwd : '.'));
require_once(CWD . '/includes/init.php');
require_once(dirname(__FILE__).'../global.php');
/includes/class_bootstrap.php

require('./includes/class_bootstrap.php');
define('CWD', (($getcwd = getcwd()) ? $getcwd : '.'));
require_once(CWD . '/includes/init.php');
require_once(dirname(__FILE__).'../global.php');
/plugins/myplugin.php

require('./includes/class_bootstrap.php');
define('CWD', (($getcwd = getcwd()) ? $getcwd : '.'));
require_once(CWD . '/includes/init.php');
require_once(dirname(__FILE__).'../global.php');
据我所知,问题出在class_bootstrap.php文件中,因为它为CWD生成了错误的路径 以下是错误:

警告:require_once(C:/wamp/www/vb4/plugins/includes/init.php)[function.require once]: 未能打开流:第35行的C:/wamp/www/vb4/global.php中没有此类文件或目录

如您所见,“C:/wamp/www/vb4/plugins/includes/init.php”是错误的路径

主要问题是,我只能编辑myplugin.php文件,其他文件是CMS核心文件,不应更改


如何解决此问题?

如果需要确定一组脚本的基本路径,则不应依赖“当前工作目录”。这可能会从执行环境更改为执行环境

相反,应基于已知路径

/includes/class_bootstrap.php
知道它将位于基本路径所在的下一个目录,因此它可以执行以下操作:

define('CWD', realpath(dirname(__FILE__) . '/../') );
获取传递的字符串中给定的目录名。如果
\uuuu FILE\uuuuuuuu
返回
C:/wamp/www/vb4/plugins/includes/class\u bootstrap.php
,则
dirname
将返回
C:/wamp/www/vb4/plugins/includes
。然后我们将
/../
附加到它,然后调用,这将把相对的
转换成一个真实的目录:
C:/wamp/www/vb4/plugins

从那时起,
CWD
将按照您的预期运行。您可以
要求一次CWD/includes/init.php'
,它将正确解析为
C:/wamp/www/vb4/plugins/includes/init.php


此外,这听起来可能很愚蠢,但“vb4”可能指的是vBulletin 4,在这种情况下,您的插件可能已经可以访问它公开的配置信息,包括路径等方便的东西。这可能会使整个练习变得不必要。我故意对vB一无所知,否则我会告诉你他们的开发文档

/plugins/myplugin.php文件是一个单独的文件,我想连接CMS函数和变量,包括我前面提到的global.phpAs——
/includes/class_bootstrap.php
中的代码是错误的。您必须将其更正为不使用
getcwd()
,才能使其正常工作
getcwd()
不是确定文件路径的可靠方法——正如您所发现的,它可能会更改为意外值。如果该代码不是您的,就这样吧——无论如何都要更改它以使其正常工作,并向上游代码提供程序提交错误报告。(如果是vB,我完全不奇怪他们会这么做……不经思考……就像这样。)谢谢Charles,是的,我想编辑class_bootstrap.php文件,但这对我的插件来说不是一个好的未来,是的,我肯定会做错误报告。chdir()会有帮助,但我不喜欢:)是的,
chdir
会被归入我的错误列表中“如果您正在使用它,则可能有问题”函数。