2016-10-15 1 views
-1

Mac OSでEclipseを使用してPHP Webサイトを開発しています。PHPプロジェクトでインクルードファイルと相対パスを扱う方法

私は、組み込み文を扱う適切な方法が何であるか知りたい。

私は主な 'lib'スクリプトであるphpファイルを持っています。このファイルは、他のファイル、throughtコマンドにアクセスします。 includeの相対パスは現在のスクリプトではなく、エントリポイントのスクリプトに基づいているため、問題はこのサブファイルを参照する方法です。

したがって、mainlib.phpファイルがあり、sublib.phpファイルにアクセスしています。

 
Project Root: 
    [libs] 
     mainlib.php 
     sublib.php 
    [subdir] 
     entryPointB.php 
    entrypointA.php 

私はmainlib.phpに含める「sublib.php」の文章を入れたいので、私は唯一の私はそれを必要とするたびに、両方を含むmainlib.phpの代わりを含めることができます:それはそのようなものになるだろう。 (このサンプルでは2つだけのファイルですが、そこに私の実際のプロジェクトで複数のファイルになります

は私のmainlib.phpファイルがこれを含んでいるとしましょう:。

<?php include "libs/sublib.php; ?> 

mainlib.phpが呼び出されたときにそれが動作しますentryPointA.phpから、しかしEntryPointBから呼び出された場合に失敗します

をmainlib.phpが含まれている場合:。

<?php include "../libs/sublib.php; ?> 

それはEntryPointB.phpに動作しますが、entrypointA.phpに失敗します。

どうすればこの問題を解決できますか?私が試したかについて考え

いくつかの可能性:

  • 絶対パスを使用するには - 私は生産にそれをアップロードされたファイルを毎回変更する必要がありますので、良い解決策Won`t。
  • パスをインクルードするために$ _SERVER ['DOCUMENT_ROOT']を先頭に追加 - Macでは/ Library/WebServer/Documentsを返しましたが、私のサイトはUserFolder/Sites/MySiteNameにあります。
  • ディレクトリ取得__DIR__ - プロジェクトルートではなくエントリポイントファイルを返すため、動作しません。
  • グローバル設定 - グローバル変数にハードコードされたルートパスを置くことを考えました。アイデアはグローバルスクリプトでこの変数を定義することになり、プロダクションではこのスクリプトを更新するだけです。しかし、同じ問題が残っていますが、パスに問題がなければこのスクリプトをどのように参照するのですか?
+1

使用を[ '__DIR__'](http://php.net/manual/en/language.constants.predefined.php)と[' dirnameの() '](http://php.net/manual/en/function.dirname.php)を使って相対パスから絶対パスを構築します。 – axiac

+0

これは、環境設定(迷惑メールやドッカーなど)のような概念があるため、これらの相違を処理できるようにしています(または仮想化の場合はそれを持たない)。 –

+0

これはチェックしましたか?<?php include "/libs/sublib.php;?>'? –

答えて

0

私はこの問題を解決しました。それが最良の方法であるかどうかわからないが、それは私に解決される。誰かが同じ問題を抱えているなら、私はここに残しておきます。私は、以下の内容で、config.phpのと呼ばれるファイルを作成し

:それはどこのエントリポイントに動作します

include "config.php"; 

<?php define("ROOT_PATH", "/Path/to/My/Project/"); ?> 

を、その後、私はこの文を持つことができますmainLib.phpこれは常にエントリポイントではなく現在のファイルの同じディレクトリを指しているためです。その後I`llちょうど他が含まれるとのroot_pathを追加する必要があります。

inclue ROOT_PATH."/subdir/file.php"; 
+1

これよりも優れているコメントには、多くの有用なヒントがあります。 – DanFromGermany

関連する問題