1

私はPHPを学び始めたばかりで、ほとんど同じような質問に対するいくつかの回答を読みましたが、役に立ちませんでした。

私はいくつかのファイルを持っています:

index.php 
folder1\file.php
folder2\file.php 

index.php含まれているのでfolder1\file.php、それは本当に簡単です。次に、をfolder1\file.php含みfolder2\file.phpます。私が読んでいる本はこれをするように言っています私はこれを中に書かなければなりませんfolder1\file.php

require $_SERVER['DOCUMENT_ROOT'] . '/' . 'folder2/file.php';

それで、基本的になぜ彼らはこれをしなかったのですか?

require 'folder2/file.php';

私が理解している限り、すべてのパスは常に最初のスクリプトの場所を基準にしており、私のマシンでは問題なく機能します。

.\folder\file.phpディレクトリを深く移動したり、Webサイト全体を別のマシンにコピーしたりしても、機能し続ける 理由がまだわかりません 。

マニュアルによると:パスが定義されている場合(絶対(ドライブ文字または\Windows、 Unix / Linuxシステムで始まる)または現在のディレクトリからの相対パス(または/で始まる))、インクルードパスは完全に無視されます。たとえば、ファイル名が。で始まる場合、パーサーは親ディレクトリを検索します。...../

4

2 に答える 2

3

PHPのマニュアルには次のように書かれています。

ファイルは、指定されたファイルパスに基づいてインクルードされます。指定されていない場合は、 include_pathが指定されます。ファイルがinclude_pathに見つからない場合、include()は、失敗する前に、呼び出し元のスクリプト自体のディレクトリと現在の作業ディレクトリを最終的にチェックインします。

したがって、 set_include_path()メソッドを使用してマスターファイル(この場合はindex.php)にインクルードパスを設定することが常にベストプラクティスです。

フレームワークまたはカスタマイズされたサーバーを使用する場合は、次のようにして、システムで定義されたインクルードパスを残さずにインクルードパスを指定することをお勧めします。

set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT']);

これにより、新しいインクルードパスが既存のパスに追加されます。

質問で質問したことについては、前述のようにインクルードパスを指定してから、ファイルを相対的に参照することをお勧めします。将来、ファイルを移動したい場合は、数百のファイルを見つけて置き換えるのではなく、1行だけ編集するだけで済みます。

例:

index.php:

set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT']);
require('folder1/file.php');

folder1 / file.php:

require('folder2/file.php');

folder2 / file.php:

require('folder3/file.php');

等々..

于 2011-01-29T11:06:45.727 に答える
1

それが良い習慣だからです。folder2/file.phpを使用するすべてのスクリプトがルートディレクトリから呼び出されるわけではありません。

あなたが持っているなら言う

index.php
folder1\file.php
folder2\file.php
folder3\use-folder2.php

そして、use-folder2.phpのfolder2からfile.phpをインクルードしようとすると、アイデアを使用して、ファイルを検索するパスは次のようになります。

folder3\folder2\file.php

存在しません。

それが彼らがあなたにあなたのウェブサイトのルートからあなたの道を始めさせている理由です。

于 2011-01-29T10:47:06.447 に答える