2014-10-05 18 views
0

我正在研究一些Web应用程序,学习PHP OOP。我有3个脚本:index.php,database.php和config.php。require_once不会读取第三个脚本的变量

在config.php中是访问数据库的常量。

在database.php中是打开和关闭连接到数据库等的类。该文件包含config.php文件。

现在在索引文件中包含database.php文件,我测试$database是否存在。文件database.phpconfig.php位于与index.php不同的文件夹中。 当我运行index.php文件它说:Use of undefined constant DB_SERVER - assumed 'DB_SERVER'

一切工作正常,如果他们在同一个文件夹。它也可以,如果我有单独的config.php文件中的索引文件,但如果只包含数据库文件,它不会工作

的config.php

<?php constants ?> 

database.php中

<?php 
require_once("config.php"); 
... 

?> 

的index.php

<?php 
require_once("../includes/database.php"); 
... 
?> 

为什么不index.php文件中承认来自config.php的变量?

+1

你有另一个'config.php'在与'index.php'相同的文件夹? config.php的路径究竟是什么? – prodigitalson 2014-10-05 16:44:57

+0

不,我不知道。 //包括 config.php database.php // public index.php – 2014-10-05 19:32:52

回答

0

它可能包含路径的一些问题。即使database.phpconfig.php位于相同的文件夹中,但拨打电话的index.php文件夹也是index.php文件夹。当database.php尝试包括config.php它将在那里寻找它。

有几个方法可以解决这个问题:

  1. index.php调用所有的包括,包括database.php依赖;

  2. database.php知道它的路径相对于网站根目录是../includes,它也将参考config.php作为../includes/config.php即使它有与它(在同一文件夹右侧不建议特别是如果你的子文件夹需要database.php你现场);使用set_include_path()。例如:

的index.php:

set_include_path('../includes'); 
require_once 'database.php'; 
+0

对于第一个解决方案,我知道它的工作原理。现在我已经尝试了其他两个,它也起作用。我会坚持第二个解决方案。我没有这样看,即使index.php正在调用config.php。 Thanx Havenard – 2014-10-05 19:36:05

0

我相信问题在于目录。如果包含../includes/database.php文件,则该文件中定义的所有路径都与IT相关!这意味着它不是在index.php所在目录(可以说是/var/www/html/funfile/index.php)中查找配置文件,而是在/var/www/html/includes/(因此include的文字路径为/var/www/html/includes/config.php)中查找它。这是一个非常简单的修复方法,只需将路径设置为配置文件字面值即可。

尝试:

require_once("/var/www/html/funfile/config.php"); 

而且取代我编造的,与实际路径配置文件的路径。这应该可以解决你的问题。

-1

你应该给DB_SERVER引号是这样的:

define('DB_SERVER',$db_host); define('DB_USER',$db_user); define('DB_PASS',$db_pass); define('DB_NAME',$db_name);