14

絶対パスを使用すると相対パスよりも処理時間が速くなるphpファイルを含めると、私はそれを読みました。

何を使うことをお勧めしますか?

include("includes/myscript.php");

また

include("/home/ftpuser/public_html/includes/myscript.php");

あるいは

set_include_path("/home/ftpuser/public_html/includes");
include("myscript.php");

それとも私が本当に心配してはいけないことですか?

4

8 に答える 8

16

私は通常、手動で、または次のように定数を設定します。

define('ROOT', dirname(__FILE__));

それからする

require ROOT . '/include/file.php';
于 2009-11-18T11:02:37.077 に答える
8

を使用して簡単な速度テスト スクリプトを作成しmicrotime(true)ました。100 万回の反復で次の 5 つのメソッドをテストします。

// Absolute path.
include('/home/ftpuser/public_html/includes/myscript.php');

// Predefined path.
define('PATH', '/home/ftpuser/public_html/includes/');
include(PATH . 'myscript.php');

// Relative path.
include('myscript.php');

// Using set_include_path().
set_include_path('/home/ftpuser/public_html/includes/');
include('myscript.php');

// Superglobal path.
include(dirname(__FILE__) . '/myscript.php');


次の結果が得られました(秒単位):

    絶対パス: 263.222
    定義済みパス: 263.545
    相対パス: 301.214
    set_include_path() の使用: 302.396
    スーパーグローバルパス: 269.631


これらの結果に基づく私の意見は、事前定義されたパスを使用することです。これは、絶対パスを超えるだけの最速だからです。ただし、絶対パスには、変更が必要な場合にすべてのファイルで変更する必要があるという欠点があります。

これが役に立ったことを願っています。:)

PS
defineset_include_path()スクリプトの実行中に 1 回だけ使用されました (これらはループの外にあります)。

于 2013-02-12T20:13:58.200 に答える
8

これは、99% の場合に最適な方法です。

include(dirname(__FILE__)."/includes/myscript.php");

これは最終的に絶対パスになります。つまり、無視されますinclude_path。これは、私の経験ではインクルード関連のバグが多数発生する既知のソースです...

ただし、パフォーマンスに関しては、絶対パスと相対パスに大きな違いがあるとは思えません。これは一種のマイクロ最適化であり、長期的には何の意味もありません。include_pathさらに追加しない限り、通常は 2 ~ 3 個しかありません。よくある 2 つの原因は、インストールされている./場所へのパスとパスです。pear

于 2009-11-18T11:02:42.620 に答える
3

オプション 2 のように、絶対にパスをハードコーディングしないでください。良い代替手段は次のとおりです。

define('BASE_DIR', '/home/ftpuser/public_html/includes');
include(BASE_DIR . '/myscript.php');
include(BASE_DIR . '/myscript2.php');
include(BASE_DIR . '/myscript3.php');
include(BASE_DIR . '/myscript4.php');

おそらく 5 ~ 50 個のインクルードがあることを考えると (私は推測しています)、私はそれについてあまり心配しません。相対パスを使用してください。インクルード時間の差は目立ちません。大規模な Web アプリケーションを開発していて、何百もある場合、それは別の話かもしれません...

于 2009-11-18T11:02:23.837 に答える
2

アプリの初期化時にインクルード パスを設定することで、インクルード ディレクトリ/ライブラリをセットアップする傾向があります。

set_include_path("/home/ftpuser/public_html/includes");
include("myscript.php");

Zend フレームワークは、ライブラリ クラスをロードするために同様のことを行います。

于 2009-11-18T11:02:28.640 に答える
1

絶対パスを使用しない場合、phpは一致するものが見つかるまで、すべてのインクルードパスでファイルを見つけようとします。

必要な数のインクルードパスを追加できるため、まれに、スクリプトの速度が低下する可能性があります。
絶対パスを使用して(たとえばフレームワークを初期化するために)多くのファイルを含める場合は、スクリプトを少し高速化できます...

同じ相対パス/ファイル名のペアがファイルシステムで複数回発生する場合にも問題が発生する可能性があると思います。したがって、別の発生が必要になる可能性がある場合、phpは最初の発生を選択します。

于 2009-11-18T11:00:51.840 に答える
1

最も重要なことは、最初に絶対パスを介してファイルをインクルードしない場合に、最大量のrequire/include呼び出しが最初に言及されたパスにトラップされるように、インクルード パスを配置することです。

ライブラリのパスを変更すると、インクルード パスを 1 か所で変更するのではなく、ライブラリを参照するすべてのファイルを個別に変更することになるため、絶対パスを介してすべてを含めることに依存することは維持が困難です。

于 2009-11-18T11:23:57.783 に答える
0

それぞれの実行にかかる時間をチェックして、すべてのメソッドをテストすることをお勧めします。個人的には、これについて心配することはなく、相対パスを使用しただけです。

絶対パスの方が少し速いと思いますが、エラーで何が起こるのか疑問に思う価値があるかもしれません。ユーザー画面への完全なファイルパスを吐き出し(明らかにerror_reportingをオフにします)、これによりセキュリティリスクが発生しますか?

于 2009-11-18T11:01:01.997 に答える