Какая разница между $_SERVER ['PHP_SELF'] и $_SERVER ['SCRIPT_NAME']?

У меня есть инфраструктура php, и я использовал $_SERVER['SCRIPT_NAME'] для оптимизации переносимости. Таким образом, мне больше не нужно настраивать путь вручную.

$this->base_url = str_replace('index.php', '', 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']);

Но я заметил, что $_SERVER['SCRIPT_NAME'] и $_SERVER['PHP_SELF'] возвращает ту же строку. Итак, какая разница? Как выбрать между ними?

Ответ 1

Разница

http://sandbox.phpcode.eu/g/3e38d.php/test

Script name - абсолютный путь к файлу.

PHP_SELF - это script, в котором вы находитесь (наряду с "path" после .php)

Ему нравится $_SERVER['SERVER_NAME'] и $_SERVER['HTTP_HOST']

http://sandbox.phpcode.eu./g/f5093.php

http://sandbox.phpcode.eu/g/f5093.php

укажите одно различие

Ответ 2

SCRIPT_NAME

Содержит текущий путь script. Это полезно для страниц, которые должны указывать на себя. Константа __FILE__ содержит полный путь и имя файла текущего (т.е. Включенного) файла.

PHP_SELF

Имя исполняемого файла script, относящегося к корню документа. Например, $_SERVER['PHP_SELF'] в script по адресу http://example.com/test.php/foo.bar будет /test.php/foo.bar. Константа __FILE__ содержит полный путь и имя файла текущего (т.е. Включенного) файла. Если PHP работает как процессор командной строки, эта переменная содержит имя script с PHP 4.3.0. Раньше он не был доступен.

источник php.net

Есть одно:

Отъезд http://www.yoursite.com/example/index.php/dir/test

in $_SERVER['PHP_SELF'] == '/example/index.php/dir/test';

in $_SERVER['SCRIPT_NAME'] == '/example/index.php';

ETA: Пробовал себя

Пробовал это на localhost http://127.0.0.1:8887/index.php/dir/test

echo $_SERVER['PHP_SELF'] . "<br />";
echo $_SERVER['SCRIPT_NAME'];

Выход:

/index.php/dir/test 
/index.php