preg_match, чтобы найти текущий каталог в URL - PullRequest
0 голосов
/ 12 мая 2010

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

Вот что у меня сейчас есть:

<?php
    $url = $_SERVER['REQUEST_URI_PATH'] = preg_replace('/\\?.*/', '', $_SERVER['REQUEST_URI']);
    $one = '/one/';
    $two = '/three/';
    $three = '/three/';
    $four = '/four/';
    $five = '/five/';

    echo $url;

    if (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($one)) == $one) {
        // URI path starts with "/one/"
        echo "The section is one.";
    }
    elseif (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($two)) == $two) {
        // URI path starts with "/two/"
        echo "The section is two.";
    }
    elseif (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($three)) == $three) {
        // URI path starts with "/three/"
        echo "The section is three.";
    }
    elseif (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($four)) == $four) {
        // URI path starts with "/four/"
        echo "The section is four.";
    }
    elseif (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($five)) == $five) {
        // URI path starts with "/five/"
        echo "The section is five.";
    }
?>

Я поместил в echo перед операторами if только для того, чтобы получить подтверждение значения $ url. Это выводит

/ CurrentDirectory / file.php

Однако сами условия ничего не соответствуют, и мое индивидуальное эхо для каждого раздела никогда не отображается.

Также, если есть более простой способ сделать это, тогда я открыт для предложений.

Спасибо

Ответы [ 3 ]

2 голосов
/ 12 мая 2010

Почему бы не использовать dirname ?

0 голосов
/ 12 мая 2010

Или вы можете сделать это с помощью parse_url

0 голосов
/ 12 мая 2010

Хорошо, у меня сейчас работает оригинальное решение:

<?php
    $_SERVER['REQUEST_URI_PATH'] = preg_replace('/\\?.*/', '', $_SERVER['REQUEST_URI']);
    $one = '/one/';
    $two = '/three/';
    $three = '/three/';
    $four = '/four/';
    $five = '/five/';

    echo $url;

    if (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($one)) == $one) {
        // URI path starts with "/one/"
        echo "The section is one.";
    }
    elseif (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($two)) == $two) {
        // URI path starts with "/two/"
        echo "The section is two.";
    }
    elseif (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($three)) == $three) {
        // URI path starts with "/three/"
        echo "The section is three.";
    }
    elseif (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($four)) == $four) {
        // URI path starts with "/four/"
        echo "The section is four.";
    }
    elseif (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($five)) == $five) {
        // URI path starts with "/five/"
        echo "The section is five.";
    }
?>

Но, следуя комментарию Эмиля, я теперь вижу, что есть намного более простой метод, и я также получил эту работу:

<?php   
    $section = dirname($_SERVER['PHP_SELF']) . "/";

    if ($section == "/one/") {
        echo "one";
    } elseif ($section == "/two/") {
        echo "two";
    } elseif ($section == "/three/") {
        echo "three";
    } elseif ($section == "/four/") {
        echo "four";
    } elseif ($section == "/five/") {
        echo "five";
    } elseif ($section == "//") {
        echo "global";
    }
?>

Я просто подумал, что выложу здесь оба метода на случай, если они пригодятся кому-то еще.

...