2015-04-17 6 views
2
define('QA_BASE_DIR', dirname(empty($_SERVER['SCRIPT_FILENAME']) ? __FILE__ : $_SERVER['SCRIPT_FILENAME']).'/'); 

В чем разница между __FILE__ и $_SERVER['SCRIPT_FILENAME']?

+1

'__FILE__' - это фактическое имя файла, содержащее ссылку на' __FILE__' (который может быть включенным файлом); '$ _SERVER ['SCRIPT_FILENAME']' - это имя скрипта, который запросил браузер –

+0

Они абсолютно идентичны. –

+0

@ HassanAzimi: они абсолютно НЕ идентичны. '$ _SERVER ['SCRIPT_FILENAME']' - это абсолютный путь к файлу запроса ... до того, как были соблюдены символические ссылки. '__FILE__' - это абсолютный путь к файлу, который содержит' __FILE__' ... после того, как были соблюдены символические ссылки. Чтобы проверить, является ли текущий файл запрошенным файлом: '__FILE__ == realpath ($ _ SERVER ['SCRIPT_FILENAME']);' –

ответ

1

Blackquoting из http://www.qualitycodes.com/tip/17/difference-between-serverscriptfilename-and-file.html:

$_SERVER['SCRIPT_FILENAME'] переменных будет возвращать то же путь, будет ли она использоваться в основном файле или включаемый файл с другой стороны __FILE__ переменными вернут вам путь включаемого файла, если используются внутри включенный файл и путь к основному файлу, если он используется в основном файле. Я имею в виду основной файл тот, чье имя отображается в адресной строке браузера.

+1

также ... '$ _SERVER ['SCRIPT_FILENAME']' перед символьными ссылками. '__FILE__' после символьных ссылок соблюдается, т. Е. Применяется функция' realpath() ' –

+0

Также' __FILE__' использует 'DIRECTORY_SEPARATOR', тогда как' $ _SERVER ['SCRIPT_FILENAME'] 'использует'/' – Theraot

3

Из документации PHP разница в том, что $_SERVER['SCRIPT_FILENAME'] содержит абсолютный путь к текущему сценарию и в режиме CLI может содержать относительный путь.

__FILE__ будет содержать путь к включенному файлу, если он используется внутри включенного файла, или путь к основному файлу, если он используется в основном файле.

Смежные вопросы