あるフォルダーから別のフォルダーにシンボリックリンクされたスクリプトがあります
/var/www/default/index.php
シンボリックリンクされている
/var/www/mysite/index.php
ただし、mysite からDIRを呼び出すと、パスはデフォルトで元のパスに解決されます。mysite パス (実際のフォルダーではなく、symlinked フォルダー) を返すようにするにはどうすればよいですか?
Web サーバー要求の場合
dirname($_SERVER['SCRIPT_FILENAME']) は、必要なものを提供します。
サーバーの構成によっては、 $_SERVER['PHP_SELF'] または REQUEST_URI に失敗しても、必要なものが得られる場合があります。
CLI(コマンドライン)の場合
これは、Web サーバーによって $_SERVER が追加されるため、cli (コマンド ライン) スクリプトでは機能しません。
幸いなことに、cli スクリプトを使用すると、はるかに簡単になります (Web サーバーをいじる必要がないため)。
必要なのは、スクリプトを開始したコマンド ラインを読むことだけです: http://php.net/manual/en/reserved.variables.argv.php。最初の引数 $argv[0] は常に、スクリプトの実行に使用された名前です。
symlink で現在のパスを取得したい場合は、ホスト OS に尋ねることができます。
$path = exec('pwd');
cli スクリプトの未解決の完全なシステム パスを探している場合、SCRIPT_PATH では不十分です。
php -f symlink/script.php
SCRIPT_FILENAMEにはsymlink/script.phpが含まれます
php ファイルへの未解決のパスを取得する php/gist を作成しました。
関数の結果は次のとおりです。
$ php -f subdir/mysymlink/subdir/mysymlink/subdir/mysymlink/app.php
PWD: /tmp/phpcode
SCRIPT_FILENAME: subdir/mysymlink/subdir/mysymlink/subdir/mysymlink/app.php
___FILE__ : /tmp/phpcode/app.php
getSymlink(): /tmp/phpcode/subdir/mysymlink/subdir/mysymlink/subdir/mysymlink