-1

最近、ラップトップに新しいバージョンの XAMPP をインストールしました。Web アプリケーションをデスクトップからラップトップに移動しましたが、ここで動作しません。必須ファイルとインクルード ファイル内の変数が「未定義」と見なされていることがわかりました。php.ini のセットアップに違いはありますか?

私は次の設定をしています。

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

にはが必要index.phpです。ただし、 の変数は で未定義として表示されます。includes/include.phpincludes/config.phpconfig.phpinclude.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);
    }

?>
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の代わりにrequireを使用する必要があります。require 呼び出しが失敗すると、php エラーがスローされます。あなたの場合、データベース資格情報を読み込めない場合は、エラーが発生します。

2番; 構成ファイルやファイルを 2 回含めてはならない場合は、include_onceまたはrequire_onceを使用する必要があります。これらの呼び出しにより、ファイルが以前に既にインクルードされている場合、再度インクルードされないことが保証されます。config.php ファイルの 2 つの require は、既存の定数を再定義しようとするため、エラーを引き起こします。

問題を解決するには、2 つの解決策があります。

  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";
    

include、require、include_once、require_once、および include_path の違いを理解するために、この回答に投稿されたドキュメント リンクをよく読んでください。

于 2013-06-07T23:47:53.893 に答える