Php 动态创建我的应用程序的完整URL

Php 动态创建我的应用程序的完整URL,php,Php,我可以使用 define("ROOT",dirname(__FILE__); 但我需要动态获取应用程序所在位置的完整URL 我的驱动器上的示例位置可能位于: c:\htdocs\website_name\index.php 那么我需要: http://localhost/website_name/ 最好使用正确的协议(http或https) 我目前正在对配置文件中应用程序的位置进行硬编码,但已经看到它可以动态完成 有什么想法吗? 我假设使用类似$\u SERVER['SERVER\

我可以使用

 define("ROOT",dirname(__FILE__); 
但我需要动态获取应用程序所在位置的完整URL

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

 c:\htdocs\website_name\index.php
那么我需要:

 http://localhost/website_name/
最好使用正确的协议(http或https)

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

有什么想法吗? 我假设使用类似$\u SERVER['SERVER\u NAME']的东西可以为我命名,但我不确定如何让变量的其余部分工作


有什么想法吗?

服务器名称不会自动反映实际的域名和路径。这在VirtualHost配置文件中定义,通常在apache/conf/extra中。您需要结合SERVER\u协议和SERVER\u端口解析HTTP\u主机,以获得真正的域名

$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(或脚本文件名)开头的所有内容。

我不确定是否理解您的意思,您的意思是将apache服务器配置为将文档根指向“C:\htdocs”?@Deleteman否。问题是如何在
c:\htdocs\website\u name\index.php
中编写代码,并将其作为
http://localhost/website_name/
。顺便说一句,好问题,我自己很快就会解决这个问题那么
/website\u name/
呢?请看我的编辑。它很快,因此$path的字符串剪切可能不正确。所以你可能需要调整它。