PHP002

PHP——多维数组

多维数组指的是包含一个或多个数组的数组。

PHP 能理解两、三、四或五级甚至更多级的多维数组。不过,超过三级深的数组对于大多数人难于管理。

注释:数组的维度指示您需要选择元素的索引数。

  • 对于二维数组,您需要两个索引来选取元素(二维数组是数组的数组)
  • 对于三维数组,您需要三个索引来选取元素(三维数组是数组的数组的数组)

image-20220727195654582

image-20220727195718263

PHP日期和时间

获取简单的日期

date() 函数的格式参数是必需的,它们规定如何格式化日期或时间。

  • d - 表示月里的某天(01-31)
  • m - 表示月(01-12)
  • Y - 表示年(四位数)
  • 1 - 表示周里的某天

其他字符,比如 "/", "." 或 "-" 也可被插入字符中,以增加其他格式。

image-20220727195955595

image-20220727200006454

自动版权年份

使用data() 函数在您的网站上自动更新版本年份:

image-20220727200214188

获得简单的时间

  • h - 带有首位零的 12 小时小时格式
  • i - 带有首位零的分钟
  • s - 带有首位零的秒(00 -59)
  • a - 小写的午前和午后(am 或 pm)

image-20220728200336536

通过PHP mktime()创建日期

date() 函数中可选的时间戳参数规定时间戳。如果您未规定时间戳,将使用当前日期和时间(正如上例中那样)。

mktime() 函数返回日期的 Unix 时间戳。Unix 时间戳包含 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)与指定时间之间的秒数。

语法

mktime(hour,minute,second,month,day,year)

image-20220728201041945

通过PHP strtotime()用字符串来创建日期

PHP strtotime() 函数用于把人类可读的字符串转换为 Unix 时间。

语法

strtotime(time,now)

image-20220728201529142

image-20220728201829762

PHP include文件

include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。

通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。

include 和 require 语句是相同的,除了错误处理方面:

  • require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
  • image-20220728203202555
  • include 只生成警告(E_WARNING),并且脚本会继续
  • image-20220728203211786

PHP文件处理

1、readfile() 函数读取文件,并把它写入输出缓冲。

2、fopen() 函数打开文件,也用于创建文件。也许有点混乱,但是在 PHP 中,创建文件所用的函数与打开文件的相同。如果您用 fopen() 打开并不存在的文件,此函数会创建文件,假定文件被打开为写入(w)或增加(a)。

打开文件时,第一个参数包含被打开的文件名,第二个参数规定打开文件的模式。如果 fopen() 函数未能打开指定的文件,下面的例子会生成一段消息:

<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
?>

文件打开的模式如下:

image-20220821122355944

3、fread() 函数读取打开的文件。第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。

fread($myfile,filesize("webdictionary.txt")); //将该文件读至结尾

4、fclose() 函数用于关闭打开的文件。fclose() 需要待关闭文件的名称(或者存有文件名的变量)

注释:用完文件后把它们全部关闭是一个良好的编程习惯。您并不想打开的文件占用您的服务器资源。

fclose($myfile);

5、fgets() 函数用于从文件读取单行。

注释:调用 fgets() 函数之后,文件指针会移动到下一行。

6、feof() 函数检查是否已到达 "end-of-file" (EOF)。这对于遍历未知长度的数据很有用。

<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// 输出单行直到 end-of-file
while(!feof($myfile)) {
  echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>

7、fgetc() 函数用于从文件中读取单个字符。

注释:在调用 fgetc() 函数之后,文件指针会移动到下一个字符。

8、fwrite() 函数用于写入文件。

fwrite() 的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串。

PHP文件上传

1、创建一个文件上传表单

image-20220821123928738

标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

2、创建上传脚本

image-20220821124043016

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:

  • $_FILES["file"]["name"] - 被上传文件的名称
  • $_FILES["file"]["type"] - 被上传文件的类型
  • $_FILES["file"]["size"] - 被上传文件的大小,以字节计
  • $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
  • $_FILES["file"]["error"] - 由文件上传导致的错误代码

3、上传限制

4、保存上传的文件

上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。

这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置

image-20220821124224616

上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹(如上图的“upload”文件夹)。

cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie() 取而代之)。

setcookie() 函数用于设置 cookie。

setcookie(name, value, expire, path, domain);

PHP 的 $_COOKIE 变量用于取回 cookie 的值。

isset() 函数来确认是否已设置了 cookie

当删除 cookie 时,您应当使过期日期变更为过去的时间点。

删除的例子:

<?php 
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>

PHP sessions

PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。

Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

步骤

1、首先必须启动会话:session_start() 函数

2、存储session变量:存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量

3、终结session:删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。

unset() 函数用于释放指定的 session 变量

session_destroy() 函数彻底终结 session

注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据。

PHP mail() 函数

PHP mail() 函数用于从脚本中发送电子邮件。

语法

mail(to,subject,message,headers,parameters)

image-20220821195632778

防止 e-mail 注入的最好方法是对输入进行验证。

使用了 PHP 过滤器来对输入进行验证:

  • FILTER_SANITIZE_EMAIL 从字符串中删除电子邮件的非法字符
  • FILTER_VALIDATE_EMAIL 验证电子邮件地址

PHP错误处理

一些最为重要的错误检测方法:

  • 简单的 "die()" 语句
  • 自定义错误和错误触发器
  • 错误报告

详细见:https://www.w3school.com.cn/php/php_error.asp

set_error_handler():令用户自定义的错误处理程序取代PHP 的默认错误处理程序来处理所有错误。

PHP异常处理

异常(Exception)用于在指定的错误发生时改变脚本的正常流程。

当异常被触发时,通常会发生:

  • 当前代码状态被保存
  • 代码执行被切换到预定义的异常处理器函数
  • 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本

我们将展示不同的错误处理方法:

  • 异常的基本使用
  • 创建自定义的异常处理器
  • 多个异常
  • 重新抛出异常
  • 设置顶层异常处理器

正确的处理程序应当包括:

  1. Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
  2. Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
  3. Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象

可以为一段脚本使用多个异常,来检测多种情况。

可以使用多个 if..else 代码块,或一个 switch 代码块,或者嵌套多个异常。这些异常能够使用不同的 exception 类,并返回不同的错误消息

异常的规则

  • 需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
  • 每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
  • 使用多个 catch 代码块可以捕获不同种类的异常。
  • 可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。

简而言之:如果抛出了异常,就必须捕获它。

PHP过滤器

PHP 过滤器用于验证和过滤外部数据,比如用户的输入。

什么是外部数据?

  • 来自表单的输入数据
  • Cookies
  • 服务器变量
  • 数据库查询结果

过滤器函数:

  • filter_var() - 通过一个指定的过滤器来过滤单一的变量
  • filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
  • filter_input - 获取一个输入变量,并对它进行过滤
  • filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤

有两种过滤器:

Validating 过滤器:

  • 用于验证用户输入
  • 严格的格式规则(比如 URL 或 E-Mail 验证)
  • 如果成功则返回预期的类型,如果失败则返回 FALSE

Sanitizing 过滤器:

  • 用于允许或禁止字符串中指定的字符
  • 无数据格式规则
  • 始终返回字符串

Filter Callback()函数:使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。

(到此 PHP高级教程结束!!!)

posted @   xiaoxuxu  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示