【问题标题】:How do you recieve your current php file url你如何收到你当前的 php 文件 url
【发布时间】:2012-11-02 17:34:42
【问题描述】:

我想让导航更容易,所以让我们说当我有页面调用时

http://test.nl/admin/xxx.php?id=423

如果我想使用不同的参数重定向到同一页面。我可以的

Header("Location: xxx.php$rest");

但是有没有办法获得 xxx.php 动态? 我试过 $_SERVER[PHP_SELF] 它在本地主机上工作,但在我的服务器上却不行。 我得到:http://test.nl/test.nl/admin/xxx.php?id=423

【问题讨论】:

  • $_SERVER 取决于服务器环境。您需要稍微搜索一下该站点,那里有一些很好的建议,因为您可以想象您不是第一个遇到问题的人。还可以查看常用的:php.net/reserved.variables.server - 以及手册页上的用户注释。

标签: php url navigation uri


【解决方案1】:

尝试以下方法:

$basename = basename($_SERVER['REQUEST_URI']);

这应该会在 URL 中为您提供文件的名称,包括扩展名。当然,如果您希望文件名没有文件扩展名,那么试试:

$basename = str_replace(".php","",basename($_SERVER['REQUEST_URI']));

【讨论】:

    【解决方案2】:

    您应该使用 URL 重写。看看 Zend 框架中的组件Zend_Router

    为了获取当前文件的 URL:

    <?php
    function curPageURL() {
         $pageURL = 'http';
         if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
         $pageURL .= "://";
         if ($_SERVER["SERVER_PORT"] != "80") {
              $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
         } else {
              $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
         }
         return $pageURL;
    }
    
    echo curPageURL();
    
    ?>
    

    【讨论】:

      【解决方案3】:

      只需重定向到/xxx.php?$rest。如果您不离开目录,则不需要完整地址。

      【讨论】:

      • 我知道,但我正在寻找一种方法来提取“xxx.php”而不是完整的 url
      • 要获取文件名,您可以使用basename($_SERVER['REQUEST_URI']);
      【解决方案4】:

      我看不出它在生产站点上不起作用,但在本地起作用。

      header("Location: {$_SERVER['REQUEST_URI']}?$rest");
      

      【讨论】:

        【解决方案5】:

        您可以使用 $_SERVER['SCRIPT_NAME'] 变量来检索当前脚本的路径,即当前文件的完整路径和文件名

        有关 $_SERVER 变量的更多详细信息,请参阅下面 url 中提到的文档

        http://in3.php.net/reserved.variables.server

        【讨论】:

          【解决方案6】:

          你不需要当前的url,你可以链接新的查询字符串:

          带有html链接:

          <a href="?foo=bar">
          

          或php重定向:

          Header("Location: ?foo=bar");
          

          【讨论】:

            【解决方案7】:

            我喜欢在这些情况下使用正则表达式。 (或者更确切地说,其他答案都不适用的情况,例如访问与此相关的文件。)

            $foldername = preg_replace('/(.*)(\/admin\/.*)/', '$2', dirname(__FILE__));

            $filename = preg_replace('/(.*)(\/admin\/.*)/', '$2', __FILE__);

            请注意,\/admin\/ 位于第二个捕获组的开头。 $2 为 preg replace 提供了对整个捕获组的直接引用。因此 admin 必须是捕获组所在的 Web 根目录中的第一个文件夹。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-09-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-09-23
              • 2011-11-24
              • 2012-06-12
              • 2014-06-14
              相关资源
              最近更新 更多