3

我可以使用我的应用程序根目录

 define("ROOT",dirname(__FILE__); 

但我需要动态获取我的应用程序所在位置的完整 URL。

我的驱动器上的示例位置可能位于:

 c:\htdocs\website_name\index.php

那么我需要:

 http://localhost/website_name/

最好使用正确的协议(http 或 https)

我目前在我的配置文件中硬编码应用程序的位置,但已经看到它可以动态完成。

有任何想法吗?我假设使用类似 $_SERVER['SERVER_NAME'] 的东西可以给我名字,但我不知道如何让他的其余变量工作。

有任何想法吗?

4

1 回答 1

0

SERVER_NAME 不会自动被告知反映实际的域名和路径。这通常在 apache/conf/extra 中的 VirtualHost 配置文件中定义。您需要结合 SERVER_PROTOCOL 和 SERVER_PORT 解析 HTTP_HOST 以获取真正的域名。

$domain =  $_SERVER['HTTP_HOST'];
$protocol = (strpos('https', strtolower($_SERVER['SERVER_PROTOCOL'])))
          ? 'https'
          : 'http';
$port = ($_SERVER['SERVER_PORT'] != 80 || $_SERVER['SERVER_PORT'] != 443 && $protocol != "https")
      ? ":".$_SERVER['SERVER_PORT']
      : "";

$path = sub_str(str_pos("index.php", $_SERVER['PHP_SELF']), -1,  $_SERVER['PHP_SELF']);

$done = $protocol . "://".$domain.$protocol.$path;

代码未经测试,但应该向您展示流程。

编辑:至于您的路径名,您应该解析 PHP_SELF 变量,并删除从 index.php (或您的脚本文件名)开始的所有内容。

于 2012-12-19T11:30:19.233 回答