我最近在笔记本电脑上安装了新版XAMPP。我将一个Web应用程序从桌面移到我的笔记本电脑上,这里的东西不会工作。我发现必需和包含文件中的变量被认为是“未定义的”。 php.ini设置有什么不同吗?
我有以下设置。
index.php
includes/config.php
includes/include.php
index.php
需要includes/include.php
,这需要includes/config.php
。但是config.php
中的变量在include.php
中未定义。
想法?
的config.php
<?php
// WEBSITE INFO
DEFINE ('WEBSITE_URL', 'http://localhost/xion/'); // Database name.
DEFINE ('WEBSITE_MAIN', 'index.php'); // Website main page.
// MySQL
DEFINE ('DB_NAME', 'xion'); // Database name.
DEFINE ('DB_USER', 'admin'); // Database user.
DEFINE ('DB_PASS', 'admin'); // Database password.
DEFINE ('DB_HOST', 'localhost'); // Database host.
DEFINE ('DB_PFIX', 'xion_'); // Table prefix for multiple installs.
?>
include.php
<?php
require 'config.php';
// MySQL Config
$db_connect = mysqli_connect (DB_HOST, DB_USER, DB_PASS, DB_NAME) OR die ('Could not connect to MySQL: ' . mysqli_connect_error() );
// SmartyPHP Config
require 'smartyphp/libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->caching = 0;
$smarty->template_dir = 'templates/default';
$smarty->compile_dir = 'templates_c';
// User Permissions
session_start();
if ( isset($_SESSION['user']) ) {
$logged_in = "TRUE";
$smarty->assign('logged_in', $logged_in);
foreach ( $_SESSION['user'] as $key => $value ) {
$smarty->assign($key, $value);
}
} else {
$logged_in = "FALSE";
$smarty->assign('logged_in', $logged_in);
}
?>
答案 0 :(得分:2)
它无法在您的远程服务器上按原样运行。你需要阅读有关php include_path
的信息./
./index.php
您包含/ require“include / include.php”,转换为./include/include.php
包含文件不会更改您的工作目录,您仍然在./
然后在该文件中包含“config.php”,转换为./config.php
(这是错误的,因为您需要./include/config.php
)
因为config.php的包含失败,所以常量是未定义的
首先;当使用重要的配置文件和/或绝对需要找到的应用程序文件时,您应该使用require而不是include。如果require调用失败,则会抛出php错误。在您的情况下,如果您无法加载数据库凭据,则需要输出错误。
二;如果包含不应包含两次的配置文件和/或文件,则应使用include_once或require_once。这些调用将确保,如果之前已经包含该文件,则不会再次包含该文件。对config.php文件的两个要求会导致错误,因为您将尝试重新定义现有常量。
要解决您的问题,您有两种解决方案;
在include_path
中添加./include/目录的index.php:
<?php
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__).'/includes/');
include "include.php";
include.php
<?php
require_once "config.php";
使用相对路径
添加config.php文件include.php
<?php
require_once dirname(__FILE__)."/config.php";
请花点时间阅读本回答中发布的文档链接,了解include,require,include_once,require_once和include_path之间的区别。