前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP常用$_SERVER解析及['HTTP_HOST']和['SERVER_NAME']的区别

PHP常用$_SERVER解析及['HTTP_HOST']和['SERVER_NAME']的区别

作者头像
德顺
发布于 2019-11-12 15:07:04
发布于 2019-11-12 15:07:04
4.8K00
代码可运行
举报
文章被收录于专栏:前端资源前端资源
运行总次数:0
代码可运行

最近在折腾一个半开源的建站程序(什么叫半开源?你懂得!),给客户把模板做好了,网站放到服务器上了,客户那边把数据也都上传了很多,但是突然发现分页出现了问题,域名成了 localhost ,然后就是各种查找原因,重新安装部署,问题依旧没法解决,将文件和数据库全部搬到本地来确是好好的。

折腾了好久,最后没办法了看了看分页程序是怎么写的,原来是 _SERVER["SERVER_NAME"] 惹的祸,服务器是 linux 的,_SERVER["SERVER_NAME"] 的值是 Apache 的 httpd.conf 中设置的,改成 _SERVER["HTTP_HOST"] 后就好了,下面整理下

这两个方法的区别:

简单的来说,HTTP_HOST 是变化的,而 SERVER_NAME 只有一个。

比如,你现在机器上的一个网站 http://www.w3h5.com  ,这个网站也可以通过 http://localhost  来访问,指向同一个目录。

如果你在浏览器用 http://localhost  访问,则 HTTP_HOST 的值为 localhost ,而你用 www.w3h5.com  访问,HTTP_HOST 的值就是 www.w3h5.com  ,你用IP地址访问,HTTP_HOST 的值就是 IPSERVER_NAME 就不会变化,Apachehttpd.conf 中设置的是什么,显示的就是什么。

没看明白?那就继续往下看

相同点:

当满足以下三个条件时,两者会输出相同信息。

1. 服务器为80端口

2. apache 的 conf 中 ServerName 设置正确

3. HTTP/1.1 协议规范

不同点:

1. 通常情况:

_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的 HTTP 请求输出信息。

_SERVER["SERVER_NAME"] 默认情况下直接输出 apache 的配置文件 httpd.conf 中的 ServerName 值。

2. 当服务器为非80端口时:

_SERVER["HTTP_HOST"] 会输出端口号,例如:zhaoan.org:8080

_SERVER["SERVER_NAME"] 会直接输出 ServerName

因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT

3. 当配置文件 httpd.conf 中的 ServerName 与 HTTP/1.0 请求的域名不一致时:

httpd.conf 配置如下:

代码语言:javascript
代码运行次数:0
运行
复制
<virtualhost *>
    ServerName w3h5.com
    ServerAlias www.w3h5.com
</virtualhost>

客户端访问域名 www.w3h5.com

_SERVER["HTTP_HOST"] 输出 www.w3h5.com

_SERVER["SERVER_NAME"] 输出 w3h5.com

所以,在实际程序中,应尽量使用 _SERVER["HTTP_HOST"]  ,比较保险和可靠,当然在不同的需求中会有不同的用法。

下面是其他一些有关

PHP 中 $_SERVER 的具体说明:

$_SERVER['REMOTE_PORT'] //端口。 

$_SERVER['SERVER_NAME'] //服务器主机的名称。 

$_SERVER['PHP_SELF'] //正在执行脚本的文件名 

$_SERVER['argv'] //传递给该脚本的参数。 

$_SERVER['argc'] //传递给程序的命令行参数的个数。 

$_SERVER['GATEWAY_INTERFACE'] //CGI 规范的版本。 

$_SERVER['SERVER_SOFTWARE'] //服务器标识的字串 

$_SERVER['SERVER_PROTOCOL'] //请求页面时通信协议的名称和版本 

$_SERVER['REQUEST_METHOD'] //访问页面时的请求方法 

$_SERVER['QUERY_STRING'] //查询(query)的字符串。 

$_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录 

$_SERVER['HTTP_ACCEPT'] //当前请求的 Accept: 头部的内容。 

$_SERVER['HTTP_ACCEPT_CHARSET'] //当前请求的 Accept-Charset: 头部的内容。 

$_SERVER['HTTP_ACCEPT_ENCODING'] //当前请求的 Accept-Encoding: 头部的内容 

$_SERVER['HTTP_CONNECTION'] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。 

$_SERVER['HTTP_HOST'] //当前请求的 Host: 头部的内容。 

$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址。 

$_SERVER['HTTP_USER_AGENT'] //当前请求的 User_Agent: 头部的内容。 

$_SERVER['HTTPS'] //如果通过https访问,则被设为一个非空的值(on),否则返回off 

$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。 

$_SERVER['SERVER_ADMIN'] #管理员信息 

$_SERVER['SERVER_PORT'] #服务器所使用的端口 

$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。 

$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。 

$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。 

