`
jqj031
  • 浏览: 72877 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

PHP如何取得服务器地址-$_SERVER['HTTP_HOST']靠不住

    博客分类:
  • php
阅读更多
在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。
php手册中的解释如下:
“HTTP_HOST”
当前请求的 Host: 头信息的内容。



一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量。

然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错。

最后找出原因:$_SERVER['HTTP_HOST']在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

究其原因,是因为,客户的公司通过一台服务器连接至因特网,而我们的程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。因此$_SERVER['HTTP_HOST']在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

最后查了不少资料,在symfony框架里面,找到替代的实现方法:

将$host = $_SERVER['HTTP_HOST'];

替换成:

$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');


即可。
分享到:
评论

相关推荐

    $_SERVER相关函数

    ### $_SERVER相关函数 在PHP开发中,`$_SERVER`是一个预定义的全局变量,它包含了服务器和执行环境的信息。这些信息对理解客户端请求、服务器配置以及处理HTTP头部非常重要。以下将详细介绍`$_SERVER`中的一些常用...

    php中$_SERVER用法

    $_SERVER['HTTP_HOST']; localhost:80 $_SERVER['SERVER_NAME'] — 返回当前主机名。 localhost $_SERVER['QUERY_STRING']-URL中第一个问号之后的所有内容 action=du&id=9 $_SERVER['REQUEST_URI'];--这里是i而...

    STM32_USB-Host-Device_Lib_V2.2.0

    STM32_USB-Host-Device_Lib_V2.2.0 是一款专为STM32微控制器设计的USB主机和设备库,适用于STM32 F105、F107、F2以及F4系列芯片。这个库的发布旨在帮助开发者在基于STM32的系统上实现USB功能,无论是作为主机控制...

    NVIDIA-vGPU-kepler-VMware_ESXi_6.5_Host_Driver_367.132-1OEM.650.0.0.4598673.vib

    vmware vsga k2 显卡驱动 esxi6.5 下安装

    NVIDIA-vGPU-kepler-VMware_ESXi_6.5_Host_Driver_367.134-1OEM.650.0.0.4598673.vib

    NVIDIA显卡虚拟化驱动,GRID K2 DIRVER for ESXi6.5,免。

    PHP 获取顶级域名

    例如,对于URL "http://subdomain.example.com:8080/page",`$_SERVER['HTTP_HOST']`将是"subdomain.example.com:8080"。 为了提取顶级域名,我们需要对这个字符串进行处理。以下是一个简单的函数,用于从`$_SERVER...

    PHP路径讲座$_SERVER,函数部分

    5. `$_SERVER["HTTP_HOST"]`:包含HTTP请求头中的Host字段,可能包含端口号。在本例中,它同样是`www.phppx.com`。 6. `$_SERVER["HTTP_REFERER"]`:表示用户是从哪个页面链接过来的,但请注意,这个字段可能被...

    STM32_USB-Host-Device_Lib_V2.1.0 (WINUSB HID)

    STM32_USB-Host-Device_Lib_V2.1.0 (WINUSB HID) 是一个专为STM32微控制器设计的USB主机和设备库,主要用于实现与Windows系统的USB通信,特别是利用WINUSB和HID(Human Interface Device)协议进行交互。这个库是STM...

    $_SERVER_常量总结

    在 PHP 编程语言中,`$_SERVER` 是一个预定义的全局数组变量,用于存储有关 HTTP 服务器和执行环境的信息。通过 `$_SERVER` 数组,开发人员可以访问到各种有用的服务器变量,这些变量对于理解客户端请求以及服务器...

    PHP中$_SERVER的详细参数与说明

    在PHP开发中,`$_SERVER`是一个预定义的全局数组,包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等服务器环境信息。掌握`$_SERVER`中的各种参数及其含义对于理解和调试Web应用至关重要。 ...

    php几个预定义变量$_SERVER用法小结

    `$_SERVER`数组就是这样的一个预定义变量,它包含了一系列与服务器相关的变量,帮助开发者获取服务器和请求的相关信息。下面我们将详细介绍`$_SERVER`数组中常见的几个用法。 1. `$_SERVER['DOCUMENT_ROOT']` 这个...

    php $_SERVER当前完整url的写法

    复制代码 代码如下:“http://”.$_SERVER [‘HTTP_HOST’].$_SERVER[‘PHP_SELF’].”?”.$_SERVER[‘QUERY_STRING’]; php server函数 大全SERVER[“HTTP_ACCEPT”]=*/* $_SERVER[“HTTP_REFERER”]=...

    PHP获取当前url路径的函数及服务器变量QUERY_STRING、REQUEST_URI

    $currentUrl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; ``` 2. **处理REQUEST_URI**: 在某些情况下,可能需要对`REQUEST_URI`进行额外的处理。例如,在UCHome系统中,可以通过以下代码片段来...

    PHP中$_SERVER使用说明

    客户端IP地址和主机名可以通过$_SERVER['REMOTE_ADDR']和$_SERVER['REMOTE_HOST']获取,这对于日志记录和安全检查特别重要。 服务器端口可以通过$_SERVER['SERVER_PORT']来获取,这有助于在需要时对服务器的特定...

    php 超全局变量

    - `$_SERVER['SERVER_ADMIN']`: 获取服务器管理员的邮箱地址。 - `$_SERVER['SERVER_PORT']`: 获取服务器监听的端口号。 - `$_SERVER['SERVER_SIGNATURE']`: 获取服务器签名。 - `$_SERVER['PATH_TRANSLATED']`:...

    STM32_USB-Host-Device_Lib_V2.1.0.zip_STM32 HOST USB_STM32 device

    Stm32系统CPU的USB开发固件源码,提供HOST和DEVICE的使用实例。

    PHP $_SERVER详解

    `$_SERVER`是PHP中的一个超全局数组,它包含了服务器环境和HTTP请求的相关信息,是开发者获取服务器状态、用户信息和请求详情的重要工具。本文将详细介绍`$_SERVER`数组中的各个键及其对应的值。 1. `$_SERVER['...

    AJAX 请求区分 $_SERVER['HTTP_X_REQUESTED_WITH'] 小解

    首先,`$_SERVER` 是 PHP 提供的一个超全局数组,它包含了服务器环境的各种信息,如 HTTP 头部、路径、脚本位置等。当浏览器向服务器发送请求时,会附带一些头信息,例如 `User-Agent` 和 `Host`。`$_SERVER` 数组会...

Global site tag (gtag.js) - Google Analytics