返回安装脚本的URL


Returning the URL where a script is installed

我需要动态地找到脚本的基本url。假设我已经在文件夹脚本中安装了一个脚本,脚本的基本url将是http://www.example.com/script,假设我把它放在根上,它必须是http://www.example.com

有没有一种方法可以动态地发现这一点?

使用basename(__DIR__),basename(__FILE__)getcwd()不会给我带来期望的结果。

尝试过类似echo $_SERVER['SERVER_NAME'] . dirname($_SERVER['REQUEST_URI']);的东西但这当然总是会返回当前页面的url。

我想在index.php中声明一个名为ROOT_URL的常量(所有内容都由该文件加载),这样我就可以在任何希望的项目中使用这个常量。

几周前,我不得不在MVC实现中讨论同样的问题。

好了:

public static function RealDirname($path)
{
    $path = dirname($path);
    if($path[0] == '''') //Windows servers tend to mess up
        $path[0] = '/';
    $lastChar = strlen($path) - 1;
    if($path[$lastChar] != '/')
        $path .= '/';
    return $path;
}
public static function GetAbsolutePath()
{
            global $config;
    if(empty($config["base_path"]))
        $config["base_path"] = self::GetDomainURL();
    return $config["base_path"].(self::RealDirname($_SERVER['PHP_SELF']));
}
public static function GetDomainURL()
{
    return (isset($_SERVER['HTTPS']) ? 'https://' :'http://').$_SERVER['HTTP_HOST'];
}

只需调用getAbsolutePath,就会返回带有URL的整个路径:)

在位于以下位置的页面上尝试:

http://localhost:8080/old/test.php

返回GetAbsolutePath:

http://localhost:8080/old/

和GetDomainURL:

http://localhost:8080

你试过$script_filename = $_SERVER['SCRIPT_FILENAME'];吗你可以在这里看看http://php.net/manual/en/reserved.variables.server.php

在Anthony 的帮助下修复了它

稍微改变了他第一次提交的方法:

  public static function RealDirname($path)
{
    $path = dirname($path);
    if($path[0] == '''') //Windows servers tend to mess up [everything]
        $path[0] = '/';
    $lastChar = strlen($path) - 1;
    if($path[$lastChar] != '/')
        $path .= '/';
    return $path;
}
public static function getAbsolutePath()
{
        $path = (isset($_SERVER['HTTPS']) ? 'https://' :'http://').$_SERVER['HTTP_HOST'];
        $path = $path.self::RealDirname($_SERVER['PHP_SELF']);
        return substr($path, 0, strpos($path, "index.php"));
}  

去掉index.php之后的所有内容,并返回根目录。