PHP包含混乱

时间:2011-03-21 20:17:55

标签: php include

我正在为我的网站构建基本框架,并且config.php文件存储在scr目录中。此外,此目录有一个名为php的文件夹,我在其中存储名为sidebar.php

的文件

基本上,config.php文件将保存我的数据库配置变量,也是每个页面调用的唯一文件。我希望在此文件中包含php/sidebar.php,以便我在sidebar.php中创建的任何变量都可以在所有页面上使用。

但是,我还希望sidebar.php能够访问数据库配置变量。所以这两个文件将有效地相互包含。

从配置到侧边栏的包含是:

include 'php/sidebar.php';

从侧边栏到配置是:

include '../config.php';

但是,上面的语句(侧栏到配置)会产生以下错误消息:

  

警告:include(../ config.php)   [function.include]:无法打开   流:

     

没有这样的文件或目录   C:\ XAMPP \网站\ SCR \ PHP \的sidebar.php   在第3行

我是否认为这两个文件的交叉链接都是错误的,或者是否有正当理由说明它无法正常工作

5 个答案:

答案 0 :(得分:6)

一般来说,安全的做法包括使用 dirname(__FILE__) __DIR__ ,如果您使用的是PHP> = 5.3,有一个绝对路径 - 相对于当前的路径写。

例如,您可以使用:

include dirname(__FILE__) . '/php/sidebar.php';


注意:dirname(__FILE__)__DIR__指向写入它们的文件的目录。

有了这个,不用担心从哪里包含什么,包括什么:你总是使用绝对pahts引用文件。


手册中的相关页面:


此外,正如 @ jwir3 在其评论中指出的那样,您有时会想要使用require_once()include_once(),以确保不会多次包含给定文件。

不止一次包含文件会导致麻烦,特别是如果它包含常量,函数或类定义。​​

答案 1 :(得分:3)

我猜php解析器已经在读取文件了。您应该使用include_once代替include来避免此问题。

除此之外,您还应该强烈考虑require_once,因为它可以防止包含文件不存在的情况,特别是对于配置文件,您的应用程序应该崩溃而不是忽略它(这就是需要做的事情)

PS :正如其他人所说,无论如何都应该打破循环依赖,这是设计糟糕的一个很好的迹象。

答案 2 :(得分:2)

您只需要在配置中包含侧边栏,而不是相反:

// in config.php
include('php/sidebar.php');

// in other files, such as page.php
include ('config.php');

答案 3 :(得分:0)

如果在配置中包含侧边栏,它应该可以访问全局范围内的任何变量。但是,您可能必须在函数内部使用全局$ varName。

在每个页面上包含配置,在配置中包含侧边栏,并从侧边栏访问配置变量。不要打扰双重包括。

答案 4 :(得分:0)

好的,所以你有

/path/to/your/site/scr/config.php
/path/to/your/site/php/sidebar.php

你希望sidebar.php加载config.php?

include('../scr/config.php');

会做到这一点。