12

あるフォルダーから別のフォルダーにシンボリックリンクされたスクリプトがあります

/var/www/default/index.php

シンボリックリンクされている

/var/www/mysite/index.php

ただし、mysite からDIRを呼び出すと、パスはデフォルトで元のパスに解決されます。mysite パス (実際のフォルダーではなく、symlinked フォルダー) を返すようにするにはどうすればよいですか?

4

4 に答える 4

14

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] は常に、スクリプトの実行に使用された名前です。

于 2012-05-10T00:46:16.533 に答える
2

symlink で現在のパスを取得したい場合は、ホスト OS に尋ねることができます。

$path = exec('pwd');

于 2018-07-27T14:25:40.090 に答える
0

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               
于 2016-06-05T02:48:40.533 に答える