• PHP高级教程(二)


    Cookies

    • 什么是 Cookie?
      cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 相同的cookie。通过 PHP,服务端能够创建并读取 cookie 的值。
    • 如何创建 cookie?
      setcookie() 函数用于设置 cookie。
      注意:setcookie() 函数必须位于 标签之前。
      setcookie(name, value, expire, path, domain);
      创建名为 "user" 值为 "Alex Porter"的 cookie。规定了此 cookie 在一小时后过期。

      注意:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie() 取而代之)。所以存在浏览器的cookie,有的是被url编码后的形式。
    • 如何读取 Cookie 的值?
      PHP 的 $_COOKIE 变量用于读取 cookie 的值。
      打印名为user的cookie的值,打印所有cookie。

      isset()函数可确认是否已设置cookie
    • 如何删除 cookie?
      服务端要删除浏览器的cookie,设置cookie的过期日期变更为过去的时间点。

    Sessions

    PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。
    Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。服务端中保存着以PHPSESSID的值命名的文件中存有对应浏览器/用户的session。

    • 开始 PHP Session
      在把用户信息存储到 PHP session 中之前,首先必须启动会话。
      即在使用session前,必须先session_start()。
      注意:session_start() 函数必须位于 标签之前

      上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID。
    • 存储 Session 变量
      存储,读取和修改 session 变量的正确方法是使用 PHP $_SESSION 变量

    应用session做的访问计数器

    • 终结 Session
      如果希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
      unset() 函数用于释放指定的 session 变量:

      通过 session_destroy() 函数彻底终结 session:
      session_destroy() 将重置 session,将失去所有已存储的 session 数据。

    错误处理

    默认的错误处理很简单。一条消息会被发送到浏览器,这条消息带有文件名、行号以及一条描述错误的消息。
    类似这样

    不安全的错误处理会暴露很多敏感信息,比如网站的绝对目录
    以下是三种错误处理方法:

    • 使用 die() 函数
      当用fopen函数打开一个不存在的文件时,会爆出类似错误:

      为了避免用户获得上面的信息,在访问文件之前检测该文件是否存在

      如果文件不存在,用户只会获得这样的信息:

      同时,这种错误处理会终止脚本运行,这会显得有点不合适。
    • 创建自定义错误处理器
      创建一个专用函数,可以在 PHP 中发生错误时调用该函数。
      该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及 error context):


      创建一个处理错误的函数:

      处理错误的函数有了,现在需要把他设置成错误处理函数,让php认识他。

      通过

      使我们的自定义函数来处理所有错误,可以添加第二个参数来规定处理错误的级别。
      最后的实例:

      输出:

    主动触发错误
    某些时候我们想主动触发错误,比如某个变量当用户输入大于1时触发错误
    可以使用trigger_error()来完成

    会爆出

    通过添加的第二个参数,能够规定所触发的错误级别
    再结合自定义错误处理函数,就是以下例子:
    如果 "test" 变量大于 "1",则发生 E_USER_WARNING 错误。如果发生了 E_USER_WARNING,我们将使用我们的自定义错误处理程序并结束脚本

    输出:

    • 错误记录
      默认地,根据在 php.ini 中的 error_log 配置,PHP 向服务器的错误记录系统或文件发送错误记录。通过使用 error_log() 函数,可以向指定的文件或远程目的地发送错误记录。

    异常处理

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

    • 什么是异常?
      PHP 5 提供了一种新的面向对象的错误处理方法。
      异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。
      当异常被触发时,通常会发生:
    1. 当前代码状态被保存
    2. 代码执行被切换到预定义的异常处理器函数
    3. 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本
    • 异常的基本使用
      当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。
      如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。
      尝试抛出一个异常,同时不去捕获它:

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

    触发一个异常:

    解释:
    上面的代码抛出了一个异常,并捕获了它:

    1. 创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。
    2. 在 "try" 代码块中调用 checkNum() 函数。
    3. checkNum() 函数中的异常被抛出
    4. "catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。
    5. 通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息

    异常的规则:

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

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

    过滤器(Filter)

    • 什么是 PHP 过滤器?
      PHP自带的,用于验证和过滤来自非安全来源的数据,比如用户的输入。
    • 什么是外部数据?
      来自表单的输入数据
      Cookies
      服务器变量
      数据库查询结果
    • 过滤函数
      常用过滤函数:
    1. filter_var() - 通过一个指定的过滤器来过滤单一的变量
    2. filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
    3. filter_input - 获取一个输入变量,并对它进行过滤
    4. filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤

    用 filter_var() 函数验证了一个整数:

    上面的代码使用了 "FILTER_VALIDATE_INT" 过滤器来过滤变量。由于这个整数是合法的,因此代码的输出是:"Integer is valid"。
    假如我们尝试使用一个非整数的变量,则输出是:"Integer is not valid"。

    过滤函数:

    • 过滤器
      有两种过滤器Validating 和 Sanitizing:
    1. Validating 过滤器:
      用于验证用户输入
      严格的格式规则(比如 URL 或 E-Mail 验证)
      如果成功则返回预期的类型,如果失败则返回 FALSE
    2. Sanitizing 过滤器:
      用于允许或禁止字符串中指定的字符
      无数据格式规则
      始终返回字符串

    过滤器:

  • 相关阅读:
    python logging模块
    python 面向对象进阶之对象内置方法
    Python基于Socket实现简易多人聊天室
    Pypi项目包发布
    Unable to locate package python3 错误解决办法
    Invalid operation updata 错误解决方法
    测试用例组合生成工具
    Python GUI之Tkiner实战
    Python爬虫实现翻译功能
    免费AWS云服务器一键搭建Trojan详细教程
  • 原文地址:https://www.cnblogs.com/Rain99-/p/13182389.html
Copyright © 2020-2023  润新知