-1

我最近在笔记本电脑上安装了新版本的 XAMPP。我将一个 Web 应用程序从我的桌面移到了我的笔记本电脑上,但这里的东西无法正常工作。我发现必需和包含文件中的变量被视为“未定义”。php.ini 设置有什么不同吗?

我有以下设置。

index.php
includes/config.php
includes/include.php

index.php需要includes/include.php哪个includes/config.php需要。但是, 中的变量config.phpinclude.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.

?>

包含.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);
    }

?>
4

1 回答 1

2

它不可能在您的远程服务器上按原样工作。你需要阅读关于 php include_path

  • 当前的目录./
  • 你执行./index.php
  • 您包含/需要“include/include.php”,它转换为./include/include.php

    包含一个文件不会改变你的工作目录,你仍然在./

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

    因为 config.php 的 include 失败,所以常量是 undefined

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

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

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

  1. 在 include_path 中添加您的 ./include/ 目录

    索引.php:

    <?php
    set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__).'/includes/');
    include "include.php";
    

    包含.php

    <?php
    require_once "config.php";
    
  2. 使用相对路径添加 config.php 文件

    包含.php

    <?php
    require_once dirname(__FILE__)."/config.php";
    

请花时间阅读此答案中发布的文档链接,以了解 include、require、include_once、require_once 和 include_path 之间的区别。

于 2013-06-07T23:47:53.893 回答