0

我需要动态找出脚本的基本 url。假设我在文件夹脚本中安装了一个脚本,脚本的基本 url 将是 http://www.example.com/script,假设我将它放在根目录中,它必须是http://www。例子.com

有没有办法动态找出这个?

使用basename(__DIR__),or不会给我带来想要的结果basename(__FILE__)getcwd()

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

我想在我的 index.php 中声明一个名为 ROOT_URL 的常量(一切都由这个文件加载),所以我可以在任何想要的项目中使用这个常量。

4

3 回答 3

1

几周前,我不得不在我的 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
于 2013-08-25T07:34:25.177 回答
0

在安东尼的帮助下修好了

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

  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 之后的所有内容并将根返回给我。

于 2013-08-25T07:54:48.613 回答
0

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

于 2013-08-25T07:33:26.203 回答