PHP
PHP(超文本预处理器,服务器端脚本语言)
PHP基础
PHP功能
- PHP 可以生成动态页面内容
- PHP 可以创建、打开、读取、写入、关闭服务器上的文件
- PHP 可以收集表单数据
- PHP 可以发送和接收 cookies
- PHP 可以添加、删除、修改您的数据库中的数据
- PHP 可以限制用户访问您的网站上的一些页面
- PHP 可以加密数据
通过 PHP,不再限于输出 HTML,还可以输出图像、PDF 文件,甚至 Flash 电影,还可以输出任意的文本,比如 XHTML 和 XML
PHP语法
PHP 脚本可以放在文档中的任何位置。PHP 脚本以 结束,每个代码行都必须以分号结束,
有两种在浏览器输出文本的基础指令:echo 和 print,有两种注释方法:**//** 和 /* */
PHP变量
变量以 $ 符号开始,后面跟着变量的名称,变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ ),必须以字母或者下划线字符开始
PHP 没有声明变量的命令,在第一次赋值时就被创建
PHP global 关键字
global 关键字用于函数内访问全局变量,在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量
| 1 | global $x,$y; | 
Static 作用域
在第一次声明变量时使用 static 关键字,可以使得当一个函数完成时,某个局部变量不会被删除
即每次调用函数时,该变量将会保留着函数前一次被调用时的值。
注:该变量仍然是函数的局部变量
PHP echo 和 print 语句
echo于print区别
echo - 可以输出一个或多个字符串,且输出速度比print快
print - 只允许输出一个字符串,返回值总为 1
echo语句
| 1 | <?php | 
| 1 | <?php | 
print语句
与上述例子基本一致,下例不适用print
| 1 | echo "这是一个", "字符串,", "使用了", "多个", "参数。"; | 
PHP EOF(heredoc)
PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法
以 <<<EOF 开始标记开始,以 EOF 结束标记结束,**结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)**,且在结束标记末尾要有分号
开始标记和结束标记相同,比如常用大写的 EOT、EOD、EOF 来表示,但是不只限于那几个(也可以用:JSON、HTML等),开始标记和结束标记不在正文中出现
开始标识带单引号则不解释内嵌的变量和转义符号
在 heredoc 中,变量不需要用连接符 . 或 , 来拼接
| 1 | <?php | 
| 1 | <?php | 
PHP数据类型
String(字符串)Integer(整型)Float(浮点型)Boolean(布尔型)Array(数组)Object(对象)NULL(空值)Resource(资源类型)
PHP字符串
一个字符串是一串字符的序列,可以将任何文本放在单引号和双引号中
PHP整型
整数是一个没有小数的数字,整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)
PHP布尔型
通常用于条件判断
PHP数组
数组可以在一个变量中存储多个值
| 1 | $cars=array("Volvo","BMW","Toyota"); | 
PHP对象(难理解)
对象数据类型也可以用于存储数据
必须使用class关键字声明类对象。类是可以包含属性和方法的结构
PHP NULL值
NULL 值表示变量没有值,可以通过设置变量值为 NULL 来清空变量数据
PHP资源类型
PHP 资源 resource 是一种特殊变量,保存了到外部资源的一个引用
常见资源数据类型有打开文件、数据库连接、图形画布区域等
PHP类型比较
[!IMPORTANT]
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
PHP常量
常量可以用 define() 函数或 const 关键字来定义
一旦定义,其值不能改变,可以在整个脚本的任何地方都可以使用,无需使用 global 关键字
用 define() 函数
| 1 | bool define ( string $name , mixed $value [, bool $case_insensitive = false ] ) | 
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感,默认是大小写敏感的。
如
| 1 | define("GREETING", "欢迎访问 Runoob.com", true); | 
用const 关键字
| 1 | const CONSTANT_NAME = "value"; | 
如
| 1 | const SITE_URL = "https://www.runoob.com"; | 
预定义常量
PHP 提供了一些预定义常量,可以在脚本中直接使用。这些常量通常用于获取 PHP 的配置信息、版本信息等
- PHP_VERSION:当前 PHP 解析器的版本。
- PHP_OS:服务器的操作系统。
- PHP_INT_MAX:最大的整数值。
- E_ERROR、- E_WARNING、- E_PARSE等:错误报告级别
PHP字符串变量
字符串变量用于存储并处理文本
PHP 中的字符串变量
当赋一个文本值给变量时,记得给文本值加上单引号或者双引号。
| 1 | <?php | 
PHP 并置运算符
并置运算符 (.) 用于把两个字符串值连接起来
| 1 | <?php | 
上面的代码中,我们已经使用了两次并置运算符。这是由于我们需要在两个字符串之间插入一个空格
PHP strlen() 函数
strlen() 函数返回字符串的长度(字节数)
PHP strpos() 函数
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
PHP运算符
算术运算符
| 运算符 | 名称 | 描述 | 实例 | 结果 | 
|---|---|---|---|---|
| x + y | 加 | x 和 y 的和 | 2 + 2 | 4 | 
| x - y | 减 | x 和 y 的差 | 5 - 2 | 3 | 
| x * y | 乘 | x 和 y 的积 | 5 * 2 | 10 | 
| x / y | 除 | x 和 y 的商 | 15 / 5 | 3 | 
| x % y | 模(除法的余数) | x 除以 y 的余数 | 5 % 2 10 % 8 10 % 2 | 1 2 0 | 
| -x | 设置负数 | 取 x 的相反符号 | <?php $x = 2; echo -$x; ?> | -2 | 
| ~x | 取反 | x 取反,按二进制位进行”取反”运算。运算规则: ~1=-2;    ~0=-1; | <?php $x = 2; echo ~$x; ?> | -3 | 
| a . b | 并置 | 连接两个字符串 | “Hi” . “Ha” | HiHa | 
整除运算符 **intdiv()**,该函数返回值为第一个参数除于第二个参数的值并取整(向下取整)
var_dump(intdiv(10, 3));会输出int(3)
[!IMPORTANT]
var_dump()是一个非常有用的调试函数,用于输出变量的详细信息,包括数据类型和值
赋值运算符
| 运算符 | 等同于 | 描述 | 
|---|---|---|
| x = y | x = y | 左操作数被设置为右侧表达式的值 | 
| x += y | x = x + y | 加 | 
| x -= y | x = x - y | 减 | 
| x *= y | x = x * y | 乘 | 
| x /= y | x = x / y | 除 | 
| x %= y | x = x % y | 模(除法的余数) | 
| a .= b | a = a . b | 连接两个字符串 | 
递增/递减运算符
| 运算符 | 名称 | 描述 | 
|---|---|---|
| ++ x | 预递增 | x 加 1,然后返回 x | 
| x ++ | 后递增 | 返回 x,然后 x 加 1 | 
| – x | 预递减 | x 减 1,然后返回 x | 
| x – | 后递减 | 返回 x,然后 x 减 1 | 
比较运算符
| 运算符 | 名称 | 描述 | 实例 | 
|---|---|---|---|
| x == y | 等于 | 如果 x 等于 y,则返回 true | 5==8 返回 false | 
| x === y | 绝对等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5===”5” 返回 false | 
| x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true | 
| x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true | 
| x !== y | 不绝对等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!==”5” 返回 true | 
| x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false | 
| x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true | 
| x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false | 
| x <= y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true | 
逻辑运算符
| 运算符 | 名称 | 描述 | 实例 | 
|---|---|---|---|
| x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 and y > 1) 返回 true | 
| x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==6 or y==5) 返回 true | 
| x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6 y=3 (x==6 xor y==3) 返回 false | 
| x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 && y > 1) 返回 true | 
| x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==5 || y==5) 返回 false | 
| ! x | 非 | 如果 x 不为 true,则返回 true | x=6 y=3 !(x==y) 返回 true | 
数组运算符
| 运算符 | 名称 | 描述 | 
|---|---|---|
| x + y | 集合 | x 和 y 的集合 | 
| x == y | 相等 | 如果 x 和 y 具有相同的键/值对,则返回 true | 
| x === y | 恒等 | 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true | 
| x != y | 不相等 | 如果 x 不等于 y,则返回 true | 
| x <> y | 不相等 | 如果 x 不等于 y,则返回 true | 
| x !== y | 不恒等 | 如果 x 不等于 y,则返回 true | 
三元运算符
| 1 | (expr1) ? (expr2) : (expr3) | 
以下实例中通过判断 $_GET 请求中含有 user 值,如果有返回 $_GET[‘user’],否则返回 nobody:
| 1 | <?php | 
注:PHP_EOL 是一个换行符
组合比较符(PHP7+)
符号为 **<=>**。组合比较运算符可以轻松实现两个变量的比较,不仅限于数值类数据的比较
| 1 | $c = $a <=> $b; | 
如果 $a > $b, 则 $c 的值为 1。
如果 $a == $b, 则 $c 的值为 0。
如果 $a < $b, 则 $c 的值为 -1。
运算符优先级
下表按照优先级从高到低列出了运算符
说明:左 = 从左到右,右 = 从右到左
| 结合方向 | 运算符 | 附加信息 | 
|---|---|---|
| 无 | clone new | clone 和 new | 
| 左 | [ | array() | 
| 右 | ++ – ~ (int) (float) (string) (array) (object) (bool) @ | 类型和递增/递减 | 
| 无 | instanceof | 类型 | 
| 右 | ! | 逻辑运算符 | 
| 左 | * / % | 算术运算符 | 
| 左 | + – . | 算术运算符和字符串运算符 | 
| 左 | << >> | 位运算符 | 
| 无 | == != === !== <> | 比较运算符 | 
| 左 | & | 位运算符和引用 | 
| 左 | ^ | 位运算符 | 
| 左 | | | 位运算符 | 
| 左 | && | 逻辑运算符 | 
| 左 | || | 逻辑运算符 | 
| 左 | ? : | 三元运算符 | 
| 右 | = += -= *= /= .= %= &= |= ^= <<= >>= => | 赋值运算符 | 
| 左 | and | 逻辑运算符 | 
| 左 | xor | 逻辑运算符 | 
| 左 | or | 逻辑运算符 | 
| 左 | , | 多处用到 | 
| 1 | <?php | 
PHP 条件语句
if 语句 - 在条件成立时执行代码
if…else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
if…elseif….else 语句 - 在若干条件之一成立时执行一个代码块
switch 语句 - 在若干条件之一成立时执行一个代码块
PHP数组
在 PHP 中,array() 函数用于创建数组
| 1 | <?php | 
获取数组的长度
count() 函数用于返回数组的长度(元素的数量)
遍历数值数组
遍历并打印数值数组中的所有值,您可以使用 for 循环
PHP 关联数组
关联数组是使用分配给数组的指定的键的数组
| 1 | <?php | 
遍历关联数组
遍历并打印关联数组中的所有值,您可以使用 foreach 循环
| 1 | <?php | 
[!IMPORTANT]
foreach
在 PHP 中,
foreach循环是一种专门用于遍历数组或对象的结构相比于
for或while循环,foreach能更自然地处理复杂数据结构,如关联数组或对象基本语法
遍历数组
2
3
// 循环体
}**
$array**:需要遍历的数组。**
$value**:当前循环中数组的值。遍历数组的键值对
2
3
// 循环体
}**
$key**:当前元素的键。**
$value**:当前元素的值。实例
简单数组
2
3
4
5
6
7
$x=array("Google","Runoob","Taobao");
foreach ($x as $value)
{
echo $value . PHP_EOL;
}
?>关联数组
2
3
4
5
6
7
$x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao");
foreach ($x as $key => $value)
{
echo "key 为 " . $key . ",对应的 value 为 ". $value . PHP_EOL;
}
?>嵌套数组
2
3
4
5
6
7
8
9
10
11
12
13
14
$users = [
["name" => "John", "age" => 30],
["name" => "Jane", "age" => 25],
["name" => "Doe", "age" => 40]
];
foreach ($users as $user) {
foreach ($user as $key => $value) {
echo "$key: $value, ";
}
echo "\n";
}
?>遍历对象
2
3
4
5
6
7
8
9
10
11
12
13
class Car {
public $brand = "Toyota";
public $model = "Corolla";
public $year = 2022;
}
$car = new Car();
foreach ($car as $property => $value) {
echo "$property: $value\n";
}
?>
数组排序
数组中的元素可以按字母或数字顺序进行降序或升序排列
sort()
对数组进行升序排列
rsort()
对数组进行降序排列
asort()
根据数组的值,对关联数组进行升序排列
| 1 | <?php | 
arsort()
根据数组的值,对关联数组进行降序排列
ksort()
根据数组的键,对关联数组进行升序排列
krsort()
根据数组的键,对关联数组进行降序排列
PHP 超级全局变量
超级全局变量在一个脚本的全部作用域中都可用
PHP 超级全局变量列表:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
PHP $GLOBALS
$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
PHP $_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。
PHP $_REQUEST
PHP $_REQUEST 用于收集HTML表单提交的数据
PHP $_POST
PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:”method=”post”。
PHP $_GET
PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:”method=”get”
$_GET 也可以收集URL中发送的数据
假定我们有一个包含参数的超链接HTML页面:
| 1 | <html> | 
当用户点击链接 “Test $GET”, 参数 “subject” 和 “web” 将发送至”test_get.php”,你可以在 “test_get.php” 文件中使用 $_GET 变量来获取这些数据。以下为 “test_get.php” 文件的代码:
| 1 | <html> | 
PHP循环
- while - 只要指定的条件成立,则循环执行代码块
- do…while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
- for - 循环执行代码块指定的次数
- foreach - 根据数组中每个元素来循环代码块
PHP面向对象(难理解)
面向对象(Object-Oriented,简称 OO)是一种编程思想和方法,它将程序中的数据和操作数据的方法封装在一起,形成”对象”,并通过对象之间的交互和消息传递来完成程序的功能
关键概念
| 概念 | 说明 | 
|---|---|
| 类(class) | 对象的模板,定义属性和方法 | 
| 对象(object) | 通过类实例化的具体对象 | 
| 属性(property) | 类中的变量(也叫成员变量) | 
| 方法(method) | 类中的函数 | 
| 构造方法(__construct) | 实例化对象时自动执行 | 
| 析构方法(__destruct) | 对象销毁时自动执行 | 
| 继承(extends) | 子类继承父类的方法和属性 | 
| 多态(polymorphism) | 不同类可以实现相同的方法 | 
| 封装(encapsulation) | 限制属性和方法的访问权限 | 
| 接口(interface) | 定义类必须实现的方法 | 
| 抽象类(abstract) | 不能实例化的类,必须被子类继承 | 
类(class)
| 1 | class Person { | 
类是对象的模板,定义属性和方法,类使用 class 关键字后加上类名定义,类名后的一对大括号({})内可以定义变量和方法,类的变量使用 var 来声明, 变量也可以初始化值
[!CAUTION]
类,对象,当前对象的关系
类 是一种模板或蓝图。比如,
class Car { ... }是一个汽车的模板。对象 是从类生成的具体实例。比如,
$car1 = new Car();是一辆具体的汽车。当前对象 是某一时刻你正在操作的对象。如果你正在对
$car1调用方法,那么$car1就是当前对象,$this就是指当前对象,在方法里用$this来访问或修改它的属性和方法。
对象(object)
对象是类的实例。通过 new 关键字可以创建一个类的实例。
| 1 | $person1 = new Person("Alice", 25); | 
访问控制/封装(encapsulation)
PHP 提供 3 种访问控制属性或方法的修饰符:
| 修饰符 | 作用 | 
|---|---|
| public | 公开,类内外都能访问 | 
| private | 私有,只有定义它的类内部能访问,在子类中也无法直接访问,不能重定义 | 
| protected | 受保护,类内部和子类能访问,类的外部无法直接访问 | 
属性的访问控制
类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有
方法的访问控制
类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有
继承(extends)
子类(Child Class) 可以继承 父类(Parent Class) 的方法和属性,用 extends 关键字实现,PHP 不支持多继承
| 1 | class Animal { | 
 Dog 继承 Animal,但重写了 speak() 方法,让狗狗可以发出「汪汪」的叫声
方法重写
允许子类重写(覆盖)父类的方法
关键点
- 子类 继承 父类
- 子类 使用相同的方法名 覆盖父类的方法
- 方法的 访问权限 放宽(protected方法可以被public重写)
基本用法
| 1 | class Animal { | 
子类 Dog 重写了 speak() 方法,不再继承父类 Animal 的默认实现
parent:: 关键字调用父类方法
如果子类需要调用父类的同名方法,可以使用 parent::方法名()
| 1 | class Animal { | 
 parent::speak() 调用了父类 Animal 的 speak(),然后追加了 "🐶 但狗会汪汪叫!"
Final 关键字
用于防止继承(类)和方法重写(方法),不能用于属性
多态(polymorphism)
不同的类可以用相同的方法名,但实现不同的功能
| 1 | class Animal { | 
不同的类(Dog 和 Cat)继承了 Animal,但重写了 makeSound() 方法,实现不同的功能
抽象类(abstract)
抽象类只适合作为「模板」不能被实例化(创建对象),必须由子类继承并实现其方法
| 1 | abstract class Shape { | 
 Shape 是抽象类,不能直接创建对象,Circle 继承它并实现 area() 方法
接口(interface)
接口 定义了「必须实现」的方法,确保不同类有相同的行为
接口是通过 interface 关键字来定义的,接口中定义的所有方法都必须是公有
要实现一个接口,使用 implements 操作符
| 1 | //定义接口 | 
静态成员(Static)
静态方法和属性属于类本身,不需要实例化就可直接访问
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)
| 1 | <?php | 
静态成员 用 :: 访问
魔术方法
魔术方法 是 PHP 预定义的特殊方法
| 方法 | 作用 | 
|---|---|
| __construct() | 构造函数,创建对象时自动调用 | 
| __destruct() | 析构函数,销毁对象时调用 | 
| __get($name) | 访问不存在的属性 | 
| __set($name, $value) | 给不存在的属性赋值 | 
| __call($name, $arguments) | 调用不存在的方法 | 
| __toString() | 对象被当作字符串时调用 | 
| 1 | <?php | 
输出为
| 1 | 构造函数 | 
PHP表单
PHP表单和用户输入
PHP 中的 $_GET 和 $_POST 变量用于检索表单中的信息,比如用户输入
PHP 表单处理
当处理 HTML 表单时,PHP 能把来自 HTML 页面中的表单元素自动变成可供 PHP 脚本使用
PHP 获取下拉菜单的数据
PHP 下拉菜单单选
以下实例我们设置了下拉菜单三个选项,表单使用 GET 方式获取数据,action 属性值为空表示提交到当前脚本,我们可以通过 select 的 name 属性获取下拉菜单的值:
| 1 | <?php | 
[!IMPORTANT]
htmlspecialchars($_GET['q'])是一种防止 跨站脚本攻击XSS 的安全措施
htmlspecialchars()函数会对用户输入的数据进行转义处理,将特殊的 HTML 字符转换为 HTML 实体,以防止它们被解释为 HTML 或 JavaScript 代码将以下字符转换为 HTML 实体:
&→&
<→<
>→>
"→"
'→'(仅在使用ENT_QUOTES时)
2
3
4
5
// 假设 URL 为:http://example.com/?q=<script>alert('XSS')</script>
$q = $_GET['q'];
echo "您输入的内容是:$q";
//输出:您输入的内容是:<script>alert('XSS')</script>
2
3
4
5
// 假设 URL 为:http://example.com/?q=<script>alert('XSS')</script>
$q = htmlspecialchars($_GET['q']);
echo "您输入的内容是:$q";
//输出:您输入的内容是:<script>alert('XSS')</script>
[!NOTE]
php与html切换
2
3
4
5
6
7
// 执行一些 PHP 代码
} else {
?>
<!-- 这里是 HTML 代码 -->
<?php
}
PHP 下拉菜单多选
如果下拉菜单是多选的( multiple=”multiple”),我们可以通过将设置 select name=”q[]” 以数组的方式获取,以下使用 POST 方式提交
| 1 | <?php | 
单选按钮表单
PHP 单选按钮表单中 name 属性的值是一致的,value 值是不同的
| 1 | <?php | 
checkbox 复选框
PHP checkbox 复选框可以选择多个值
| 1 | <?php | 
PHP 表单验证
$_SERVER[“PHP_SELF”] 变量
是一个超全局变量,用于返回当前执行脚本的文件路径(相对于网站根目录)
通常用于:表单的自提交(self-submitting form)和动态生成页面链接。
基本使用
| 1 | <?php | 
假设访问路径:URL: http://www.example.com/test/form.php
输出结果($_SERVER["PHP_SELF"] 的值为):
| 1 | /test/form.php | 
表单自提交
通过 $_SERVER["PHP_SELF"] 实现表单提交到当前页面
| 1 | <?php | 
htmlspecialchars($_SERVER["PHP_SELF"])避免XSS
使用 PHP 验证表单数据
首先我们对用户所有提交的数据都通过 PHP 的 htmlspecialchars() 函数处理。
当我们使用 htmlspecialchars() 函数时,在用户尝试提交以下文本域:
| 1 | <script>location.href('http://www.runoob.com')</script> | 
该代码将不会被执行,因为它会被保存为HTML转义代码,如下所示:
| 1 | <script>location.href('http://www.runoob.com')</script> | 
以上代码是安全的,可以正常在页面显示或者插入邮件中。
当用户提交表单时,我们将做以下两件事情:
- 使用 PHP trim() 函数去除用户输入数据中不必要的字符 (如:空格,tab,换行)。
- 使用PHP stripslashes()函数去除用户输入数据中的反斜杠 (\)
| 1 | <?php | 
PHP 表单 - 必需字段
PHP - 必需字段
| 字段 | 验证规则 | 
|---|---|
| 名字 | 必需。 + 只能包含字母和空格 | 
| 必需。 + 必需包含一个有效的电子邮件地址(包含”@”和”.”) | |
| 网址 | 可选。 如果存在,它必需包含一个有效的URL | 
| 备注 | 可选。多行字段(文本域)。 | 
| 性别 | 必需。必需选择一个。 | 
| 1 | <?php | 
PHP - 显示错误信息
| 1 | <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> | 
[!IMPORTANT]
<span class="error">* <?php echo $nameErr;?></span>是用来在 HTML 页面中动态显示表单验证的错误提示消息的如果
$nameErr为空,则此部分不会显示内容。如果
$nameErr包含错误消息,会在页面中显示,例如:名字是必填项
PHP 表单 - 验证邮件和URL
PHP - 验证名称
以下代码将通过简单的方式来检测 name 字段是否包含字母和空格,如果 name 字段值不合法,将输出错误信息:
| 1 | $name = test_input($_POST["name"]); | 
[!IMPORTANT]
preg_match
进行正则表达式匹配
正则表达式
preg_replace()可用于删除所有 HTML 标签
2
3
4
5
$html = "<h1>Title</h1><p>Content</p>";
$plainText = preg_replace("/<[^>]+>/", "", $html); // 替换所有 HTML 标签
echo $plainText; // 输出 "TitleContent"
?>
PHP - 验证邮件
| 1 | $email = test_input($_POST["email"]); | 
\w匹配任意字母、数字或下划线([a-zA-Z0-9_])
PHP - 验证 URL
以下代码将检测URL地址是否合法 (以下正则表达式运行URL中含有破折号:”-“), 如果 URL 地址不合法,将输出错误信息
| 1 | $website = test_input($_POST["website"]); | 
PHP $GET和$POST变量
$_GET 变量
预定义的 $_GET 变量用于收集来自 method=”get” 的表单中的值
从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制
在 HTML 表单中使用 method=”get” 时,所有的变量名和值都会显示在 URL 中,,因此可以在收藏夹中收藏该页面,但在发送密码或其他敏感信息时,不应该使用这个方法
| 1 | http://www.runoob.com/welcome.php?fname=Runoob&age=3 | 
$_POST 变量
预定义的 $_POST 变量用于收集来自 method=”post” 的表单中的值
从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制
注释:然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)
变量不显示在 URL 中,所以无法把页面加入书签
| 1 | http://www.runoob.com/welcome.php | 
$_REQUEST 变量
预定义的 $_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。
$_REQUEST 变量可用来收集通过 GET 和 POST 方法发送的表单数据
PHP 高级教程
PHP 包含文件
用于将一个文件的内容插入到另一个文件中
PHP include 和 require 语句
include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:
require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。
| 1 | include 'filename'; | 
实例
1
假设有一个标准的页头文件,名为 “header.php”。如需在页面中引用这个页头文件,请使用 include/require
| 1 | <html> | 
2
假设我们有一个在所有页面中使用的标准菜单文件。
“menu.php”:
| 1 | echo '<a href="/">主页</a> | 
网站中的所有页面均应引用该菜单文件。以下是具体的做法:
| 1 | <html> | 
3
假设我们有一个定义变量的包含文件(”vars.php”):
| 1 | <?php | 
这些变量可用在调用文件中:
| 1 | <html> | 
PHP 文件处理
打开文件
fopen() 函数用于在 PHP 中打开文件
| 1 | <?php | 
此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件
| 模式 | 描述 | 
|---|---|
| r | 只读。在文件的开头开始。 | 
| r+ | 读/写。在文件的开头开始。 | 
| w | 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。 | 
| w+ | 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。 | 
| a | 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。 | 
| a+ | 读/追加。通过向文件末尾写内容,来保持文件内容。 | 
| x | 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 | 
| x+ | 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 | 
如果 fopen() 函数无法打开指定文件,则返回 0 (false),可通过下例生成一段消息
| 1 | <?php | 
关闭文件
fclose() 函数用于关闭打开的文件
| 1 | <?php | 
检测文件末尾(EOF)
feof() 函数检测是否已到达文件末尾(EOF)
| 1 | if (feof($file)) echo "文件结尾"; | 
在 w 、a 和 x 模式下,无法读取打开的文件
逐行读取文件
fgets() 函数用于从文件中逐行读取文件,在调用该函数之后,文件指针会移动到下一行
| 1 | <?php | 
逐字符读取文件
fgetc() 函数用于从文件中逐字符地读取文件,在调用该函数之后,文件指针会移动到下一个字符
| 1 | <?php | 
PHP 文件上传
创建一个文件上传表单
| 1 | <html> | 
[!IMPORTANT]
enctype
在 HTML 表单中,
enctype属性用于指定表单数据在发送到服务器时的编码类型。这个属性主要在使用POST方法时生效,决定了表单中数据如何被格式化。下面是常用的enctype值:
值 描述 application/x-www-form-urlencoded默认值。表单数据会被编码为键值对(键和值通过 =连接,不同键值对通过&连接)以 URL 编码的形式发送到服务器。适用于普通表单(比如文本输入)multipart/form-data用于上传文件时。数据会以分段形式进行编码,每段包含一个表单控件的数据。必须在表单中使用 method="post"和enctype="multipart/form-data"才能上传文件text/plain表单数据以纯文本形式进行编码(键值对以 =连接,不同键值对通过换行符分隔)不会对特殊字符进行编码
<input> 标签的 type=”file” 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
创建上传脚本
| 1 | <?php | 
通过使用 PHP 的全局数组 $_FILES,可以从客户计算机向远程服务器上传文件
[!IMPORTANT]
$_FILES
第一个参数是表单的 input name,第二个下标可以是 “name”、”type”、”size”、”tmp_name” 或 “error”
字段 说明 示例 $_FILES['file']['name']上传文件的原始名称(包括扩展名) example.jpg$_FILES['file']['type']上传文件的 MIME 类型(例如 image/jpeg,text/plain)image/jpeg$_FILES['file']['size']上传文件的大小,以字节为单位 102400(100 KB)$_FILES['file']['tmp_name']文件上传后存储在服务器上的临时文件名 / tmp/phpY9k1b9$_FILES['file']['error']上传过程中发生的错误代码 UPLOAD_ERR_OK(0)常见的error错误代码
错误代码 说明 错误数字 UPLOAD_ERR_OK文件上传成功 0 UPLOAD_ERR_INI_SIZE上传的文件超过了 PHP 配置文件 upload_max_filesize的限制1 UPLOAD_ERR_FORM_SIZE上传的文件超过了 HTML 表单设置的 MAX_FILE_SIZE的限制2 UPLOAD_ERR_PARTIAL文件部分上传(可能由于网络中断等原因) 3 UPLOAD_ERR_NO_FILE没有文件被上传 4 UPLOAD_ERR_NO_TMP_DIRPHP 缺少临时文件夹 6 UPLOAD_ERR_CANT_WRITEPHP 无法写入文件到磁盘 7 UPLOAD_ERR_EXTENSION上传被 PHP 扩展程序阻止 8 
上传限制
限制文件上传的格式(如.gif、.png)及上传文件的大小
保存被上传的文件
| 1 | <?php | 
[!IMPORTANT]
in_array($extension, $allowedExts)用于检查文件扩展名是否在允许的扩展名列表中
$extension,即文件扩展名,$allowedExts,即允许的扩展名列表
PHP Cookie
cookie 常用于识别用户
cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie
创建Cookie
 setcookie() 函数用于设置 cookie,setcookie() 函数必须位于 <html> 标签之前
| 1 | setcookie(name, value, expire, path, domain); | 
实例
创建名为 “user” 的 cookie,并为它赋值 “runoob”,规定了此 cookie 在一小时后过期
| 1 | <?php | 
[!CAUTION]
在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用
setrawcookie()取而代之)
[!TIP]
可以通过另一种方式设置 cookie 的过期时间(比使用秒表示的方法简单)
2
3
4
$expire=time()+60*60*24*30;
setcookie("user", "runoob", $expire);
?>在上面的实例中,过期时间被设置为一个月(60 秒 * 60 分 * 24 小时 * 30 天)
取回Cookie的值
PHP 的 $_COOKIE 变量用于取回 cookie 的值
在下面的实例中,我们取回了名为 “user” 的 cookie 的值,并把它显示在了页面上:
| 1 | <?php | 
在下面的实例中,我们使用 isset() 函数来确认是否已设置了 cookie:
| 1 | <?php | 
删除Cookie
当删除 cookie 时,应当使过期日期变更为过去的时间点
| 1 | <?php | 
浏览器不支持Cookie
一种解决方式是通过表单传递数据
PHP Session
PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的
与 Cookie 不同,Session 的数据存储在服务器上
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。
开始PHP Session
把用户信息存储到 PHP session 中之前,首先必须启动会话。
注:session_start() 函数必须位于 <html> 标签之前:
| 1 | <?php session_start(); ?> | 
上面的代码会向服务器注册用户的会话,以便可以开始保存用户信息,同时会为用户会话分配一个 UID
存储和读取 Session 数据
使用 PHP $_SESSION 变量
| 1 | <?php | 
销毁Session
可以使用 unset() 或 session_destroy() 函数删除某些 session 数据
unset()
删除 $_SESSION 里的指定数据
| 1 | <?php | 
session_unset()
清空所有会话数据但保留会话本身(即不会删除 Session ID 或终止会话)
session_destroy()
终止会话并删除服务器端的会话数据(如存储在 $_SESSION 中的所有数据)然而,它不会立即清空 $_SESSION 数组中的数据,也不会删除客户端的 Session ID Cookie
| 1 | <?php | 
[!TIP]
如果
session_destroy()后还需要删除客户端的会话 Cookie
| 1 | <?php | 


