多维数组
一个数组中的值可以是另一个数组,另一个数组的值也可以是一个数组。
多维数组是包含一个或多个数组的数组。
在多维数组中,主数组中的每一个元素也可以是一个数组,子数组中的每一个元素也可以是一个数组。
PHP date() 函数
可把时间戳格式化为可读性更好的日期和时间。
string date ( string $format [, int $timestamp ] )
date() 函数的第一个必需参数 format 规定了如何格式化日期/时间。
这里列出了一些可用的字符:
- d - 代表月中的天 (01 - 31)
- m - 代表月 (01 - 12)
- Y - 代表年 (四位数)
输出为:
2019/10/08
2019.10.08
2019-10-08
包含文件
include 和 require 语句
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:
- require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
- include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
假设您有一个标准的页头文件,名为 “header.php”。如需在页面中引用这个页头文件,请使用 include/require:
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<?php include 'header.php'; ?>
<h1>欢迎来到我的主页!</h1>
<p>一些文本。</p>
</body>
</html>
文件处理
打开文件
fopen(要打开的文件的名称,规定了使用哪种模式来打开文件) 函数用于在 PHP 中打开文件。
打开模式有以下几种
**注释:如果 fopen() 函数无法打开指定文件,则返回 0 (false)。
关闭文件
fclose() 函数用于关闭打开的文件
检测文件末尾(EOF)
feof() 函数检测是否已到达文件末尾(EOF)。
在循环遍历未知长度的数据时,feof() 函数很有用。
**注释:在 w 、a 和 x 模式下,您无法读取打开的文件!
if (feof($file)) echo "文件结尾";
逐行读取文件
fgets() 函数用于从文件中逐行读取文件。
** 注释:在调用该函数之后,文件指针会移动到下一行。
逐字符读取文件
fgetc() 函数用于从文件中逐字符地读取文件。
** 注释:在调用该函数之后,文件指针会移动到下一个字符。
文件上传
参考菜鸟教程https://www.runoob.com/php/php-file-upload.html
Cookie
cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP能够创建并取回 cookie 的值。
- 如何创建 Cookie?
setcookie() 函数用于设置 cookie。
** 注释:setcookie() 函数必须位于 标签之前。在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。
(为防止 URL 编码,请使用 setrawcookie() 取而代之。)
setcookie(name, value, expire, path, domain);
-
如何取回 Cookie 的值?
$_COOKIE(cookie变量名) 变量用于取回 cookie 的值。
使用 isset() 函数来确认是否已设置了 cookie -
如何删除 Cookie?
使过期日期变更为过去的时间点
<?php
// 设置 cookie 过期时间为过去 1 小时
setcookie("user", "", time()-3600);
?>
- 如果浏览器不支持 Cookie 该怎么办?
使用其他的办法在您的应用程序中的页面之间传递信息。
通过表单传递数据。
Session
session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。
- 开始 PHP Session
首先必须启动会话。
** 注释:session_start() 函数必须位于 标签之前
<?php session_start(); ?>
<html>
<body>
//content
</body>
</html>
- 存储 Session 变量
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量。
<?php
session_start();
// 存储 session 数据
$_SESSION['views']=1;
?>
<?php
// 检索 session 数据
echo "浏览量:". $_SESSION['views'];
?>
- 销毁 Session
删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
unset() 函数用于释放指定的 session 变量;通过调用 session_destroy() 函数彻底销毁 session。
** 注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据。
发送电子邮件
mail() 函数
用于从脚本中发送电子邮件。
mail(to,subject,message,headers,parameters)
** PHP 运行邮件函数需要一个已安装且正在运行的邮件系统(如:sendmail、postfix、qmail等)。所用的程序通过在 php.ini 文件中的配置设置进行定义。
防止 E-mail 注入
防止 e-mail 注入的最好方法是对输入进行验证。
错误处理
不同的错误处理方法:
- 简单的 “die()” 语句
- 自定义错误和错误触发器
- 错误报告
异常处理
异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。
当异常被触发时,通常会发生:
- 当前代码状态被保存
- 代码执行被切换到预定义(自定义)的异常处理器函数
- 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本
不同的错误处理方法:
- 异常的基本使用
- 创建自定义的异常处理器
- 多个异常
- 重新抛出异常
- 设置顶层异常处理器
** 异常应该仅仅在错误情况下使用,而不应该用于在一个指定的点跳转到代码的另一个位置。
当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 “catch” 代码块。
如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 “Uncaught Exception” (未捕获异常)的错误消息。
适当的处理异常代码应该包括:
- Try - 使用异常的函数应该位于 “try” 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
- Throw - 里规定如何触发异常。每一个 “throw” 必须对应至少一个 “catch”。
- Catch - “catch” 代码块会捕获异常,并创建一个包含异常信息的对象。
** 每个 throw 必须对应一个 catch
异常的规则
需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
- 每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
- 使用多个 catch 代码块可以捕获不同种类的异常。
- 可以在 try 代码块内的 catch 代码块中抛出(再次抛出)异常。
简而言之:如果抛出了异常,就必须捕获它。
过滤器
PHP 过滤器用于验证和过滤来自非安全来源的数据。
测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。
PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。
输入过滤是最重要的应用程序安全课题之一。
什么是外部数据?
来自表单的输入数据
Cookies
Web services data
服务器变量
数据库查询结果
过滤器函数
- filter_var() - 通过一个指定的过滤器来过滤单一的变量
- filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
- filter_input - 获取一个输入变量,并对它进行过滤
- filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
有两种过滤器:
Validating 过滤器:
- 用于验证用户输入
- 严格的格式规则(比如 URL 或 E-Mail 验证)
- 如果成功则返回预期的类型,如果失败则返回 FALSE
Sanitizing 过滤器:
- 用于允许或禁止字符串中指定的字符
- 无数据格式规则
- 始终返回字符串
选项和标志用于向指定的过滤器添加额外的过滤选项。