0

我对 php 包含有一点麻烦。我有以下文件结构

文档

  • 索引.php
  • 登录.php

php_includes

  • db_conx.php
  • check_user_status.php

在 db_conx.php 文件中,我创建了一个变量 $number = 10; 供测试用。

db_conx 文件包含在 check_user_status.php 文件中,代码如下:

include_once("db_conx.php");

这工作正常 - 即我可以回显 $number 并得到 10。

但是,我在 login.php 的顶部包含了 check_user_status.php 文件,其中包含以下代码:

include_once("php_includes/db_conx.php");

在此页面上,我无法在此页面上回显 $number (check_user_status.php)。

我将需要在许多页面中包含此脚本(因为它会检查用户是否已登录)。我对路径做了什么奇怪的事情吗?

4

3 回答 3

2

对于相对路径,您需要这样做。

include_once("../php_includes/db_conx.php");

打破这个。

如果您在浏览器中点击该文件,您的当前工​​作目录最初将是 htdocs/。

..您备份到一个目录级别(因此包含 htdocs 和 php_includes 的目录)

然后你想跟随 php_includes 到 db_conx.php。

当您在子目录中执行文件时,这将成为一个问题。假设你和一个 page2.php 到一个 htdocs/subpages/

现在,如果我们遵循相同的步骤,我们将不会到达相同的位置。

更好的方法是获取相对于绝对位置的路径。我喜欢使用文档根目录(在你的情况下是 htdocs),所以:

 include($_SERVER["DOCUMENT_ROOT"]."/../php_includes/db_conx.php");

无论在何处使用,都将引用文件系统上的同一位置。

于 2013-06-12T20:59:33.547 回答
0

我认为你可以使用__DIR__魔法常数

文件的目录。如果在包含中使用,则返回包含文件的目录。这相当于 dirname( FILE )。此目录名称没有尾部斜杠,除非它是根目录。(在 PHP 5.3.0 中添加。)

这将帮助您处理嵌套的包含文件,事实上文件路径将始终自动设置,您不必处理absolute paths.

于 2013-06-12T20:54:36.990 回答
0

如果您的文件结构是正确的,假设 php_includes 不是 htdocs 中的目录,您需要执行以下操作:

include_once("../php_includes/db_conx.php");
于 2013-06-12T20:59:46.897 回答