$_SERVER['PHP_AUTH_USER'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。 

$_SERVER['PHP_AUTH_PW'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。 

$_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型

转自: Andy Zhao's Technology Workstation

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
php特性
(get 数据流)?abc=data://text/plain;base64;64编码的内容 data协议
用户11062199
2024/04/16
970
Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结(完整版)
一. 简单实例介绍 一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完成配置:
洗尽了浮华
2018/09/28
32.3K0
学习笔记0509----LAMP架构(二)
一台服务器可以访问多个网站,每个网站都是一个虚拟主机 概念:域名(主机名)、DNS、解析域名、hosts 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
嘻哈记
2020/11/24
9350
PHP和PHPINFO
PHP开放源码和跨越平台,PHP可以运行在WINDOWS和多种版本的LINUX上。它不需要任何预先处理而快速反馈结果,它也不需要mod_perl的调整来使您的服务器的内存映象减小。PHP消耗的资源较少,当PHP作为ApacheWeb服务器一部分时,运行代码不需要调用外部二进制程序,服务器不需要承担任何额外的负担。
全栈程序员站长
2022/09/06
1.2K0
PHP和PHPINFO
Linux下配置Apache httpd
httpd是Apache超文本传输协议(HTTP)服务器的主程序。它被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池对外提供服务。httpd支持基于 虚拟主机,以及基于HOST、IP、PORT实现虚拟主机,反向代理,负载均衡,路径别名,用户认证,basic,支持第三方模块等众多特性。本文主要描述了Linux下httpd(2.2版本)的相关基本配置。 1、配置文件概述 配置文件,主要分为3个部分: # grep "Section" /etc/httpd/conf/h
Leshami
2018/08/13
2.3K0
PHP中getenv()函数
在PHP中getenv(参数)函数是一个用于获取环境变量的函数,根据提供不同的参数可以获取不同的环境变量,具体如下: “PHP_SELF” 当前正在执行脚本的文件名,与document root 相关。 如果PHP 以命令行方式运行,该变量在PHP 4.3.0 之前无效。 “argv” 传递给该脚本的参数。当脚本运行在命令行方式时,argv 变量传递给程序C 语言样式的命令行参数。当调用GET 方法时,该变量包含请求的数据。 “argc” 包含传递给程序的命令行参数的个数(如果运行在命令行模式)。 “GAT
joshua317
2018/04/10
1.8K0
Apache配置详解(最好的APACHE配置教程)
Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。
全栈程序员站长
2022/09/14
8.4K0
Linux基础(day43)
11.18 Apache用户认证 httpd的用户认证目录 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容 <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <Directory /data/wwwroot/www.123.com> //指定认证的目录
运维小白
2018/02/06
7750
P001PHP开发之PHP实现取得HTTP请求的原文相关信息
通过以下代码示例,我们可以知道,PHP如何获得请求的URL及请求的头部,body等具体信息;
上善若水.夏
2018/09/28
5960
PHP设置301重定向
以下就是用PHP实现301重定向的代码: <?php    $the_host = $_SERVER['HTTP_HOST'];//获取当前域名    $request_uri = isset($_S
德顺
2019/11/13
2.4K0
编译Apache服务部署静态网站
Apache是世界使用排名第一的Web服务器软件,它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中.同时Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部.也是一个基金会的名称.
王瑞MVP
2022/12/28
1.5K0
Nginx/Apache之伪静态设置 - 运维小结
一、什么是伪静态 伪静态即是网站本身是动态网页如.php、.asp、.aspx等格式动态网页有时这类动态网页还跟"?"加参数来读取数据库内不同资料,伪静态就是做url重写操作(即rewrite)。很典
洗尽了浮华
2019/05/25
13.1K0
Apache和PHP结合,Apache默认虚拟主机
LAMP我们都安装好了,但是现在在浏览器访问apache的话还不能解析php脚本,所以这会需要配置apache让apache能够解析php脚本:
端碗吹水
2020/09/23
3K0
Apache和PHP结合,Apache默认虚拟主机
Apache用户认证、域名跳转、访问日志格式 原
注意: 本章使用浏览器进行检测的前提是在物理机hosts文件添加虚拟机IP和虚拟主机域名。
阿dai学长
2019/04/03
1.8K0
WEB/HTTP服务器搭建[通俗易懂]
就是计算机网络中进行数据交换而建立的规则、标准或约定的集合。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。
全栈程序员站长
2022/09/02
3.5K0
Apache服务器及虚拟主机配置域名访问本地项目路径
一般的一键生成网站的工具,比如 UPUPW,宝塔之类的,只需要进行第一步操作就可以了。
德顺
2019/11/13
4.6K0
11.14/11.15 Apache和PHP结合
配置httpd支持php目录概要 httpd主配置文件/usr/local/apache2.4/conf/httpd.conf vim /usr/local/apache2.4/conf/httpd.conf //修改以下4个地方 ServerName Require all denied AddType application/x-httpd-php .php DirectoryIndex index.html index.php /usr/local/apache2.4/bin/apachectl -
运维小白
2018/02/06
1.5K0
11.14/11.15 Apache和PHP结合
Http的headers最详解释
  HTTP Headers是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。
php007
2020/02/14
4.2K0
Http的headers最详解释
Apache中 RewriteRule 规则参数介绍
大家好,又见面了,我是你们的朋友全栈君。Apache中 RewriteRule 规则参数介绍
全栈程序员站长
2022/08/27
12.4K0
Pikachu漏洞靶场系列之XSS钓鱼攻击后续
首发于Freebuf - Pikachu靶场系列之XSS钓鱼攻击与PHP中的HTTP认证,转载需注明出处。
Naraku
2021/07/29
2.6K0
Pikachu漏洞靶场系列之XSS钓鱼攻击后续
相关推荐
php特性
更多 >
目录
  • 这两个方法的区别:
  • 相同点:
  • 不同点:
  • PHP 中 $_SERVER 的具体说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档