Попытка получить полный URL-адрес без имени файла в PHP

Я думал, что это будет просто, но я не могу найти переменную массива $_SERVER которой есть то, что я ищу.

Скажем, мой url – http://example.com/subdirectory/index.php Я хочу получить все, кроме имени файла – http://example.com/subdirectory/ .

Я знаю, что я мог бы легко сделать это с помощью некоторых манипуляций с строкой, но я хочу знать, есть ли var массива _server который я просто отсутствую. Я пробовал всех из них, чтобы посмотреть, что они дают, и я могу получить что угодно, НО что я ищу.

Их не будет, потому что это не полезный атрибут для отслеживания. Если текущий скрипт – это нечто иное, чем index.* То он не вернет правильный URL для текущего скрипта.

Однако это может привести к тому, что вы хотите:

 echo '//'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); 

Редактировать:
Кроме того, помимо установки онлайн-инструментария поиска php.net для Firefox и настройки его с помощью ключевого слова поиска (которое позволит вам подтянуть документацию по глобальному $_SERVER , введя в вашу строку URL-адреса нечто вроде « php $_server » ), вы также должны знать, что var_dump() и print_r() позволяют выводить полное содержимое любой переменной, включая массивы и объекты. Это очень полезно для отладки.

В вашем случае правильная обработка строк – лучшее решение.

Например:

 substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/') + 1); 

Для вас нет определенных переменных.

Вы можете использовать код ниже, чтобы получить полный базовый URL:

 // Base folder url $myBase = ( (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']); 

но, надеюсь, в большинстве случаев вам не потребуется полностью использовать все:

 // Base folder server root path $myBase = dirname($_SERVER['PHP_SELF']); 

Просто будьте осторожны, если вы используете какую-то систему маршрутов (mod_rewrite).

вы можете использовать dirname (), чтобы получить путь к URL-адресу.

Кажется, я не могу найти переменную массива $ _SERVER, у которой есть то, что я ищу.

потому что это вымышленная строка, существующая только в адресной строке браузера.
Части отправляются на сервер.

Я хочу знать, есть ли var массива _server

Это очень легко понять. просто print_r($_SERVER); действительно простой.

Я знаю, что я мог бы легко сделать это с помощью некоторых строковых манипуляций

Да. код, который вы должны написать, меньше, чем этот текст вопроса.

но с некоторой мануальной магией он может быть сведен к одной функции.