Php 取决于页面的条件HTML类

Php 取决于页面的条件HTML类,php,class,if-statement,directory,Php,Class,If Statement,Directory,我正在寻找一种方法将其引入PHP: 如果用户在“contact.php”上,则插入“…” 现在,我有这个: <?php if(stripos($_SERVER['REQUEST_URI'], '/contact.php')) {echo '<li class="current">';} else{echo '<li>';} ?> 然而,出于某种原因,这似乎不起作用 另外,我想知道是否有一种方法可以将它应用于多个页面(在一个目录中),而不使用“数组”,因此

我正在寻找一种方法将其引入PHP:

如果用户在“contact.php”上,则插入“…”

现在,我有这个:

<?php
if(stripos($_SERVER['REQUEST_URI'], '/contact.php'))
{echo '<li class="current">';}
else{echo '<li>';} ?>

然而,出于某种原因,这似乎不起作用

另外,我想知道是否有一种方法可以将它应用于多个页面(在一个目录中),而不使用“数组”,因此基本上说:

如果用户位于目录a中的文件上,则回显“…”。如果没有,则回显“…”

编辑: 我明白了为什么它不起作用,但我不明白。基本上,我编辑了一个HTML5模板,并用header.php和footer.php替换了每个页面的公共脚本。然而,class=“current”在每个单独的HTML页面上都位于不同的位置,现在它是一个常见的PHP标题。当我链接到如下标题时,my header.php中的函数可以工作:

<?php
require "header.php";
?>
<?php
require "http://localhost/header.php";
?>

但当我像这样链接到标题时,它不起作用:

<?php
require "header.php";
?>
<?php
require "http://localhost/header.php";
?>

但是,my header.php中的所有其他信息都将通过。。我相信只有这一个功能停止工作。 我是不是错过了一些很简单的东西?如果是这样,请原谅我…

试试这个:

if($_SERVER['REQUEST_URI'] == 'contact.php'){
    echo '<li class="current">';
} else{
    echo '<li>';
}
if($\u服务器['REQUEST\u URI']=='contact.php'){
echo'
  • ; }否则{ 回音“
  • ”; }
  • 如果你的联系人页面有任何参数,你可以去掉这些参数

    $urlParts = explode('?', $_SERVER['REQUEST_URI'], 2);
    $page = $urlParts[0]; // <-- This will give you just contact.php for your example.
    
    $urlParts=explode(“?”,$\u SERVER['REQUEST\u URI',2);
    $page=$urlParts[0];// stripos()应该很难与FALSE进行比较,以确定它是否真的找到了该项

    与数组一样,字符串中的第一个字符是0(零),而不是1。如果针字符串的位置在草堆字符串的开头,那么stripos()将返回0,因为0是草堆的第一个位置。但是if()将0视为false

    所以你应该说

    if(stripos($_SERVER['REQUEST_URI'], '/contact.php') !== false)
    

    您的代码可能无法工作,因为如果在开头找到字符串“/contact.php”,stripos将返回0,然后将其解释为false。您应该使用!==接线员对假

    if(stripos($_SERVER['REQUEST_URI'], '/contact.php') !== false) { ... }
    
    关于你的另一个问题: 只需将REQUEST_URI字符串分成几个部分,然后检查倒数第二个元素是否与您的目录匹配。虽然总的来说可能有更好的方法来解决你的问题

    编辑: 根据Can Celik的评论,我建议您使用parse_url()函数[1]来分解整个请求URI。然后,您可以从返回的数组访问URL的任何部分,并按照我之前的建议拆分“路径”部分:

    $parts = parse_url($_SERVER['REQUEST_URI']);
    $segments = explode("/", $parts["path"]);
    $parent_dir = ""
    if(count($segments) > 1) {
        $parent_dir = $segments[count($segments)-2]
    }
    if($parent_dir == "my_parent_dir") {
        echo '<li class="current">';
    } else {
        echo '<li>';
    }
    
    $parts=parse_url($_SERVER['REQUEST_URI']);
    $segments=分解(“/”,$parts[“path”]);
    $parent_dir=“”
    如果(计数($segments)>1){
    $parent_dir=$segments[计数($segments)-2]
    }
    if($parent\u dir==“my\u parent\u dir”){
    echo'
  • ; }否则{ 回音“
  • ”; }

  • [1]

    如果他在一个带有url参数的页面上,比如www.test.com/login.php?redirectuURL=/contact.php?我不认为这是一个带有url参数的页面,但我不确定。URL看起来至少不是这样的。也许,但这不是他的问题,我想回答这个特定的问题,而不是试图预测他可能需要或不需要的其他场景。编辑:顺便说一句,登录后重定向的设计会让我非常担心,而且似乎会带来一些真正的潜在安全问题,更不用说可能会严重破坏用户流。@KeithTyler:+1回答具体问题;我也同意,如果您添加参数,最终会导致URI损坏,尽管我认为这是一个潜在的安全问题,在登录后将所需的重定向URL作为参数。你能澄清你的担忧吗?@agent_harris:由于不知道应用程序的其他安全注意事项,我担心攻击者会通过“url黑客”重定向参数来发现未经授权的页面,甚至仅仅通过破坏流来制造问题。最好使用一些不直接用作路径的标识符,并使用一些查找表将这些标识符映射到所需的目的地。假设我有一个基本的access登录,我登录到url“login.php?redirect=admin.php”,然后当我登录时,它会把我带到admin.php,我不应该看到它,因为我不是管理员!如果他在一个带有url参数的页面上,比如www.test.com/login.php?redirectuURL=/contact.php?那当然是真的。最好的方法是分解整个路径,例如使用parse_url()函数。您想要的是在当前文件中包含另一个源文件。第一个版本是正确的,因为它通过本地文件系统访问所需的文件。第二个选项是一个实际的HTTP请求,如浏览器将执行的请求,但在本例中,它是在服务器的本地网络系统上运行的。这意味着header.PHP中的PHP代码的执行就像是来自浏览器的原始请求一样,因此request_URI包含/header.PHP,并且当前文件中只包含处理过的内容。