“当前目录”表示法不起作用

时间:2011-08-15 14:37:06

标签: php directory

我被告知,最好指定要链接的文件的目录,即使文件位于当前目录中也是如此。因此,例如,使用“./constants.inc.php”而不是“constants.inc.php”。这通常对我来说很好,除了在我的代码中的一个特定位置,当我使用./表示法时,我得到以下PHP错误:

  

警告:require(./ constants.inc.php)[function.require]:无法打开流:C:\ xampp \ htdocs \ widget_corp \中没有这样的文件或目录包含\ functions.inc.php在线4

     

致命错误:require()[function.require]:无法打开所需的'./constants.inc.php'(include_path ='。; C:\ xampp \ php \ PEAR; C:\ xampp \ htdocs \ websites第4行的C:\ xampp \ htdocs \ widget_corp \ includes \ functions.inc.php中的\ mathverse \ includes')

写“./constants.inc.php”给出了这个错误,但是“constants.inc.php”没有(PHP似乎找到文件就好了)。有人能告诉我为什么./符号在这种特殊情况下不起作用吗?也许这很简单,我很遗憾?

为了给出更多的上下文(如果需要),错误在下面的函数(第2行)中,这是在我的PHP函数文件(称为functions.inc.php)中,它位于include目录中。 constant.inc.php文件也在includes目录中。

谢谢。

function connect_to_db() {
  require("./constants.inc.php");
  $connection_id = mysql_connect(DB_SERVER, DB_USER, DB_PASS);
  if (!$connection_id) {
    die("Database connection failed: " . mysql_error());
  }
  $db_selection_was_successful = mysql_select_db(DB_NAME, $connection_id);
  if (!$db_selection_was_successful) {
    die("Database selection failed: " . mysql_error());
  }
}

3 个答案:

答案 0 :(得分:3)

  

写“./constants.inc.php”给出了这个错误,但是“constants.inc.php”没有(PHP似乎找到文件就好了)。有人能告诉我为什么./符号在这种特殊情况下不起作用吗?也许这很简单,我很遗憾?

我唯一的解释是PHP似乎在包含路径的其中一个目录中找到了constants.inc.php文件 - 很可能是C:\xampp\htdocs\websites\mathverse\includes

答案 1 :(得分:3)

即使有或没有./ PHP将搜索相同的文件(在./的情况下,它不会在include_path中搜索),这意味着constats.inc.php不存在

试试这个

require(dirname(__FILE__)."/../constants.inc.php");

答案 2 :(得分:0)

创建以下heirachy:

index.php // echo 'I am in the top directory';
folder1/
    index.php // echo 'I am in folder 1';
    folder2/
        index.php // 'echo I am in foler' 2
顶层的

index.php需要folder1/index.php。从那需要'folder2/index.php';

这没问题。但是,在./之前添加folder2/index.php,您将收到错误消息。看起来,一旦您使用.指定了所需的文件夹,它就必须相对于当前工作目录。但是如果保持打开状态,也将在调用脚本自己的目录中检查路径。

From the manual:

  

根据给定的文件路径包含文件,如果没有给出,则指定include_path。如果在include_path中找不到该文件, include将最终在调用脚本自己的目录和当前工作目录之前检查。如果找不到文件,include构造将发出警告;这与require的行为不同,会发出致命的错误。