2011-12-16 8 views
0

私は2つのディレクトリ、FOOと親ディレクトリ内バーを持っており、これらのディレクトリには、いくつかのPHPファイルが含まれていると想像:ファイルが存在する場所に相対的なパスを使用してファイルを含めるにはどうすればよいですか?

/ 
/index.php 

/foo 
/foo/functions.php 
/foo/stuff.php 

/bar 
/bar/doodie.php 

さんが言ってみましょう:

  1. functions.phpstuff.php
  2. を含みindex.phpは、functions.php
  3. doodie.phpindex.phpが実行されたとき、それは/fooディレクトリに/foo/functions.phpを探します、この構造に基づいて

functions.phpが含まれています。 ただし、,stuff.phpは、index.phpの場所に従って相対パスを使用する必要があります。これは、index.phpが実行された場合に機能します。 functions.phpがディレクトリのstuff.phpを検索するため、/barの場合は存在しないため、doodie.phpが呼び出されたときにはが機能しません。

絶対パス(およびsession variables)を使用せずに、ファイルをどこから呼び出すのかにかかわらず、ファイルの場所を含めることはできますか。

私は、これは明確ではなかった場合、これを記述するために、本当に大変でした謝罪...

+0

それは私が何らかの理由で掲載させません。 JohnPは本質的に私がとにかく言うことすべてを言った。がんばろう! –

答えて

1

あなた絶対パスを使用する必要があります。

もちろん、毎回フルパスを含める必要はありません。通常のプロセスでは、APP_PATHなどの定数を定義し、ブートストラップ内のアプリケーションの絶対パスを設定します。

その後、ファイルをインクルードする場合は、インクルード呼び出しにAPP_PATH定数を追加します。これはあなたの問題を解決します。

また、これはあなたのファイルが配置されている方法によって異なり、include_pathのオプションで見ることができる - http://php.net/manual/en/function.set-include-path.php

+0

私はこの解決策を理解していますが、どこにAPP_PATH定数を格納しますか?別の場所から呼び出されても同じ問題は発生しませんか? –

+0

@Ozbekov **絶対パス**の唯一の目的は、「別の場所から呼び出されたときに同じ問題を作成しない」ことです。それは理由のために "絶対"と呼ばれています –

+0

PHPがドキュメントのルートに相対的なパスを作るために先行するスラッシュを尊重しない理由を知っていますか?これは、たとえば、画像URLをウェブサイトに掲載する場合に機能します。 'include '/ index.php'' – mrtsherman

1

あなたがこれを行うことができます:
ベースフォルダ内のファイルを作成します。このファイルでは、これらの変数を定義します。
define( 'root'、SERVER ['DOCUMENT_ROOT']);これにより、ルートフォルダが確実に取得されます。
define( 'foo'、root。 '/ foo /');これはfooフォルダへのパスを定義します。
define( 'bar'、root。 '/ bar');これはbarフォルダへのパスを定義します

ここで、呼び出す必要があるファイルで、ベースファイルをインクルードし、それらのフォルダのいずれかのファイルにアクセスできます。
既に/bar/doodie.phpに入っている場合は、(foo。 'functions.php')を含めてください。逆も同様です。
希望に役立ちます。

0

私は多くのMVCが行くルートを行くことをお勧めします。それは簡単で信頼できるものです。すべての要求をルートディレクトリにあるindex.php?path = database.php(bootstrap.phpと言う)の形式で1つのファイルにリダイレクトしてパスを定義するだけです。私の家で作ったファイルの例は、MVCフレームワークです。

/** 
* BASE_PATH is for server side inclusions. 
* BASE_URL is for client side inclusions (scripts, css files, images etc.) 
*/ 
define("DS", DIRECTORY_SEPARATOR); 
define("BASE_PATH", dirname(realpath(__FILE__)).DS); 
define("BASE_URL", dirname(realpath($_SERVER["SCRIPT_NAME"])).DS); 
define("APP_PATH", BASE_PATH."application".DS); 

//$url = $_GET['base_url']; 


/**Include core file which loads all necessary files */ 
require_once (BASE_PATH."core".DS."core.php"); 

、ここで(それは多くの行を持っているとしてのみ1行)core.phpのある

//Load config files 
require_once(BASE_PATH."config".DS."config.general.php"); 
関連する問題