2010-05-12 89 views
0

我試圖通過檢查URL中的最終目錄來檢測用戶正在查看的網站的當前部分。我使用PHP和正則表達式來做到這一點,我想我很接近,但不幸的是還沒有完成。preg_match在URL中查找當前目錄

這是我目前有:

<?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."; 
    } 
?> 

我放在回聲$ url的值的if語句只是爲了得到確認之前。這種輸出

/currentdirectory/file.php

但條件本身不匹配任何內容,我的每一個部分單獨回聲永遠不會顯示。

此外,如果有一個更簡單的方法做到這一點,那麼我接受建議。

感謝

+0

做,我看到了'/ currentDirectory所/'不同於'/一個/','/二/'...'/五類/'。這就是沒有人執行if分支的原因。你實際需要什麼? – 2010-05-12 14:27:49

+0

對不起,我可能沒有讓自己清楚。/currentdirectory /旨在表示活動目錄(/ one /,/ two /,/ three /等)。我想要一種方法來檢測哪個活動目錄是,然後採取適當的行動。我設法弄清了這一點,並已複製到下面的替代解決方案。 非常感謝。 – Ian 2010-05-12 15:33:02

回答

0

好吧,我已經得到了我原來的解決方案現在工作:

<?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"; 
    } 
?> 

我只是以爲我會在這裏發佈這兩種方法,以防他們對別人有用。

+1

另一個有用的語言結構是開關,它可以替代你的elseifs:http://php.net/switch – 2010-05-12 17:26:34

2

爲什麼不使用dirname

+0

因爲直到現在我還不知道它存在。 :)我只是在學習,但是這是一個有用的功能和更好的解決方案(見下文)。感謝您指出了這一點。 – Ian 2010-05-12 15:30:06

0

或者你可以用parse_url

+1

另一個很好的選擇,它可以以關聯數組的形式提供更多信息。在這種特殊情況下,可能比我需要的要多,但它仍然可以完成這項工作。 謝謝 – Ian 2010-05-12 17:09:11