Получить текущий каталог 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