Дополнительно
Получить абсолютный путь текущего скрипта
Я искал высоко и низко и получаю много различных решений и переменных, содержащих информацию, чтобы получить абсолютный путь. Но они, кажется, работают в одних условиях, а не в других. Есть ли один серебряный способ получить абсолютный путь исполняемого скрипта в PHP? Для меня скрипт будет работать из командной строки, но решение должно работать так же хорошо, если оно выполняется в Apache и т. Д.
Разъяснение: изначально выполненный скрипт, не обязательно файл, в котором решение закодировано.
238
15
Константа
__FILE__
даст вам абсолютный путь к текущему файлу.Обновить:
Вопрос был изменен, чтобы спросить, как получить изначально выполненный скрипт вместо текущего запущенного скрипта. Единственный (??) надежный способ сделать это - использовать функцию
debug_backtrace
.Примеры для:
https:// (www.)example.com/subFolder/myfile.php?var = blabla # 555
Уведомление!:
DIRECTORY_SEPARATOR
возвращает\
для хостинга типа Windows вместо/
.& Лт; br / >
Для WordPress
Если вы поместите это в включенный файл, он распечатает путь к этому включению. Чтобы получить путь к родительскому сценарию, замените
__FILE__
на$ _SERVER ['PHP_SELF']
. Но имейте в виду, что PHP_SELF - это риск безопасности!Из руководства:
< blockquote > Каталог файла. При использовании внутри включения возвращается каталог включенного файла. Это эквивалентноdirname (__FILE__) < / code >. Это имя каталога не имеет конечной косой черты, если это не корневой каталог. < / blockquote > < blockquote > < b >
__ FILE__ < / code > < / b > всегда содержит абсолютный путь с разрешенными символическими ссылками, тогда как в более старых версиях (чем 4.0.2) он содержал относительный путь при некоторых обстоятельствах. < / blockquote >
Примечание :
__DIR__
был добавлен в PHP 5.3.0.Правильное решение - использовать функцию
get_included_files
:Это даст вам абсолютный путь исходного скрипта, даже если:
Вот два тестовых сценария; основной скрипт и включенный файл:
И результат; обратите внимание на текущий каталог:
Если вы хотите получить текущий рабочий каталог , используйте
getcwd ()
< http://php.net/manual/en/function.getcwd.php>
__FILE__
вернет путь с именем файла, например, в XAMPPC: \ xampp \ htdocs \ index.php
вместоC: \ xampp \ htdocs \
даст abolute route текущего файла, из которого вы требуете маршрут, маршрут вашего каталога сервера.
пример файлов:
www / http / html / index.php; если вы поместите этот код в свой index.php, он вернет:
<?php echo dirname (__FILE__); // это вернется: www / http / html /
www / http / html / class / myclass.php; если вы поместите этот код в свой myclass.php, он вернет:
<?php echo dirname (__FILE__); // это вернется: www / http / html / class /
Просто используйте ниже:
он дает вам текущий каталог script (скрипт, в который вы поместили этот код) без конечной косой черты. это важно, если вы хотите включить другие файлы с результатом
Если вы ищете абсолютный путь относительно корня сервера, я обнаружил, что это работает хорошо:
Вот полезная функция PHP, которую я написал для этого точно. Как поясняется в первоначальном вопросе, он возвращает путь, с которого был выполнен сценарий initial , а не файл, в котором мы сейчас находимся.
Это то, что я использую, и это работает в средах Linux. Я не думаю, что это будет работать на компьютере с Windows...
попробуйте это на своем сценарии
Самый простой способ получить абсолютный путь изначально выполненного скрипта из этого «основного» скрипта и любого скрипта, включенного в
include
,require
,require_once
, - это сохранить его в константе в начале основного скрипта: ,__FILE__
возвращает путь текущего скрипта. Используемый внутри включенного скрипта возвращает путь к включенному файлу , а не скрипт, изначально запущенный, как запрашивает OP:Решение о хранении
__FILE__
в константе проще и быстрее, чем извлечение пути с помощьюdebug_backtrace ()
Вышеуказанное решение подходит, когда есть один «основной» скрипт, который «включает» любой другой необходимый скрипт, как в большинстве веб-приложений.
Если это не так и может быть несколько «внутренних скриптов», то, чтобы избежать переопределения и сохранить правильный путь внутри константы, каждый скрипт может начинаться с:
Для скрипта, запущенного под веб-сервером
$ _SERVER ['SCRIPT_FILENAME']
, будет содержаться полный путь к первоначально называемому скрипту, поэтому, вероятно, ваш index.php.realpath ()
не требуется в этом случае.Для скрипта, запускаемого с консоли
$ _SERVER ['SCRIPT_FILENAME']
, будет содержать относительный путь к вашему первоначально вызванному сценарию из вашего текущего рабочего реж. Поэтому, если вы не изменили рабочий каталог внутри своего скрипта, он перейдет к абсолютному пути.