require_once 在新文件夹中创建网页时功能错误

require_once function error when creating webpage in new folder

我是 运行 wamp64,在本地托管我的网站(这是一个 vbulletin 论坛,用于测试是否有帮助)。

我正在尝试创建一个位于子文件夹而不是网站根目录中的新网页,但是我 运行 出错了。 我要创建的网页是插件文件夹中的 index.php 网页。

我的文件结构是:

C:
-wamp64
--www (website root)
--global.php
---addons
----index.php
----images
---includes
----config.php

我用于插件的代码 - index.php 是:

    <?php 
          error_reporting(E_ALL & ~E_NOTICE); 

       define('NO_REGISTER_GLOBALS', 1); 
       define('THIS_SCRIPT', 'addons'); 

       $phrasegroups = array(); 

       $specialtemplates = array(); 

       $globaltemplates = array( 
       'ADDONSTESTPAGE' 
       ); 

       $actiontemplates = array(); 

       require_once('/../global.php');

       eval('$navbar = "' . fetch_template('navbar') . '";'); 
       eval('print_output("' . fetch_template('ADDONSTESTPAGE') . '");'); 

   ?> 

当我在 www 文件夹中创建一个新页面时,它工作得很好(除了我使用 require_once('/global.php'); 而不是 require_once('/../global.php');。 但是,因为这是在一个子文件夹中,我 运行 进入以下错误,因为 global.php 需要的文件一旦在它们内部具有自己的 require_once 函数并且这些文件具有他们自己的 require_once 内部功能等

这是我现在去 localhost/addons/:

时遇到的错误

Warning: require_once(C:\wamp64\www\addons/includes/init.php): failed to open stream: No such file or directory in C:\wamp64\www\global.php on line 20

Fatal error: require_once(): Failed opening required 'C:\wamp64\www\addons/includes/init.php' (include_path='.;C:\php\pear') in C:\wamp64\www\global.php on line 20

这是 global.php 的第 13-20 行:

// identify where we are
define('VB_AREA', 'Forum');

define('CWD', (($getcwd = getcwd()) ? $getcwd : '.'));

//     #############################################################################
// Start initialisation
require_once(CWD . '/includes/init.php');

如何在不弄乱使用 global.php 文件的其他文件的情况下解决这个问题?我听说 realpath 是一个常见的解决方案,但我是 php 的新手,不确定如何在这种情况下使用它。

感谢所有帮助,非常感谢,如果您需要更多信息,请随时询问!

好的,我可以通过将 require_once(CWD . '/includes/init.php'); 更改为 require_once(__DIR__ . '/includes/init.php'); 来解决该错误。

现在我收到这个错误:

Warning: require_once(C:\wamp64\www\addons/includes/class_core.php): failed to open stream: No such file or directory in C:\wamp64\www\includes\init.php on line 51

Fatal error: require_once(): Failed opening required 'C:\wamp64\www\addons/includes/class_core.php' (include_path='.;C:\php\pear') in C:\wamp64\www\includes\init.php on line 51

Class_core.php 存在于包含文件夹中。

init.php 的第 51 行是:

require_once(CWD . '/includes/class_core.php');

我尝试将其更改为 require_once(__DIR__ . '/includes/class_core.php'); 但它破坏了整个网站。

global.php 假设服务器进程是来自主 C:/wamp64/www 目录的 运行 但因为你是来自插件文件夹的 运行,CWD 将被设置为C:/wamp64/www/addon ,因此出现所有错误。

要解决此问题,请在 index.php

1) 恢复您在 global.php 和 init.php 等中对 VBulletin 所做的所有更改...

2) 将你当前的工作目录设置为根目录,你可以在 index.php 顶部的任何 require_once

之前使用 chdir('../')

3) 在你的 index.php require_once('global.php');

中需要 global.php

步骤 2 有效,因为现在 php 现在将根目录视为工作目录。