记一下第十二节课的内容。
一、PHP文件包含的四种方式
Include和Include_once
操作系统会读取包含的文件的内容,并将它插入主文件中,include方式的文件包含会在包含失败的情况下输出警告信息,而include_once方式会检查包含的文件是否已经被包含过,如果已经包含过则不再重新包含。
Require和Require_once
require和require_once方式的文件包含和include与include_once是类似的,不过它们之间的不同点在于把汗出错时,require方式会直接导致程序终止并输出错误信息,而include方式只是警告信息。require_once方式会检查包含的文件是否以及被包含过,如果已经包含过则不再重新包含。这一点和include_once方式是一样的。
进行一下示例:
将login.php改为如下内容:
<?php
include('./function.php')
/*
#用户名
$username = $_POST['username'];
#密码
$password = $_POST['password'];
#判断用户名与密码不正确则输出失败
if ($username != 'admin' || $password != '123456') {
die('<script>alert("登录失败!");location.href = "./login.html"</script>');
}
echo '登录成功!';
*/
?>
function.php文件中输入如下内容:
<?php
echo 111;
我们再进行登录,就echo出来了111
思考:如果多次使用include和include_once,以及require和require_once,当文件名正确或者错误时,会出现什么情况?
那么我们把login.php改名为index.php(黑鬼改的,我也不知道为啥改名,跟着改吧)
然后将其中代码改为:
<?php
$a = $_GET['a'];
$b = $_GET['b'];
switch ($a) {
case 'login':
switch ($b) {
case 'index':
require_once('./login.html'); -
break;
default:
# code...
break;
}
break;
default:
# code...
break;
}
?>
当我们在login.html中,点击登录之后,就会出现空白页面,因为这段switch代码并没有有效执行
可以看到,跳转之后是空白页面。
那么我们如何让这段代码执行呢?通过更改我们的网址,在后面加上如下内容,就会让require_once得到执行。
然后我们将login.php改为如下内容:
<?php
$a = $_GET['a'];
$b = $_GET['b'];
$f = $_SERVER['REQUEST_METHOD'];
switch ($a){
case 'login':
switch ($b){
case 'index':
switch ($f) {
case 'GET':
require_once('./login.html');
break;
case 'POST':
echo 111;
break;
default:
# code...
break;
}
break;
default:
# code...
break;
}
break;
default:
# code...
break;
}
?>
再进行访问,会发现还会回跳到login.html的页面:
原因是我们多了一层switch嵌套之后,实际上相当于多判断一次传参方式是否是get传参,而此处显然是,所以可以正常显示。另外,$_SERVER
是PHP预定义的超全局变量。所谓“超全局变量”,即在脚本全部作用域中都可以使用,$_SERVER保存关于报头、路径和脚本位置的信息。
主要内容详解
- $_SERVER["SCRIPT_NAME"] => "/index.php",当前脚本路径
- $_SERVER["REQUEST_URI"] => "/index.php?id=1",访问的页面URI,包含查询字符串
- $_SERVER["QUERY_STRING"] => "id=1",查询字符串,不存在为" "
- $_SERVER["REQUEST_METHOD"] => "GET",请求方法,如"POST"、"PUT"等
- $_SERVER["SERVER_PROTOCOL"] => "HTTP/1.1",通信协议的名称和版本
- $_SERVER["GATEWAY_INTERFACE"] => "CGI/1.1",服务器使用的CGI 规范的版本
- $_SERVER["REMOTE_PORT"] => "60599",用户连接服务器使用的端口
- $_SERVER["SCRIPT_FILENAME"] => "E:/WWW/example/index.php",当前脚本的绝对路径
- $_SERVER["DOCUMENT_ROOT"] => "E:/WWW/example/",当前脚本文档根目录的绝对路径
- $_SERVER["REMOTE_ADDR"] => "127.0.0.1",用户的IP地址
- $_SERVER["SERVER_PORT"] => "80",服务器使用的端口
- $_SERVER["SERVER_ADDR"] => "127.0.0.1",服务器的IP地址
- $_SERVER["SERVER_NAME"] => "www.example.com",服务器的主机名,注:如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。在 Apache 2 里,必须设置 UseCanonicalName = On 和 ServerName。 否则该值会由客户端提供,就有可能被伪造。 上下文有安全性要求的环境里,不应该依赖此值。
- $_SERVER["SERVER_SOFTWARE"] => "Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9",响应头中Server的内容
- $_SERVER["SERVER_SIGNATURE"] => "",包含了服务器版本和虚拟主机名的字符串
- $_SERVER["HTTP_HOST"] => "www.example.com",请求头中Host项的内容
- $_SERVER["HTTP_CONNECTION"] => "keep-alive",请求头中Connection项的内容
- $_SERVER["HTTP_PRAGMA"] => "no-cache",请求头中Pragma项的内容
- $_SERVER["HTTP_CACHE_CONTROL"] => "no-cache",请求头中Cache-Control项的内容
- $_SERVER["HTTP_UPGRADE_INSECURE_REQUESTS"] => "1",请求头中Upgrade-Insecure-Requests项的内容
- $_SERVER["HTTP_USER_AGENT"] => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",请求头中User-Agent项的内容
- $_SERVER["HTTP_ACCEPT"] => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8",请求头中Accept项的内容
- $_SERVER["HTTP_ACCEPT_ENCODING"] => "gzip, deflate",请求头中Accept-Encoding项的内容
- $_SERVER["HTTP_ACCEPT_LANGUAGE"] => "zh-CN,zh;q=0.8",请求头中Accept-Language项的内容
- $_SERVER["PHP_SELF"] => "/index.php",当前执行脚本的文件名
- $_SERVER["REQUEST_TIME_FLOAT"] => 1510112348.8084,请求开始的时间戳,微秒级别精准度
- $_SERVER["REQUEST_TIME"] => 1510112348,请求开始的时间戳
此处用到的就是$_SERVER["REQUEST_METHOD"] ,表示请求方法,如"POST"、"PUT"等。
引用自PHP 的 $_SERVER详解-CSDN博客
二、PHP的数据类型——数组和字典
1.数组
1.1一维数组
用一个实例说明数组的定义和访问:
<?php
$array = [
0 => 'a',
1 => 'b',
2 => 'c',
3 => 'd'
];
echo $array[1];
通过网页访问:
或者通过下面方式声明:
<?php
$array = ['1','2','3','4','5'];
echo $array[4];
下面我们来看一下键值数组:
<?php
$array = [
'name' => 'zhangsan',
'age' => 30,
];
echo $array['age'];
1.2二维数组
定义一个二维数组,并使用var_dump函数查看其数据类型:
<?php
$array = [[1,2,3,4,5,6],[1,2,3,4,5,6]];
var_dump($array);
不难发现,实际上,二维数组就是数组的嵌套使用。类似地,还有三维数组、四维数组……
要取二维数组的某个元素,使用$array[i][j]即可,i指的是第i个数组,j指的是第i个数组中的第j个元素。注意:数字占一个字节,而中文占三个字节。
1.3键值数组
不多bb,上代码:
<?php
$array = [
[
'name' => '张三'
],[
'name' => '99'
],[
'name' => '丁真',
'smile' => '纯真',
'animalfriend' => '雪豹',
]
];
echo $array[2]['animalfriend'], '闭嘴';
2.字典
没讲,应该是下节课讲。