0

私はPHPのインクルードに悩まされています。次のファイル構造があります

htdocs

  • index.php
  • login.php

php_includes

  • db_conx.php
  • check_user_status.php

db_conx.php ファイル内で、変数 $number = 10; を作成しました。テスト用。

db_conx ファイルは、次のコードで check_user_status.php ファイルに含まれています。

include_once("db_conx.php");

これは正常に動作しています。つまり、$number をエコーし​​て 10 を取得できます。

ただし、次のコードを使用して、login.php の先頭に check_user_status.php ファイルを含めています。

include_once("php_includes/db_conx.php");

このページでは、このページ (check_user_status.php) で $number をエコーアウトできません。

このスクリプトを多くのページに含める必要があります (ユーザーがログインしているかどうかを確認するため)。私はパスで何か奇妙なことをしていますか?

4

3 に答える 3

2

相対パスの場合、これを行う必要があります。

include_once("../php_includes/db_conx.php");

これを分解するには。

現在の作業ディレクトリは、ブラウザでそのファイルにヒットした場合、最初は htdocs/ になります。

1 つ上のディレクトリ レベルの..バックアップ (つまり、htdocs と php_includes の両方を含むディレクトリ)

次に、php_includes をたどって db_conx.php に到達します。

これは、サブディレクトリ内のファイルを実行するときに問題になります。あなたと htdocs/subpages/ への page2.php を仮定します

同じ手順を踏んでも、同じ場所にたどり着くことはありません。

より適切な方法は、絶対位置からの相対パスを取得することです。私はドキュメント ルート (あなたの場合は htdocs) を使用するのが好きなので、次のようにします。

 include($_SERVER["DOCUMENT_ROOT"]."/../php_includes/db_conx.php");

どこで使用されても、ファイルシステム上の同じ場所を参照します。

于 2013-06-12T20:59:33.547 に答える
0

__DIR__魔法定数使えると思う

ファイルのディレクトリ。インクルード内で使用すると、インクルードされたファイルのディレクトリが返されます。これは dirname( FILE )と同等です。ルート ディレクトリでない限り、このディレクトリ名には末尾のスラッシュはありません。(PHP 5.3.0 で追加されました。)

これは、ネストされたインクルード ファイルに役立ちます。実際、ファイル パスは常に自動的に設定され、absolute paths.

于 2013-06-12T20:54:36.990 に答える
0

ファイル構造が正しい場合、php_includes が htdocs 内のディレクトリではないと仮定すると、次のようにする必要があります。

include_once("../php_includes/db_conx.php");
于 2013-06-12T20:59:46.897 に答える