[PHP学习教程 - 网络]002.$_SERVER["SCRIPT_NAME"]、$_SERVER["PHP_SELF"]、$_SERVER["QUERY_STRING"]、$_SERVER["REQUEST_URI"]介绍($_SERVER URL Infomation)

引言:在使用原生PHP的时候,对于URL路径的切割,如:域名,查询参数等等的提取,通常绝大多数兄弟会忽略$_SERVER中定义的内置常量的关系,这里为大家讲解一下。

常用的URL请求路径$_SERVER常量包含以下四个API!

  • $_SERVER["SCRIPT_NAME"]  获取当前脚本的路径,如:index.php
  • $_SERVER["PHP_SELF"]  当前正在执行脚本的文件名
  • $_SERVER["QUERY_STRING"]  获取查询语句,实例中可知,获取的是?后面的值
  • $_SERVER["REQUEST_URI"]  获取http://blog.snsgou.com后面的值,包括/

如果不直观,大家继续看下面的示例,有详细解释!

示例讲解



示例1:

网址:http://do.org.cn/ (直接打开主页)

输出结果:

    $_SERVER["SCRIPT_NAME"]  = "/index.php"
    $_SERVER["PHP_SELF"]     = "/index.php"
    $_SERVER["QUERY_STRING"] = ""
    $_SERVER["REQUEST_URI"]  = "/"

示例2:

网址:http://do.org.cn/?p=1 (附带查询)

输出结果:

    $_SERVER["SCRIPT_NAME"]  = "/index.php"
    $_SERVER["PHP_SELF"]     = "/index.php"
    $_SERVER["QUERY_STRING"] = "p=1"
    $_SERVER["REQUEST_URI"]  = "/?p=1"

示例3:

网址:http://do.org.cn/index.php?p=1&q=superdo

输出结果:

    $_SERVER["SCRIPT_NAME"]  = "/index.php"
    $_SERVER["PHP_SELF"]     = "/index.php"
    $_SERVER["QUERY_STRING"] = "p=1&q=superdo"
    $_SERVER["REQUEST_URI"]  = "/index.php?p=1&q=superdo"

示例4:

网址:http://do.org.cn/123/123.php/abc/def?id=1&name=ac

输出结果:

    $_SERVER["SCRIPT_NAME"]  = "/123/123.php"
    $_SERVER["PHP_SELF"]     = "/123/123.php/abc/def"
    $_SERVER["QUERY_STRING"] = "id=1&name=ac"
    $_SERVER["REQUEST_URI"]  = "/123/123.php/abc/def?id=1&name=ac"

示例5:

网址:http://do.org.cn/123/123.php/abc/def.bat?id=1&name=ac

输出结果:

    $_SERVER["SCRIPT_NAME"]  = "/123/123.php"
    $_SERVER["PHP_SELF"]     = "/123/123.php/abc/def.bat"
    $_SERVER["QUERY_STRING"] = "id=1&name=ac"
    $_SERVER["REQUEST_URI"]  = "/123/123.php/abc/def.bat?id=1&name=ac"

经验之谈:

总结一下,对于SCRIPT_NAME、PHP_SELF、QUERY_STRING、REQUEST_URI,深入了解将有利于我们 在$_SERVER函数中正确调用这四个值。
一般地: $_SERVER["REQUEST_URI"] = $_SERVER["PHP_SELF"] . ‘?‘ . $_SERVER["QUERY_STRING"]

注意



注意:当有地址重写时,情况有些变化,例如:

/class 重写到 /index.php?app=class&mod=Index&act=index

此时:

$_SERVER[‘PHP_SELF‘]          值等于 /index.php
$_SERVER[‘QUERY_STRING‘] 值等于 /index.php?app=class&mod=Index&act=index
$_SERVER["REQUEST_URI"]  值等于 /class

相关代码



uchome系统中处理技巧:

