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中的代码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中使用未定义的常
// 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");