_SERVER值不等于其报告 - STRANGE

时间:2013-01-02 21:52:42

标签: php proxy

因此,有一个专门的代理服务器(rtrk.com),它为我负责的其中一个站点设置了子域代理。

The following example is how it works
Original site: example.com
Proxy site: example-px.rtrk.com

访问代理网站网址时,会实时加载原始网站。通过代理URL立即显示对实际站点上的站点文件所做的更改。

我已修改网站标题以检查$_SERVER["SERVER_NAME"]值,以确保它在example.com中结束,但我得到的行为远远超出我认为奇怪的行为,请使用以下代码:例如:

$test = $_SERVER["SERVER_NAME"];
echo $test . "<br />";
echo stristr($test, "exam") . "<br />";
echo $test;
exit;

以下输出是我期望看到的: (通过代理访问)

example-px.rtrk.com
example-px.rtrk.com
example-px.rtrk.com

我实际看到的内容:

example-px.rtrk.com
example.com
example-px.rtrk.com

这到底是怎么回事? 我验证$ test是否设置为代理主机的正确值。 stristr返回一个实际上甚至在原始值中找不到的值 然后我重新验证测试没有以某种方式改变,但它没有。

这让我绝对疯了!这怎么可能?

编辑:

我可以通过手动将测试变量设置为SERVER_NAME报告的字符串来获得正确的输出。例如:

$test = "example-px.rtrk.com";
echo $test . "<br />";
echo stristr($test, "exam") . "<br />";
echo $test;
exit;

这就是我得到的(并期望得到):

example-px.rtrk.com
example-px.rtrk.com
example-px.rtrk.com

2 个答案:

答案 0 :(得分:0)

大笑 - 当我无法理解时,它总是愚蠢的。

问题在于,当我通过代理访问网站时,所有匹配“www.example.com”的数据会在返回我的浏览器之前自动转换为代理地址。

总而言之,一切都按照预期的方式运行,只是输出在代理服务器到达浏览器之前被修改。

答案 1 :(得分:-1)

你正在以一种有趣的方式使用stristr。 Here是stristr的文档。根据文档,您正在搜索字符串“考试”,因此您永远不会从函数中收到“example-px.rtrk.com”。