php高级

  • php表单
    • GET和POST都创建数组
    • GET和POST被视作$_GET和$_POST,都是超全局变量,意思就是前段传来的get或者post的请求,控制器可以不用定义$_GET和$_POST就可以用
    • $_GET是通过URL参数传递到当前脚本的变量数组
    • $_POST是通过HTTP POST传递到当前脚本的变量数组
    • 我们之所以说GET传值是不安全的是因为从表单发送的信息对任何人都可见的,都是在url中可以看到的,get对发送信息的数量是有限制的,大约在2000个字符
      • 前方高危:注意一定不要用GET方式发送敏感数据,会导致你的信息让别人看到哦!
    • POST传值从表单发送的信息对其他人都是不可见的,对信息的数量也是没有限制的
    • $_SERVER[‘PHP_SELF‘]
      • 一种超全局变量,返回的是当前正在执行的脚本名称
      • 将表单数据发送到本身,不进行页面的跳转
  • php高级
    • date函数:把时间戳格式化为更易懂的日期和时间
      • 有两个参数,第一个参数是必填的(Y-m-d H:i:s),第二个是可选的time()
    • dete_default_timezone_set:设置时区
      • date(“h:i:sa”)
    • mktime:创建日期
      • mktime(hour,minute,second,month,day,year) 时,分,秒,年,月,日
    • strtotime:将可读的字符串转换成Unix时间
    • include和require语句
      • 错误处理方面
        • require会生成致命错误,并停止脚本
        • include只生成警告,脚本继续运行
      • 应用场景
        • require:当文件被应用程序请求时
        • include:当文件不是必需的,且应用程序在文件未找到是应该继续运行时
    • 操作文件
      • 前方高危
        • 当操作文件时必须非常小心,如果操作失误,可能会造成非常严重的破坏
      • 常见的错误
        • 编辑错误的文件
        • 被垃圾数据填满硬盘
        • 意外删除文件内容
      • readfile:读取文件,并把它写入输出缓存
      • fopen:打开文件
        • 两个参数,第一个是打开文件的名字,第二个打开的模式
        • 模式
          • r:打开文件为只读,文件指针在文件的开头开始
          • w:打开文件为只写,删除文件的内容或创建一个新的文件,如果它不存在,文件的指针在文件的开头开始
          • a:打开文件为只写,文件中的现有数据会被保留,文件指针在文件结尾开始,如果文件不存在,创建新的文件
          • x:创建新文件为只写,如果文件存在,返回false和错误
          • r+:同上
          • w+:同上
          • a+:同上
          • x+:同上
      • fread:读取打开的文件
        • 两个参数,第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数
      • fclose:关闭打开的文件
        • 养成用完文件之后将他们全部关闭的习惯
      • fgets:用于从文件读取单行
      • feof:检查是否已到达“end-of-file”
        • 对于遍历未知长度的数据很有用
      • fgetc:用于从文件读取单个字符
      • fwrite:用于写入文件
        • 两个参数,第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串
        • 后写入的文件会覆盖之前文件的内容
    • 文件上传
      • $_FILES
        • $_FILES["file"]["name"]:被上传文件的名称
        • $_FILES["file"]["type"]:被上传文件的类型
        • $_FILES["file"]["size"]:被上传文件的大小,以字节计
        • $_FILES["file"]["tmp_name"]:存储在服务器的文件的临时副本的名称
        • $_FILES["file"]["error"]:由文件上传导致的错误代码
    • 错误处理
      • php中一些最为重要的错误检测方法
        • 简单的die()语句
          • 基本的错误处理:使用die()函数
        • 自定义错误和错误触发器
          • 默认错误处理程序是内建的错误处理程序
            • E_USER_ERROR:致命的用户生成的run-time,错误无法恢复,脚本执行被中断
            • E_USER_WARNING:非致命的用户生成的run-time警告,脚本执行不会被中断
            • E_USER_NOTICE:默认,用户生成的run-time通知,脚本发现了可能的错误,也可能在脚本正常运行时发生
          • 创建一个错误专用函数,该函数至少有2个参数(error_level,error_message),对多可接受5个参数(可选file,line-number以及error_context)
            • error_level:必须,为用户定义的错误规定错误报告级别
            • error-message:必须,为用户定义的错误规定错误消息
            • error_file:规定错误在其中发生的文件名
            • error_line:规定错误发生的行号
              • error_context:规定一个数组,包含了当错误发生时在用的每个变量以及它们的值
            • 错误报告级别级别
              • E_WARNING:非致命的run-time错误
              • E_NOTICE:run-time通知,脚本发现可能有错误发生,但也可能在脚本正常运行时发生
              • E_USER_ERROR:致命的用户生成的错误
              • E_USER_WARNING:非致命的用户生成的警告
              • E_USER_NOTICE:用户生成的通知
              • E_RECOVERABLE_ERROR:可捕获的致命错误
              • E_ALL:所有错误和警告除级别E_STRICT以外
        • 错误报告
    • 异常处理
      • 什么事异常
        • 用于在指定的错误发生时改变脚本的正常流程
      • 当异常被触发时,通常会发生
        • 当前代码状态被保存
        • 代码执行被切换到预定义的异常处理器函数
        • 处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本
      • 不同的错误处理方法
        • 异常的基本使用
          • 当异常被抛出时,其后的代码不会继续执行,php会尝试查找匹配的“catch”代码块
          • 如果异常没有被捕获,而且又没有使用set_seception_handler作相应的处理的话,那么将发生一个严重的错误,并且输出“Uncaught Exception”(未捕获异常)的错误消息
        • 创建自定义的异常处理器
        • 多个异常
        • 重新抛出异常
        • 设置顶层异常处理器
      • set_exception_handler:设置处理未捕获异常的用户定义函数
      • Try:使用异常的函数应该位于“try”代码块内,如果没有触发异常,则代码将照常执行,如果异常被触发,将会抛出一个异常
      • Throw:规定如何触发异常,每一个“throw”必须对应至少一个“catch”
      • Catch:“catch”代码块会捕获异常,并创建一个包含异常信息的对象
      • 异常的规则
        • 需要进行异常处理的代码应该放入try代码块内,以便捕获潜在的异常
        • 每个try或throw代码块必须至少拥有一个应用的catch代码块
        • 使用多个catch代码块可以捕获不同种类的异常
        • 可以在try代码块内的catch代码块中再次抛出(re-throw)异常
      • 如果抛出异常,就必须捕获它
    • 过滤器
      • 什么是php过滤器
        • 用于验证和过滤来自非安全来源的数据
        • 验证和过滤用户输入或自定义数据是任何web应用程序的重要组成部分
        • 设计php的过滤器扩展的目的是使数据过滤更轻松快捷
      • 为什么使用过滤器
        • 几乎所有web应用程序都依赖外部的输入,这些数据通常来自用户或其他应用程序,通过使用过滤器,能够确保应有程序获得正确的输入类型
        • 始终对外部数据进行过滤
          • 什么事外部数据
            • 来自表单的输入数据
            • cookies
            • 服务器变量
            • 数据库查询结果
        • 输入过滤是最重要的应用程序安全课题之一
      • 函数和过滤器
        • 如果需要过滤变量,使用下面的过滤器函数之一
          • filter_var:通过一个指定的过滤器函数来过滤单一的变量
          • filter_var_array:通过相同的或不同的过滤器来过滤多个变量
          • filter_input:获取一个输入变量,并对它进行过滤
          • filter_input_array:获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
      • 两种过滤器
        • Validating
          • 用于验证用户输入
          • 严格的格式规则
          • 如果成功则返回预期的类型,如果失败则返回FALSE
        • Sanitizing
          • 用于允许或禁止字符串中指定的字符
          • 无数据格式规则
          • 始终返回字符串
  • php的安全
    • 跨站点脚本(Cross-site scripting , XSS)
      • 一种计算机安全漏洞类型,一般都是出现在web应用程序
      • XSS能够使攻击者向其他用户浏览的网页中输入客户端脚本
      • 如何预防
        • htmlspecialchars()函数
          • 将特殊字符转化为html实体,这么做的含义是防止攻击者通过在表单中注入HTML或javascript代码
      • 在用户提交表单的时候我们还需要做两件事:
        • 通过PHP trim函数,去除用户输入数据中不必要的字符(多余的空格,制表符,换行)
        • 通过PHP stripslashes函数,删除用户输入数据中的反斜杠(\)
      • 尽量使用检查函数,$_SERVER[‘REQUEST_METHOD‘]
    • E-mail注入
      • 未经授权的用户可通过输入表单在邮件头部插入数据
      • 预防E-mail注入
        • 最好的方法是对输入进行验证
        • FILTER_SANITIZE_EMAIL:从字符串中删除电子邮件的非法字符
        • FILTER_VALIDATE_EMAIL:验证电子邮件地址
        • filter_var:通过指定的过滤器过滤变量
        • spamcheck:电子邮件扫描和Linux系统的检疫制度

相关文章