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