Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 包含文件中未定义的变量_Php - Fatal编程技术网

Php 包含文件中未定义的变量

Php 包含文件中未定义的变量,php,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中显

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

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

它可能无法在远程服务器上正常工作。您需要了解php

  • 您的密码是
    /
  • 执行
    /index.php
  • 您包括/需要“include/include.php”,它翻译成
    /include/include.php

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

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

    由于config.php的include失败,因此该常量未定义

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

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

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

  • 在include\u路径中添加您的./include/目录

    index.php:

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

    需要查看文件内容,但很有可能,您正试图使用超出范围的变量。您实际收到的错误消息是什么?您谈到了变量,但config.php中的所有内容都是常量注意:在第6行的C:\xampp\htdocs\Xion\includes\include.php中使用未定义的常量DB_HOST-假定为“DB_HOST”会对每个常量执行此操作。您的require肯定有问题。如果文件都位于正确的位置,则不应发生这种情况。请重新检查一切是否符合您的预期。它在我的桌面上运行良好。我总是使用相对路径这样做。我刚刚做了一个新的目录,做了一个测试,它也工作了。。。可能是文件权限问题?这些文件是从另一台计算机复制过来的。@CoryNickerson:请阅读我更新的答案并应用上面所说的内容。使用require并检查include_路径和当前目录将向您显示您确实处于我所列出的情况中(如果不是,则有助于确定问题所在)。如果有的话,require会抛出一个php错误,说找不到config.php。当我更改文件名时,它会说找不到该文件。但是,当我命名适当的文件(以及我命名的方式)时,它只显示未定义的变量和常量错误消息。这使得它看起来好像正在加载文件,但没有正确地从中读取?不确定如何使用XAMPP检查/更改文件/文件夹权限。