2010-11-18 2 views
5

Скажем, у меня есть URL, как это:PHP принимать аргументы из URL пути

http://www.mysite.com/forum/board1/sub-forum/topics/123

есть простой способ в PHP (не может использовать Htaccess), чтобы сделать этот URL и извлечь board1, sub-forum, topics и 123, поэтому я могу использовать их в базе данных, например? Есть ли какие-либо встроенные функции или мне придется писать свои собственные?

Спасибо,

Джеймс

ответ

10
explode('/', getenv('REQUEST_URI')); 

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

explode('/', strtok(getenv('REQUEST_URI'), '?')); 
+1

Спасибо :-) должен был подумать об этом сам - очень просто! – Bojangles

+1

Как насчет строки запроса? – Gumbo

+0

@ Gumbo Это не было требованием. Слияние этого массива с $ _GET тоже не сложно. – pestaa

1

Если вы уже настроили ваш веб-сервер для отправки этих запросов в ваш конкретный файл PHP, вы можете использовать parse_url и explode, чтобы получить и затем разделить запрос Путь Заинтересованное URI в своих сегментах:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 
$pathSegments = explode('/', $_SERVER['REQUEST_URI_PATH']); 
3

Вы можете, но без перенаправления запросов ваш веб-сервер просто возвращает ошибку 404 для несуществующих путей.

Однако вы можете использовать URL-адреса, такие как http://your.site.com/index.php/foo/bar/baz, а затем разделить URL-адрес на части, такие как @pestaa, которые затем можно разобрать на значения параметров.

+0

Ну, пути виртуальны - они взяты из базы данных и построены. Вы говорите, что переход к этому пути приведет к возврату 404, но все же выполнить PHP? – Bojangles

+0

Нет. Я имею в виду, если ваш веб-сервер не узнает, что все URL-адреса должны быть перенаправлены на PHP-скрипт, он будет искать соответствующий путь в файловой системе и возвращать ошибку 404, если она не существует. –

+0

Ах, спасибо за это. Я полагаю, что решение - использовать файлы HTAccess? Я * могу * редактировать правила mod_rewrite, но не рассчитывать на это. – Bojangles

2

Это взято из моей MVC http://www.phpclasses.org/package/6363-PHP-Implements-the-MVC-design-pattern.html

Ссылка устарела на минуту, я только что обновил его, чтобы он не имеет материал MVC в, и это можно назвать с getLoadDetails ($ _ URL) ; amd $ _URL будет точно таким же, как $ _GET, кроме того, что он получает данные из пути к папке.

function getLoadDetails(&$_URL){ 
      $filePath = $_SERVER['REQUEST_URI']; 
      $filePath = explode("/", $filePath); 

      for($i = 0; $i < count($filePath); $i++){ 
        $key = $filePath[$i]; 
        $i++; 
        $val = $filePath[$i]; 
        $keyName = urldecode($key); 
        $_URL[$keyName] = urldecode($val); 
      } 
    } 

У меня есть один вопрос, если Вы наклоняетесь использовать HTAccess как вы планируете справиться с путем к папке, пожалуйста, не говори мне ваша система будет создавать пути к папкам и индексный файл для каждого URL, который будет Trash ваш сервер Speed ​​и ваш хост ненавидят вас за это.

+0

Нет, нет, это было бы безумным! Создание всех каталогов просто безумно. Как я уже упоминал в других комментариях, я буду использовать HTAccess и, возможно, mod_rewrite. Спасибо за вашу помощь. – Bojangles

+0

ОК, тогда я просто, хотя я бы спросил LOL – Barkermn01

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