У меня есть сценарий, который символически привязан из одной папки к другой
/var/www/default/index.php
который символически связан с
/var/www/mysite/index.php
Однако, когда я вызываю DIR из mysite, путь разрешает исходный путь по умолчанию. Как заставить его вернуть путь mysite (символическая папка, а не фактическая папка)
Для запросов веб-сервера
dirname ($ _ SERVER ['SCRIPT_FILENAME']) даст вам то, что вам нужно. В противном случае это будет $ _SERVER ['PHP_SELF'] или даже REQUEST_URI.
Для командной строки (командной строки)
это не будет работать в сценариях cli (командной строки), поскольку веб-сервер добавляет $ _SERVER.
К счастью, это намного проще с помощью скриптов cli (так как нет веб-сервера, с которым можно пообщаться).
Все, что вам нужно, это прочитать командную строку, которая запустила скрипт: http://php.net/manual/en/reserved.variables.argv.php . Первый аргумент $ argv [0] всегда является именем, которое использовалось для запуска скрипта.
Если вы ищете полный неразрешенный системный путь для скрипта cli, SCRIPT_PATH будет недостаточно.
php -f symlink/script.php
SCRIPT_FILENAME будет содержать symlink / script.php
Я создал php / gist, который получает неразрешенный путь к файлу php.
Вот результат функции:
$ 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