2011-12-29 16 views
1

私はPHPを初めて使用しています。私は新しいPHPウェブサイトを開発しています。私のウェブサイトのフォルダ構造は、私は、リソースディレクトリ内の設定ファイルを持って、次のようにPHPプロジェクトの設定ファイルへの相対パス

あり
-SystemRoot 
    +Code 
    +Data_Access 
    -Public_HTML 
     +css 
     +js 
     +Templates 
    -resources 
     config.php 

ですが、私はさまざまなディレクトリ内の他のPHPページのほとんどでconfig.phpを含める必要があります。だから私は

include_once '../resources/config.php'; 
include_once '../../resources/config.php'; 

、などの異なるページで異なる設定ファイルへのパスを指定する必要があり、この&内ENYフォルダのパスで使用することができconfig.phpに共通の(相対)パスを使用を克服する方法はありますプロジェクト?

phpプロジェクトにクラスを組み込むための一般的な/ベストプラクティスは何ですか?

+0

作業ディレクトリはPublic_HTMLフォルダですか?またはSystemRoot? – James

+0

@James index.phpはPublic_HTMLのSystem rootと他のWebページにあります – Nalaka526

+0

SystemRoomがあなたのdomain.com/ディレクトリであれば、それを含めるときに必要なのは、相対パス "/"を使用することだけです。インクルード/パス "。そうすれば、含まれているパスはSystemRoomから始まります。したがって、あなたのインクルードされたファイルが "SystemRoot/resources/config.php"にある場合、include_once( "/ resources/config.php");どのファイルでも。 (つまり、先頭に "/"を付けてパスを始める) – James

答えて

2

あなたは可能性があり、ルートあなたのindex.php

に至るまで、その後いくつかの定数の定義。 index.phpにルーティングされたevrythingは、これらにアクセスできます。

define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); 

define('RESOURCES', SELF . 'resources/'); 
4

をチェックアウト、私はあなたが私のrequire() Sが異なって行われていることを除いて、過去に何をやったかはかなりやったPHP 5.xのを使用している場合:私は、その後

require_once(str_replace('//','/',dirname(__FILE__).'/') .'../../config.php'); 

// DIRECTORY_SEPARATOR is a PHP pre-defined constant 
// (\ for Windows,/for Unix) 
defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR); 

// Define Views URL path 
defined('VIEW_URL') ? null : define('VIEW_URL', '/application/views'); 

// Define CSS URL path 
defined('CSS_URL') ? null : define('CSS_URL', '/public/css'); 

// Define JavaScripts URL path 
defined('JS_URL') ? null : define('JS_URL', '/public/js'); 

// Define site root 
defined('SITE_ROOT') ? null : 
    define('SITE_ROOT', str_replace('//','/',dirname(__FILE__))); 

// Define App path as 'application' directory 
defined('APP_PATH') ? null : define('APP_PATH', SITE_ROOT.DS.'application'); 

// Define Includes path as 'application/includes' directory 
defined('INC_PATH') ? null : define('INC_PATH', APP_PATH.DS.'includes'); 

// Define Helpers path as 'application/helpers' directory 
defined('HELP_PATH') ? null : define('HELP_PATH', APP_PATH.DS.'helpers'); 

// Define Controllers path as 'includes/classes' directory 
defined('CTLR_PATH') ? null : define('CTLR_PATH', APP_PATH.DS.'controllers'); 

// Define Models path as 'includes/classes' directory 
defined('MOD_PATH') ? null : define('MOD_PATH', APP_PATH.DS.'models'); 

// Define Views path as 'includes/classes' directory 
defined('VIEW_PATH') ? null : define('VIEW_PATH', APP_PATH.DS.'views'); 
3

chdir($_SERVER['DOCUMENT_ROOT']);でスクリプトを開始してください。そこからすべてのincludefile_existsfopenなどのファイル機能は、あなたのウェブサイトのルートディレクトリ(通常public_html)から機能します。

+0

これは、あなたがまだルートディレクトリで作業していなかった場合に私が提案しようとしていたものです。 – James

+0

@kolink <?php echo $ _SERVER ['DOCUMENT_ROOT']?>は、SystemRootディレクトリの親ディレクトリである 'D:/ workspace'を返します。何か間違っている(私のPHPの設定で)? – Nalaka526

+0

Windowsサーバーを使用していますか? – James

関連する問題