// 处理REQUEST_URI
if (!isset($_SERVER[‘REQUEST_URI‘])) {
    $_SERVER[‘REQUEST_URI‘] = $_SERVER[‘PHP_SELF‘];
    if (isset($_SERVER[‘QUERY_STRING‘])) $_SERVER[‘REQUEST_URI‘] .= ‘?‘ . $_SERVER[‘QUERY_STRING‘];
}
if ($_SERVER[‘REQUEST_URI‘]) {
    $temp = urldecode($_SERVER[‘REQUEST_URI‘]);
    if (strexists($temp, ‘<‘) || strexists($temp, ‘"‘)) {
        $_GET = shtmlspecialchars($_GET); // XSS
    }
}

结束语



这里介绍了一下$_SERVER的关于<URL路径>的常量的解惑,其他的常量还非常多,待稍后有机会再归类给大家进行讲解。

未完,待更新...

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4822676.html

时间: 2024-10-21 03:10:16

[PHP学习教程 - 网络]002.$_SERVER["SCRIPT_NAME"]、$_SERVER["PHP_SELF"]、$_SERVER["QUERY_STRING"]、$_SERVER["REQUEST_URI"]介绍($_SERVER URL Infomation)的相关文章

[PHP学习教程 - 网络]003.获得当前访问的页面URL(Current Request URL)

引言:获取当前请求的URL路径,自动判断协议(HTTP or HTTPS). 一句话的事情,下面直接上高清无MSK的精妙代码! 功能函数 获得当前请求的页面路径(URL)地址 语法:$url = getPageUrl() 返回结果: string-请求URL /** * 获取当前页面地址 * * @author do.org.cn#AC */ function getPageUrl() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == &quo

[PHP学习教程 - 网络]004.模拟发送HTTP请求[GET/POST](HTTP Simulator)

引言:经常在开发期间,客户端与服务端的调试都是借助于真实的容器返回.尤其是在处理到POST时,通常刚刚入门的兄弟姐妹就一定要借助容器.今天,我们就来处理一下模拟HTTP. 本文列举了常见的四种请求方式: 函数版本[file_get_contents] 函数版本[Socket] 函数版本[Curl] 函数版本[Curl2] 大家直接观看代码吧. 函数版本[file_get_contents] 基本信息: string send_post ( string $url, string $data ).

Linux学习教程推荐下载

RedhatLinux系统管理 http://down.51cto.com/data/1328166 The.Complete.FreeBSD.3rd.Edition http://down.51cto.com/data/1328165 UNIX和Linux权威教程(第三版) http://down.51cto.com/data/1328164 linux系统常用基本命令 http://down.51cto.com/data/1328163 红帽企业Linux虚拟化管理 http://down.

Docker学习教程笔记整合(完整)

Docker学习教程笔记整合(完整) 本文主要是整理了DockerOne组织翻译的Flux7的Docker入门教程,通过markdown记录,方便离线学习.原文地址,http://dockone.io/article/101. 文中一些链接可能会跳转国外的网站,如果没有插件或开VPN的朋友,可以尝试修改一下Hosts文件,如何修改Hosts文件.或者使用XXNet插件,如何使用XXnet 介绍 Docker是一个新的容器化的技术,它轻巧,且易移植,号称"build once, configure

Deep Learning 十_深度学习UFLDL教程:Convolution and Pooling_exercise(斯坦福大学深度学习教程)

前言 理论知识:UFLDL教程和http://www.cnblogs.com/tornadomeet/archive/2013/04/09/3009830.html 实验环境:win7, matlab2015b,16G内存,2T机械硬盘 实验内容:Exercise:Convolution and Pooling.从2000张64*64的RGB图片(它是the STL10 Dataset的一个子集)中提取特征作为训练数据集,训练softmax分类器,然后从3200张64*64的RGB图片(它是th

Deep Learning九之深度学习UFLDL教程:linear decoder_exercise(斯坦福大学深度学习教程)

前言 实验内容:Exercise:Learning color features with Sparse Autoencoders.即:利用线性解码器,从100000张8*8的RGB图像块中提取彩色特征,这些特征会被用于下一节的练习 理论知识:线性解码器和http://www.cnblogs.com/tornadomeet/archive/2013/04/08/3007435.html 实验基础说明: 1.为什么要用线性解码器,而不用前面用过的栈式自编码器等?即:线性解码器的作用? 这一点,Ng

Linux入门学习教程:虚拟机体验之KVM篇

在上一篇中,我展示了虚拟机软件QEMU的使用.效果及其性能,同时也分析了不同用户对虚拟机的不同追求.但是不管是桌面用户还是企业级用户,对虚拟机 软件的追求有一点是共同的,那就是性能.QEMU是一个强大的虚拟机软件,它可以完全以软件的形式模拟出一台完整的电脑所需的所有硬件,甚至是模拟出不同 架构的硬件,在这些虚拟的硬件之上,可以安装完整的操作系统.QEMU的运行模式如下图: 很显然,这种完全以软件模拟硬件的形式虽然功能强大,但是性能难以满足用户的需要.模拟出的硬件的性能和物理硬件的性能相比,必然会

C++基础学习教程(八)

转载请注明出处:http://blog.csdn.net/suool/article/details/38300117 引入 在进行下一步的学习之前,我们需要厘清几个概念. RAII 首先介绍一个编程习语,"RAII"(ResourceAcquisition Is Initialization,资源获取即为初始化),他描述了利用构造函数\析构函数,并在函数返回时自动析构的机制.简言之,RAII意为构造函数获取一种资源;打开一个文件,一个网络连接,或仅仅是从某I/O流中复制一些标志.这种

Qt开发学习教程

Qt开发学习教程 一.Qt开发基础学习教程 本部分博客主要根据狄泰学院唐老师的<QT实验分析教程>创作,同时根据天山老妖自己的理解和网络搜集的资料及QT官方文档对部分知识点进行了扩展.本系列博客由天山老妖创作,发布于51CTO博客上.狄泰学院网站:http://course.dt4sw.com/ Qt开发基础学习教程目录如下: QT开发(一)--QT简介http://blog.51cto.com/9291927/1856911QT开发(二)--QT开发环境搭建http://blog.51cto