Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上使用PHP获取完整URL不需要';行不通_Php_Windows_Iis 7_Query String - Fatal编程技术网

在Windows上使用PHP获取完整URL不需要';行不通

在Windows上使用PHP获取完整URL不需要';行不通,php,windows,iis-7,query-string,Php,Windows,Iis 7,Query String,我正在尝试为我的一个站点构建一个语言开关,但是,由于宿主必须是一个带有PHP的Windows IIS,我无法获得访问者查看的页面的完整URL 假设我在domain.com/page.php?id=23上,我使用老式的 $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 是一个空字符串 因此,我尝试了在stackoverflow上找到的一个解决方案来获取完整的URL function getFullUrl() {

我正在尝试为我的一个站点构建一个语言开关,但是,由于宿主必须是一个带有PHP的Windows IIS,我无法获得访问者查看的页面的完整URL

假设我在domain.com/page.php?id=23上,我使用老式的

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
是一个空字符串

因此,我尝试了在stackoverflow上找到的一个解决方案来获取完整的URL

function getFullUrl() {     
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
        $pageURL .= "://";          
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER['HTTP_X_REWRITE_URL'];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER['HTTP_X_REWRITE_URL'];//$_SERVER["REQUEST_URI"] blank
    }
    return $pageURL;
}
但还是什么都没有。我得到的是:domain.com/page.php?在某些情况下和doman.com/?在其他方面

在这种情况下,有没有一种确定的方法可以获取完整的url

多谢各位

编辑

这件事似乎无法在那台服务器上完成。我使用js+jQuery编写的客户端解决方案(我使用了purl插件)…可怕:)这里是:

    $('.lang').each(function(){
        $(this).click(function(e){
            e.preventDefault();
            var lingua = $(this).find('a').data('lang');
            var url = window.location.href;
            var urlParts = purl(url);

            if (url.indexOf("?") >= 0)
            {               
                var queryString = urlParts.attr('query').split('&');
                var langIndex = queryString.indexOf('lang');

                if(langIndex > -1)
                {
                    queryString.splice(langIndex,1);
                    var newUrl = urlParts.attr('protocol')+urlParts.attr('host')+urlParts.attr('path')
                    window.location = newUrl + '&lang='+lingua;
                }                   
                else window.location = url + '&lang='+lingua;
            }
            else
                window.location = url + '?lang='+lingua;
        });     
    });

这似乎是可行的,即使我不明白为什么如果“lang”已经在查询字符串中,脚本也不会识别它,并在每次单击链接时继续添加&lang。当然,它无论如何都能工作,但是看到像
&lang=en&lang=fr&lang=pl&lang=de这样的URL是很可怕的,这一行返回空的

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
因为它应该是这样的:

$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

您需要对键进行引号…请参见手册中的内容。

此行返回空值

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
因为它应该是这样的:

$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

您需要对键进行引号…请参阅手册。

getFullURL()是否返回了任何内容或只是一个截断的URL?它只返回domain.com,仅此而已。真令人沮丧你看到这个答案了吗?最重要的答案是在您似乎没有使用的IIS上使用
$\u服务器['PATH\u INFO']
。在getFullUrl函数中尝试一下。@R.Chappell仍然是一个空字符串。也许您应该
var\u dump($\u SERVER)并查看您要玩什么。应该用一堆东西填充它,如果没有,那么您的服务器/主机可能有问题。getFullURL()是否返回了任何内容或只是一个截断的URL?它只返回domain.com,仅此而已。真令人沮丧你看到这个答案了吗?最重要的答案是在您似乎没有使用的IIS上使用
$\u服务器['PATH\u INFO']
。在getFullUrl函数中尝试一下。@R.Chappell仍然是一个空字符串。也许您应该
var\u dump($\u SERVER)并查看您要玩什么。它应该用一堆东西填充,如果不是,那么你的服务器/主机可能有问题。顺便说一下,你的建议解决了部分问题。现在看来,如果我在一个没有查询字符串的URL上,它就可以完美地工作。另一方面,如果查询字符串已经存在,那么它就不起作用。它只是显示了旧的查询字符串。在Linux上,它可以像我那样编写。顺便说一下,你的建议解决了部分问题。现在看来,如果我在一个没有查询字符串的URL上,它就可以完美地工作。另一方面,如果查询字符串已经存在,那么它就不起作用。它只显示旧的查询字符串