web-dev-qa-db-ja.com

PHP、インクルードパスの設定方法

私は書いている:

_include('a.php')
include('b.php')
_

a()およびb()を使用するために含めるスクリプトなど。かなり退屈です。ディレクトリのパスを設定して複数のファイルをスクリプトでアクセスできるようにする方法はありますか?

  1. 私は自分のスクリプトでこれを試しました:

    _set_include_path('.;C:\xampp\htdocs\myfunctionfolder');
    _
  2. そして、環境変数PATHを設定して、これより古いものをそこに入れました。

  3. また、変更したphp.iniに含める

    _include_path = ".;\xampp\php\PEAR;\xampp\htdocs\myfunctionfolder"
    _

そこに多くのファイルがある場合、各ファイルを個別に含めることなく、これらのファイルにアクセスするにはどうすればよいですか?環境変数の設定は、コマンドプロンプトで確実に機能します。

.phpファイルをディレクトリの下でまとめてアクセスできるようにするには、何か他のことをする必要がありますか?

11
musicliftsme

一般的な方法は、include/include_once呼び出しを含む "common.php"または "includes.php"ファイルを用意することです(簡単にするため)。例えば.

  • root
  • [lib]
    • a.php
    • b.php
    • include.php
  • index.php

次にincludes.phpには以下が含まれます:

<?php
  include_once('a.php');
  include_once('b.php');
?>

次に、スクリプトにincludes.phpファイルを含めるだけです。

ただし、元の質問に回答するには、1回の呼び出しで一度に1つのファイルしか含めることができません。 opendirreaddirのようなものを使用して、特定のディレクトリ内のすべてのファイルを反復処理し、見つかったファイルを含める(自動で言う)か、ファイルに基づいて各インクルードを書き出すことができますあなたが作成しています。

また、インクルードパスが行うすべての設定は、include呼び出しが行われたときに検索するディレクトリを設定することです。これは、ファイルが自動的にロードされるディレクトリではありません(これは私があなたの投稿から得た印象です)。

13
Brad Christie

include_pathを設定すると、そのディレクトリ内のすべてのファイルが含まれるわけではなく、そのディレクトリがリストに追加されるだけですPHPは、ファイルを含めるときに検索します。

Require()、include()、fopen()、file()、readfile()およびfile_get_contents()関数がファイルを探すディレクトリのリストを指定します。

ソース

これにより、ファイルシステムの深い構造または完全に異なるセクションにファイルを含めることが簡単になります。

include('/var/somewhere/else/foo.php');

Php.iniに/var/somewhere/else/を追加すると、include_pathが

include('foo.php');

さらに、他の人が指摘したように、一般的な方法がありますが、OOPHPと autoloading classes を調べることもできます。これは、私が知っている関数では機能しません。

オブジェクト指向アプリケーションを作成する多くの開発者は、1つのPHPソースファイルをクラスごとに定義します。最大の問題の1つは、各スクリプトの最初に必要なインクルードの長いリストを作成することです(1つは各クラス)。

PHP 5では、これはもう必要ありません。まだ定義されていないクラス/インターフェースを使用しようとしている場合に自動的に呼び出される__autoload関数を定義できます。 PHPがエラーで失敗する前に、この関数はスクリプトエンジンにクラスをロードする最後の機会を与えられます。

6
Paul DelRe

この質問を参照してください:

インクルードする方法()すべてPHPディレクトリのファイル?

また、ベストプラクティスの観点から、複数の関数が関連している場合は、それらを同じファイルに含めることができます。また、関数とファイルのよりわかりやすい名前を付けることをお勧めします。たとえば、a()およびb()関数の両方が検証に関連している場合、たとえば、ファイル名にvalidation.phpを付け、そこに両方の​​関数を配置します。そして、それらの名前を、それらが何をしているかに関連する名前に変更しようとします。これにより、膨大な数の関数のリストを積み上げ始めるときに、それらが何をしているかを思い出すことができます;)

3
Evan

PHPのパーサーはかなり効率的です。1つ(またはいくつか)のモノリシックファイルをロードする代わりに、大量の個別ファイルをロードするのに多くの時間を浪費します。ただし、そのように分離することを主張する場合は、メタインクルードファイルを作成して個々のファイルのセットをロードすることができるため、1つのメタインクルードファイルのみをインクルードするだけで、残りは自動的に行われます。

meta.php:

include('a.php');
include('p.php');
...
include('z.php');

そして、あなたは単に行います:

<?php

include('meta.php');

あなたのスクリプトで、あなたはあなたのためにロードされたすべての個々のものを持っています。

2
Marc B

私のほとんどのプロジェクトでは、次のような機能があります。

function appendToIncludePath($path)
{
    ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . BASE_DIR . $path . DIRECTORY_SEPARATOR);
}
2
Bob_Gneu

最新のPHP ZipをダウンロードしてCドライブに解凍してから、ダウンロードcomposerしてインストールします。インストール中にPHPパスを要求します。したがって、抽出されたPHPパスを選択するだけです。

以下の手順に従ってください。

  1. Computerに移動します。

  2. Advance System Settingsを選択します。

  3. システムプロパティからEnvironmental Varaiblesを選択します。
  4. PCNAMEのユーザー変数にEnvironmental VaraiblesPathを追加します
  5. Environmental Varaiblesのシステム変数にPathを追加します。
  6. OKを押します。
  7. PCを再起動します。
  8. Win + Rタイプcmd
  9. コマンドphp -vを入力します。
  10. ボラ、行ってよかった。

PHP http://php.net/downloads.php

Composer https://getcomposer.org/download/

0
Vrushal Raut
include __DIR__ . '/../folder1/folder2/folder3/Target.php';
include __DIR__ . '/../folder1/folder2/Target.php';

それはあなたがどんな道に行くのにも役立ちます。

0
RENFiX