Как я могу получить текущий веб-каталог из URL? - PullRequest
0 голосов
/ 16 июля 2010

Если у меня есть URL-адрес http://www.example.com/sites/dir/index.html,, я бы хотел извлечь слово «сайты».Я знаю, что должен использовать регулярные выражения, но по некоторым причинам мои знания о них не работают на PHP.

Я пытаюсь использовать:

 $URL = $_SERVER["REQUEST_URI"];
 preg_match("%^/(.*)/%", $URL, $matches);

Но я, должно быть, делаю что-то не так,Мне также хотелось бы, чтобы в нем была функция catch, при которой, если она находится на главном сайте, www.example.com, она будет использовать слово «MAIN»

Редактировать: извините, я знаю о dirname...Это полный путь к каталогу.Я хочу только первый каталог .... Так что если его www.example.com/1/2/3/4/5/index.html, то он возвращает только 1, а не / 1/2/3/4/5 /

Ответы [ 5 ]

2 голосов
/ 16 июля 2010

Используйте функцию dirname следующим образом:

$dir =  dirname($_SERVER['PHP_SELF']);
$dirs = explode('/', $dir);
echo $dirs[0]; // get first dir
1 голос
/ 16 июля 2010

Используйте parse_url, чтобы получить путь от $_SERVER['REQUEST_URI'], а затем вы можете получить сегменты пути с помощью explode:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = explode('/', substr($_SERVER['REQUEST_URI_PATH'], 1));

echo $segments[1];
1 голос
/ 16 июля 2010

Функция dirname должна дать вам то, что вам нужно

http://us3.php.net/manual/en/function.dirname.php

<?php
    $URL = dirname($_SERVER["REQUEST_URI"]);
?>
0 голосов
/ 19 марта 2017

Простой и надежный способ:

$currentWebDir = substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT']));

Если вы беспокоитесь о DIRECTORY_SEPARATORS, вы также можете сделать:

$currentWebDir = str_replace('\\', '/', substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT'])));

Также следует помнить о проблемах mod_rewrite, упомянутых FrancescoMM

0 голосов
/ 04 мая 2013

Просто хотел бы порекомендовать дополнительно проверить наличие префикса "/" или "\" и использовать DIRECTORY_SEPARATOR:

$testPath = dirname(__FILE__);
$_testPath = (substr($testPath,0,1)==DIRECTORY_SEPARATOR) ? substr($testPath,1):$testPath;
$firstDirectory = reset( explode(DIRECTORY_SEPARATOR, dirname($_testPath)) );
echo $firstDirectory;
...