2017-03-27 1 views
0

私が現在取り組んでいるプロジェクトのウェブサイトを構築しています。 PDOConfigという名前のクラスを別のファイルで初期化して、配列にデータベースの詳細を埋め込んでいます。しかし、クラスPDOConfigが見つかりませんというエラーが表示されます。私がここで言いたいのより良い理解を得るためには、問題のページです:index.phpのファイルからPHPクラスを呼び出す

<?php 

// Start the output buffer and start the session 
ob_start(); 
session_start(); 
// init.php will include all the required core libraries 
include_once('includes/scripts/php/init.php'); 
?> 

<!-- html code --> 

<?php 
ob_end_flush(); 
?> 

が含ま

は/スクリプト/ PHP

<?php 
// init.php 
// This file includes all the core libraries and, if required, customer and admin libraries. 

#TODO: Include core libraries 
require('libCore/vars.php'); 
require('libCore/db.php'); 
require('libCore/pages.php'); 
require('libCore/catalogue.php'); 

#TODO: Check if customer has logged in. If so include customer libraries. 

#TODO: Check if a member of staff has logged in. If so include admin libraries. 

#TODO: Log File Variables 
$dblogfile = logs/db_log.txt'; 
?> 

が含まれて/ init.php /スクリプト/ PHP/libCore/vars.php

<?php 
// vars.php 
// This file contains all of the site variables. 

# Database Variables 
$db_conf = new PDOConfig(); 
$db_conf->write('dsn.host', 'localhost'); 
$db_conf->write('db.username', '/*Username Here*/'); 
$db_conf->write('db.password', '/*Password Here*/'); 
$db_conf->write('dsn.dbname', 'A1Newsagents'); 
$db_conf->write('dsn.driver', 'sqlsrv'); 
$db_conf->write('dsn.charset', 'utf8'); 

#TODO: Form Variables 

#TODO: Page Title Variables 


?> 

は/スクリプト/ PHP/libCore /をdb.php

を含み

すべてのファイルにdb.phpを含めることなくこの作業を行う方法はありますか?私はこれを行うために "名前空間"と呼ばれるものを使用することについて何かを見ましたが、私はこのクラスではまだ非常にアマチュアなので、最初にクラスをよりよく理解する必要があると思います。ありがとう

+0

クラスのオートローディングについて読む。クラスを自動的にPHPアプリケーションにロードします。あなたはそのために作曲家を使うことができます。 –

+0

オートローダは確かに最高の解決策ですが、特定の問題を解決するには、 'db.php'を前に** **' vars.php'を入力してください – Steve

+0

'db.php'の前に' vars.php'をロードしました。 'db.php'にある' PDOConfig'についてまだ分かっていない 'vars.php'を実行しています – clzola

答えて

1

問題が複数のPHP include()/require()を使用しているように、間違ったフォルダを指しているようです。これらの関数のいずれかを使用すると、インクルードしたファイルは、その内容をインクルードしているファイルに基本的にコピーします。

まず、includes/scripts/php/init.phpindex.phpに含めます。 init.phpの内容は、基本的にindex.phpに記載されています。したがって、(init.phpの内部)を使用すると、require()index.phpinit.phpではなく)に相対します。 index.phpがルートにあるため、require()[ROOT]/includes/scripts/php/libCore/vars.phpの代わりに[ROOT]/libCore/vars.phpになります。

は(先頭にバックスラッシュに注意)ルート相対 URLを使用、あなたがより良いまだincludes/scripts/php/からincludes/scripts/php/init.phprequire()、またはを行う必要があり、これを解決するには、次の

`require('/libCore/vars.php');` 

ホープ、このことができます! :)

+0

ありがとう:)それは大いに助けになった!ロードオーダーに関する私のオリジナルの投稿に残されたコメントと結びついて、スクリプトをロードしました:) –

+1

また、** define( "ROOT"、__DIR__。)のようにindex.phpで定数を作ることをお勧めします。//)/ /)** **あなたのinclude/reuiresのためにそれを使用してください: 'require(ROOT。 'include/scripts/libCore/vars.php');' –

+0

ありがとうカルロス、プロジェクトを作成し、より多くのファイルを構築します。 –

関連する問題