Php 包含数据库常量时出现相对路径问题

Php 包含数据库常量时出现相对路径问题,php,mysql,Php,Mysql,如果我使用相对路径,那么当我需要一个包含常量的php文件时,就会遇到问题。当我将它更改为绝对路径时,它工作得很好,但我不想在它处于这种状态时将其部署到生产环境中。我得到的错误是: 注意:在第10行的C:\xampp\htdocs\photoGallery\includes\database.php中使用未定义的常量DB_SERVER-假定为“DB_SERVER” 注意:在第10行的C:\xampp\htdocs\photoGallery\includes\database.php中使用未定义的常

如果我使用相对路径,那么当我需要一个包含常量的php文件时,就会遇到问题。当我将它更改为绝对路径时,它工作得很好,但我不想在它处于这种状态时将其部署到生产环境中。我得到的错误是:

注意:在第10行的C:\xampp\htdocs\photoGallery\includes\database.php中使用未定义的常量DB_SERVER-假定为“DB_SERVER”

注意:在第10行的C:\xampp\htdocs\photoGallery\includes\database.php中使用未定义的常量DB_USER-假定为“DB_USER”

注意:在第10行的C:\xampp\htdocs\photoGallery\includes\database.php中使用未定义的常量DB_PASS-假定为“DB_PASS”

有三个文件: database.php,需要config.php->它们都位于名为“includes”的同一目录中

还有index.php,它驻留在一个名为“public”的上一级目录中

config.php中的代码

// Database Constants
 defined('DB_SERVER') ? null : define("DB_SERVER", "localhost");
 defined('DB_USER')   ? null : define("DB_USER", "ugallery");
 defined('DB_PASS')   ? null : define("DB_PASS", "ugallerypword");
 defined('DB_NAME')   ? null : define("DB_NAME", "photo_gallery");
database.php中的代码

require_once("config.php");
class MySQLDatabase {
    private $connection;

    function __construct() {
        $this->open_connection();
    }
    public function open_connection() {
        $this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);
        if(!$this->connection) {
            die("Database connection failed: ".mysql_error());
        } else{
            $db_select = mysql_select_db(DB_NAME, $this->connection);
            if(!$db_select) {
                die("Database selection failed: ".mysql_error());
            }
        }
    }
    public function close_connection() {
        if(isset($this->connection)) {
            mysql_close($this->connection);
            unset($this->connection);
        }
    }
    public function query($sql) {
        $result = mysql_query($sql, $this->connection);
        $this->confirm_query($result);
        return $result;
    }

    private function confirm_query($result) {
        if(!$result) {
            die("Database query failed: ".mysql_error());
        }
    }

    public function mysql_prep( $value ) {
        $magic_quotes_active = get_magic_quotes_gpc();
        $new_enough_php = function_exists( "mysql_real_escape_string" ); // i.e. PHP >= v4.3.0
        if( $new_enough_php ) { // PHP v4.3.0 or higher
            // undo any magic quote effects so mysql_real_escape_string can do the work
            if( $magic_quotes_active ) { $value = stripslashes( $value ); }
            $value = mysql_real_escape_string( $value );
        } else { // before PHP v4.3.0
            // if magic quotes aren't already on then add slashes manually
            if( !$magic_quotes_active ) { $value = addslashes( $value ); }
            // if magic quotes are active, then the slashes already exist
        }
        return $value;
    }

}
$database = new MySQLDatabase();
index.php中的代码

<?php require_once("../includes/database.php"); ?>
<?php
    if(isset($database)) { echo "true";} else { echo "false";} 
    echo "<hr />";
    echo $database->mysql_prep("It's working");
?>
然后一切都会正常运转


关于为什么会发生这种情况,有什么线索吗?

通过在php5.3及以上版本中使用DIR解决了这个问题

在database.php文件中

require_once(__DIR__."/config.php");

只需阅读一下require_once和require之间的区别。你的config.php文件和数据库文件在同一个目录中是哪一种?@Marinus是的,它们在同一个目录中directory@mamdouhalramadan是的,区别很明显,但没有任何意义。对不起,index.php页面在/photoGallery文件夹下吗?
require_once(__DIR__."/config.php");