在新文件夹中创建网页时出现require_once函数错误

时间:2016-08-28 22:55:22

标签: php require-once

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

我正在尝试创建一个位于子文件夹而不是网站根目录的新网页,但是我遇到了错误。 我试图创建的网页是addons文件夹中的index.php网页。

我的文件结构是:

  

C:
  -wamp64
  --www(网站root)
  --global.php
  ---插件
  ---- index.php
  ----图像
  ---包括
  ----的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 /时的错误:

  

警告:require_once(C:\ wamp64 \ www \ addons / includes / init.php):失败   打开流:C:\ wamp64 \ www \ global.php中没有这样的文件或目录   第20行

     

致命错误:require_once():无法打开所需的错误   &#39; C:\ wamp64 \ WWW \附加元件/具备/的init.php&#39;   第20行的C:\ wamp64 \ www \ global.php中的(include_path =&#39;。; C:\ php \ pear&#39;)

以下是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');来解决该错误。

现在我收到了这个错误:

  

警告:require_once(C:\ wamp64 \ www \ addons / includes / class_core.php):无法打开流:第51行的C:\ wamp64 \ www \ includes \ init.php中没有此类文件或目录< / p>      

致命错误:require_once():无法打开所需&#39; C:\ wamp64 \ www \ addons / includes / class_core.php&#39;第51行的C:\ wamp64 \ www \ includes \ init.php中的(include_path =&#39;。; C:\ php \ pear&#39;)

Class_core.php存在于includes文件夹中。

init.php的第51行是:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

中执行此操作

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

2)将当前工作目录设置为根目录,可以在任何require_once之前使用index.php顶部的chdir('../')

3)在index.php中要求global.php require_once('global.php');

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