PHP require在根文件夹中不起作用

时间:2016-03-20 12:20:33

标签: php require

当用户单击表单上的提交按钮时,我使用此文件来要求文件。此代码位于blog.php中。当我在文件夹/ includes /中有此文件时,代码工作正常,但我希望此文件位于根文件夹中。当我在根文件夹中添加它时,我收到此错误:

  

警告:require(../ includes / addbloguser.php):无法打开流:   在C:\ xampp \ htdocs \ Pentaslash \ blog.php上没有这样的文件或目录   第27行

     

致命错误:require():需要打开失败   ' ../包括/ addbloguser.php' (include_path ='。; C:\ xampp \ php \ PEAR')in   第27行的C:\ xampp \ htdocs \ test \ blog.php

<?php
    if(isset($_POST["submit"])){

      require '../includes/addbloguser.php';
    }
?> 

2 个答案:

答案 0 :(得分:0)

根据你的评论,不应该是:

require './addbloguser.php';

尝试使用

require __DIR__ . '/addbloguser.php'; 

require dirname(__FILE__) . '/addbloguser.php';

这样您就可以获得更好的错误消息并查看缺少的内容。

答案 1 :(得分:0)

这是使用相对文件路径引起的问题。当文件blog.php位于文件夹includes时,您的相对文件路径有效,因为../您正在向上一个目录(到您的根目录),然后回到includes内。但是,由于您将文件移动到一个目录(到您的根目录),您将在../一个目录上,在根目录之外,然后尝试进入文件夹includes,但文件夹在你的根目录上面的目录中不存在(好吧,如果你运气好了,但是文件不存在或者它确实存在但是错误的。)

为防止出现这种情况,您应始终使用绝对文件路径,这样只要文件blog.php停留在同一位置,您就可以在任何地方移动addbloguser.php

获取项目的绝对文件路径的一种简单方法是在项目的根目录中的全局文件中定义一个计算为dirname(__FILE__))的常量。这样,您可以始终使用常量来处理文件,并防止修改文件以更正相关文件路径。

E.g。 global.php在您的根目录中,然后您将只写这个

define('IN_DIR', dirname(__FILE__)); //__FILE__ is a magic constant and includes the absolute filepath to the current file -> global.php

如果您现在包含blog.php所述文件global.php(或其他方式),您可以使用已定义常量的文件路径,它将如下所示

require IN_DIR.'/path/to/file.php'

在这种情况下将是

require IN_DIR.'/includes/addbloguser.php'