包含一个包含文件的php文件

时间:2011-04-10 06:57:15

标签: php include

这是目录结构

  • /global.php
  • /includes/class_bootstrap.php
  • /includes/init.php
  • /plugins/myplugin.php

以下是这些文件中的代码

/start.php

require('./includes/class_bootstrap.php');

/includes/class_bootstrap.php

define('CWD', (($getcwd = getcwd()) ? $getcwd : '.'));
require_once(CWD . '/includes/init.php');

/plugins/myplugin.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核心文件,不应更改。

如何解决此问题?

1 个答案:

答案 0 :(得分:6)

如果您需要确定一组脚本的基本路径,不应该依赖于“当前工作目录”。这可以从执行环境变为执行环境。

相反,将其建立在已知路径上。

/includes/class_bootstrap.php 知道它将是基本路径所在的目录,所以它可以这样做:

define('CWD', realpath(dirname(__FILE__) . '/../') );

dirname获取传递的字符串中给出的目录名称。如果__FILE__返回C:/wamp/www/vb4/plugins/includes/class_bootstrap.php,则dirname将返回C:/wamp/www/vb4/plugins/includes。然后我们将/../添加到其中,然后调用realpath,将相对..转换为真实目录:C:/wamp/www/vb4/plugins

呼。

从那时起,CWD将按预期运作。您可require_once CWD . '/includes/init.php',它会正确解析为C:/wamp/www/vb4/plugins/includes/init.php

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