如何从URL修剪页面的当前文件名?

时间:2013-06-09 08:49:18

标签: php

我有一个方法,它看起来像这样:

private function setURL()
{
    $pageURL = 'http';

    if(isset($_SERVER["HTTPS"]) && $_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"];
    }

    if(substr($pageURL, -4) == ".php")
    {
        // damn. this is harder to recover from.
        $len = strlen(basename(__FILE__, '.php'));
        $len = strlen($pageURL) - $len;
        $pageURL = substr($pageURL, 0, $len);
    }
    if(substr($pageURL, -1) != "/")
    {
        $pageURL .= "/";
    }

    $this->url = $pageURL;
}

如果用户未输入文件名,则返回的网址符合预期,http://localhost/zenbb2。但是,如果用户这样做,则返回的URL在某种程度上是错误的,无论我尝试执行什么排列。例如,此代码在访问http://localhost时返回http://localhost/zenbb2/index.php,但在访问该网址时返回http://localhost/zenbb2

编辑 .htaccess文件的内容为:

Options -indexes

RewriteEngine on

此外,我的意思是当前的网址,如果我正在访问http://localhost/zenbb2/index.php,它会修剪网址中的index.php,以便我可以在我的代码中的不同位置使用它。理想情况下,最后,我可以像这样使用它:

$url = 'http://localhost/zenbb2';
echo "<link rel=\"{$url}/sample.css\" />"; // http://localhost/zenbb2/sample.css

3 个答案:

答案 0 :(得分:0)

您可以使用dirname来实现此目标:

$ php -a
> $url = 'http://localhost/zenbb2/index.php';
> echo dirname($url);
http://localhost/zenbb2

编辑: dirname始终删除字符串的最后一部分,因此请小心谨慎,以确保不会剥离太多,但在遍历URL或目录路径时它会很有用。

答案 1 :(得分:0)

更好的解决方案是创建一个php文件config.php,然后在其中指定常量,之后,每次要使用该URL时都包含该文件。此解决方案也在众所周知的框架中实现,例如Codeigniter。

这种方法更好,坦率地说,更稳定。例如,如果您在子目录(/zenbb2/sub/file.php)中有一个php文件,则URL目录将是zenbb2/sub,这显然不是您要查找的内容,而是您的静态文件将返回404,因为它们不存在。

答案 2 :(得分:0)

试试这个

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

这应该来自index.php

http://localhost/zenbb2/index.php