包含文件中的未定义变量

时间:2013-06-07 23:14:35

标签: php

我最近在笔记本电脑上安装了新版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);
    }

?>

1 个答案:

答案 0 :(得分:2)

它无法在您的远程服务器上按原样运行。你需要阅读有关php include_path

的信息
  • 您的current directory./
  • 执行./index.php
  • 您包含/ require“include / include.php”,转换为./include/include.php

    包含文件不会更改您的工作目录,您仍然在./

  • 然后在该文件中包含“config.php”,转换为./config.php(这是错误的,因为您需要./include/config.php

    因为config.php的包含失败,所以常量是未定义的

首先;当使用重要的配置文件和/或绝对需要找到的应用程序文件时,您应该使用require而不是include。如果require调用失败,则会抛出php错误。在您的情况下,如果您无法加载数据库凭据,则需要输出错误。

二;如果包含不应包含两次的配置文件和/或文件,则应使用include_oncerequire_once。这些调用将确保,如果之前已经包含该文件,则不会再次包含该文件。对config.php文件的两个要求会导致错误,因为您将尝试重新定义现有常量。

要解决您的问题,您有两种解决方案;

  1. 在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";
    
  2. 使用相对路径

    添加config.php文件

    include.php

    <?php
    require_once dirname(__FILE__)."/config.php";
    
  3. 请花点时间阅读本回答中发布的文档链接,了解include,require,include_once,require_once和include_path之间的区别。