1

PHP内で現在実行されているファイルのフルパスを取得しようとしています。

realpath()スクリプトファイル名なしのパスを返します。
pathinfo()分解するためのパス全体を渡さずに使用することはできません。
__FILE__呼び出し元のファイルのパス(つまり、__FILE__定数が呼び出された場所)を取得します。これは、included file;内にある可能性があります。欲しくない。

$_SERVER変数&はフルパスを返しませんREQUEST_URISCRIPT_NAMEPHP_SELF

最も有望なのは、警告以外の$_SERVER変数です。SCRIPT_FILENAME

スクリプトがCLIを使用して、file.phpや../file.phpなどの相対パスとして実行される場合、$ _SERVER['SCRIPT_FILENAME']にはユーザーが指定した相対パスが含まれます。

$_SERVER['SCRIPT_FILENAME']などのリターンを正確に知りたいのです/home/site/public_html/index.phpが、それを使用してもすべてのインスタンスで安全に使用できるかどうかは100%わかりません。

後者は使用するのに最適な方法ですか?CLIとは別に、通常のWebリクエストに対して常に正しいパスを返しますか?

4

3 に答える 3

2

これは機能するはずです:

$a = get_included_files();
echo $a[0];

get_included_files()ドキュメントからの引用:

最初に呼び出されたスクリプトは「インクルードファイル」と見なされるため、includeおよびfamilyによって参照されるファイルと一緒に一覧表示されます。

テスト

<!-- main.php -->
<?php include "middle.php"; ?>

<!-- middle.php -->
<?php include "inner.php"; ?>

<!-- inner.php -->
<?php var_dump(__FILE__, $_SERVER["PHP_SELF"], get_included_files()); ?>

出力

string(21) "C:\inetpub\wwwroot\inner.php"
string(9) "/main.php"
array(3) {
  [0]=>
  string(20) "C:\inetpub\wwwroot\main.php" <-- this is what you are looking for
  [1]=>
  string(22) "C:\inetpub\wwwroot\middle.php"
  [2]=>
  string(21) "C:\inetpub\wwwroot\inner.php"
}
于 2012-10-31T08:03:01.590 に答える
1

現在のファイルが必要な場合は、グローバルインスタンスを使用してファイルを取得できます

__FILE__

詳細については、 http://php.net/manual/en/language.constants.predefined.phpを参照してください。ファイルが配置されているディレクトリを取得する場合

// PHP < 5.3 
dirname(__FILE__);

// PHP > 5.3 
__DIR__

http://php.net/manual/en/language.constants.predefined.phpおよびhttp://nl1.php.net/manual/en/function.dirname.phpを参照してください。

編集:現在実行中のスクリプトを取得するには、

$_SERVER['SCRIPT_FILENAME']

これにより、実行されたファイルのファイル名が返されます。詳細については、 http://php.net/manual/en/reserved.variables.server.phpを参照してください。

于 2012-10-31T07:56:41.077 に答える
0

使用できますdirname(__FILE__);。または、php>5.3を使用している場合は__DIR__;

マニュアル: http: //php.net/manual/en/language.constants.predefined.php

于 2012-10-31T07:55:51.730 に答える