一、日期
  1.1 date()函数
    语法:string date ( string $format [, int $timestamp ] )
    参数:
参数描述format必需,规定时间戳的格式;timestamp可选,规定时间戳,默认是当前的日期和时间
  
  1.2 format字符 
format 字符说明返回值例子
--- ---
d 月份中的第几天,有前导零的 2 位数字 01 到 31
D 星期中的第几天,文本表示,3 个字母 Mon 到 Sun
j 月份中的第几天,没有前导零 1 到 31
l("L"的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday
N ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天)
S 每月天数后面的英文后缀,2 个字符 st,nd,rd 或者 th。可以和 j 一起用
w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
z 年份中的第几天 0 到 365
星期 --- ---
W ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的) 例如:42(当年的第 42 周)
--- ---
F 月份,完整的文本格式,例如 January 或者 March January 到 December
m 数字表示的月份,有前导零 01 到 12
M 三个字母缩写表示的月份 Jan 到 Dec
n 数字表示的月份,没有前导零 1 到 12
t 给定月份所应有的天数 28 到 31
--- ---
L 是否为闰年 如果是闰年为 1,否则为 0
o ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003
Y 4 位数字完整表示的年份 例如:1999 或 2003
y 2 位数字表示的年份 例如:99 或 03
时间 --- ---
a 小写的上午和下午值 am 或 pm
A 大写的上午和下午值 AM 或 PM
B Swatch Internet 标准时 000 到 999
g 小时,12 小时格式,没有前导零 1 到 12
G 小时,24 小时格式,没有前导零 0 到 23
h 小时,12 小时格式,有前导零 01 到 12
H 小时,24 小时格式,有前导零 00 到 23
i 有前导零的分钟数 00 到 59>
s 秒数,有前导零 00 到 59>
u 毫秒 (PHP 5.2.2 新加)。需要注意的是 date() 函数总是返回 000000 因为它只接受 integer 参数, 而 DateTime::format() 才支持毫秒。 示例: 654321
时区 --- ---
e 时区标识(PHP 5.1.0 新加) 例如:UTC,GMT,Atlantic/Azores
I 是否为夏令时 如果是夏令时为 1,否则为 0
O 与格林威治时间相差的小时数 例如:+0200
P 与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加) 例如:+02:00
T 本机所在的时区 例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如"Eastern Standard Time",中文版会显示"中国标准时间")。
Z 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 -43200 到 43200
完整的日期/时间 --- ---
c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00
r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200
U 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 参见 time()

二、包含文件

  include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码;
  
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:
    require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行;
    include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行
  <html>
  <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
  </head>
  <body>
    <?php include 'header.php'; ?>
    <h1>欢迎来到我的主页!</h1>
    <p>一些文本</p>
  </body>
  </html>
三、文件操作

  3.1 打开文件
    <html>
    <body>
      <?php
        $file=fopen("welcome.txt","r") or exit("Unable to open file!");
      ?>
    </body>
    </html>
  3.2 文件打开模式
模式描述
r 只读。在文件的开头开始。
r+ 读/写。在文件的开头开始。
w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。
w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。
a 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。
a+ 读/追加。通过向文件末尾写内容,来保持文件内容。
x 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
x+ 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
  3.3 关闭文件
    <?php
      $file = fopen("test.txt","r");

      //执行一些代码

      fclose($file);
    ?>
  3.4 检测文件末尾
    if (feof($file)) echo "文件结尾";
  3.5 逐行读取文件
    <?php
      $file = fopen("welcome.txt", "r") or exit("无法打开文件!");
      // 读取文件每一行,直到文件结尾
      while(!feof($file))
      {
          echo fgets($file). "<br>";
      }
      fclose($file);
    ?>
  3.6 逐字符读取文件
    <?php
      $file=fopen("welcome.txt","r") or exit("无法打开文件!");
      while (!feof($file))
      {
          echo fgetc($file);
      }
      fclose($file);
    ?>

四、文件上传
  4.1 上传表单   
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
      <form action="upload_file.php" method="post" enctype="multipart/form-data">
          <label for="file">文件名:</label>
          <input type="file" name="file" id="file"><br>
          <input type="submit" name="submit" value="提交">
      </form>
    </body>
    </html>
  4.2 上传脚本
    通过使用 PHP 的全局数组 $_FILES,可以从客户计算机向远程服务器上传文件  
    <?php
      if ($_FILES["file"]["error"] > 0)
      {
          echo "错误:" . $_FILES["file"]["error"] . "<br>";
      }
      else
      {
          echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
          echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
          echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
          echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
      }
    ?>
    $_FILES参数说明:

      $_FILES["file"]["name"] - 上传文件的名称

      $_FILES["file"]["type"] - 上传文件的类型

      $_FILES["file"]["size"] - 上传文件的大小,以字节计  

      $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称

      $_FILES["file"]["error"] - 由文件上传导致的错误代码

  4.3 对上传的文件做限制        

      <?php

      // 允许上传的图片后缀
      $allowedExts = array("gif", "jpeg", "jpg", "png");
      $temp = explode(".", $_FILES["file"]["name"]);
      $extension = end($temp);        // 获取文件后缀名
      if ((($_FILES["file"]["type"] == "image/gif")
      || ($_FILES["file"]["type"] == "image/jpeg")
      || ($_FILES["file"]["type"] == "image/jpg")
      || ($_FILES["file"]["type"] == "image/pjpeg")
      || ($_FILES["file"]["type"] == "image/x-png")
      || ($_FILES["file"]["type"] == "image/png"))
      && ($_FILES["file"]["size"] < 204800)    // 小于 200 kb
      && in_array($extension, $allowedExts))
      {
          if ($_FILES["file"]["error"] > 0)
          {
              echo "错误:: " . $_FILES["file"]["error"] . "<br>";
          }
          else
          {
              echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
              echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
              echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
              echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
          }
      }
      else
      {
          echo "非法的文件格式";
      }
    ?>
  
  4.4 保存被上传的文件
    
    <?php  

    // 允许上传的图片后缀      $allowedExts = array("gif", "jpeg", "jpg", "png");
      $temp = explode(".", $_FILES["file"]["name"]);
      echo $_FILES["file"]["size"];
      $extension = end($temp);     // 获取文件后缀名
      if ((($_FILES["file"]["type"] == "image/gif")
      || ($_FILES["file"]["type"] == "image/jpeg")
      || ($_FILES["file"]["type"] == "image/jpg")
      || ($_FILES["file"]["type"] == "image/pjpeg")
      || ($_FILES["file"]["type"] == "image/x-png")
      || ($_FILES["file"]["type"] == "image/png"))
      && ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
      && in_array($extension, $allowedExts))
      {
          if ($_FILES["file"]["error"] > 0)
          {
              echo "错误:: " . $_FILES["file"]["error"] . "<br>";
          }
          else
          {
              echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
              echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
              echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
              echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
        
              // 判断当期目录下的 upload 目录是否存在该文件
              // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
              if (file_exists("upload/" . $_FILES["file"]["name"]))
              {
                  echo $_FILES["file"]["name"] . " 文件已经存在。 ";
              }
              else
              {
                  // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
                  move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
                  echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
              }
          }
      }
      else
      {
          echo "非法的文件格式";
      }
    ?>

五、Cookie
  5.1 创建cookie
  
setcookie() 函数用于设置 cookie; setcookie() 函数必须位于 <html> 标签之前
  语法:setcookie(name, value, expire, path, domain);
  创建名为user的cookie并设置过期时间
  (1) <?php
      setcookie("user", "runoob", time()+3600);
      ?>

      <html>
      .....
  (2) <?php
      $expire=time()+60*60*24*30;
      setcookie("user", "runoob", $expire);
     ?>

     <html>
        .....
  5.2 取回cookie
    
<?php
      // 输出 cookie 值
      echo $_COOKIE["user"];
      // 查看所有 cookie
      print_r($_COOKIE);
    ?>

  5.3 确认是否已经设置了cookie  
    <?php
      if (isset($_COOKIE["user"]))
          echo "欢迎 " . $_COOKIE["user"] . "!<br>";
      else
          echo "普通访客!<br>";
    ?>
  5.4 删除cookie
    
<?php
      // 设置 cookie 过期时间为过去 1 小时
      setcookie("user", "", time()-3600);
    ?>
六、Session 

七、E-mail
  
  7.1 使用mail()函数发送邮件
    语法:mail(to,subject,message,headers,parameters)
参数描述
to 必需。规定 email 接收者。
subject 必需。规定 email 的主题。注释:该参数不能包含任何新行字符。
message 必需。定义要发送的消息。应使用 LF (\n) 来分隔各行。每行应该限制在 70 个字符内。
headers 可选。规定附加的标题,比如 From、Cc 和 Bcc。应当使用 CRLF (\r\n) 分隔附加的标题。
parameters 可选。对邮件发送程序规定额外的参数。
    注意:PHP 运行邮件函数需要一个已安装且正在运行的邮件系统(如:sendmail、postfix、qmail等);所用的程序通过在 php.ini 文件中的配置设置进行定义.
八、错误处理
  
  8.1
使用 die() 函数  

   <?php
     if(!file_exists("welcome.txt"))
     {
       die("文件不存在");
     }
     else
     {
       $file=fopen("welcome.txt","r");
     }
   ?>
   

   8.2 创建自定义错误处理函数

   语法:error_function(error_level,error_message,error_file,error_line,error_context)

   参数

参数描述
error_level 必需。为用户定义的错误规定错误报告级别。必须是一个数字。参见下面的表格:错误报告级别。
error_message 必需。为用户定义的错误规定错误消息。
error_file 可选。规定错误发生的文件名。
error_line 可选。规定错误发生的行号。
error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值

   错误报告级别:

常量描述
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。
256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
4096 E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191 E_ALL 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分)

   创建一个错误处理函数: 

    function customError($errno, $errstr)
    {
      echo "<b>Error:</b> [$errno] $errstr<br>";
      echo "脚本结束";
      die();
    }
   

   把自定义的错误处理函数设置为默认错误处理函数:

    set_error_handler("customError");

    可以添加第二个参数;通过添加的第二个参数(错误报告级别),可以规定所触发的错误类型

 九、异常处理

  9.1 Try、throw 和 catch 

  <?php
    // 创建一个有异常处理的函数
    function checkNum($number)  

    {
      if($number>1)
      {
        throw new Exception("变量值必须小于等于 1");
      }
      return true;
    }

    // 在 try 块 触发异常
    try
    {
      checkNum(2);
      // 如果抛出异常,以下文本不会输出
      echo '如果输出该内容,说明 $number 变量';
    }
    // 捕获异常
    catch(Exception $e)
    {
      echo 'Message: ' .$e->getMessage();
    }
  ?>
  

  9.2 自定义Exception类 

  <?php
    class customException extends Exception
    {
      public function errorMessage()
      {
        // 错误信息
        $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
          .': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
        return $errorMsg;  
      }
    }

    $email = "someone@example...com";

    try
    {
      // 检测邮箱
      if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
      {
        // 如果是个不合法的邮箱地址,抛出异常
        throw new customException($email);
      }
    }

    catch (customException $e)
    {
      //display custom message
      echo $e->errorMessage();
    }
  ?>

  9.3 捕获多个异常  

  <?php
    class customException extends Exception
    {
      public function errorMessage()
      {
        // 错误信息
        $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
          .': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
        return $errorMsg;
      }
    }

    $email = "someone@example.com";

    try
    {
      // 检测邮箱
      if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
      {
        // 如果是个不合法的邮箱地址,抛出异常
        throw new customException($email);
      }
      // 检测 "example" 是否在邮箱地址中
      if(strpos($email, "example") !== FALSE)
      {
        throw new Exception("$email 是 example 邮箱");
      }
    }
    catch (customException $e)
    {
      echo $e->errorMessage();
    }
    catch(Exception $e)
    {
      echo $e->getMessage();
    }
  ?>

  9.4 重复抛出异常 

  <?php
    class customException extends Exception
    {
      public function errorMessage()
      {
        // 错误信息
        $errorMsg = $this->getMessage().' 不是一个合法的 E-Mail 地址。';
        return $errorMsg;
      }
    }

    $email = "someone@example.com";

    try
    {
      try
      {
        // 检测 "example" 是否在邮箱地址中
        if(strpos($email, "example") !== FALSE)
        {
          // 如果是个不合法的邮箱地址,抛出异常
          throw new Exception($email);
        }
      }
      catch(Exception $e)
      {
        // 重新抛出异常
        throw new customException($email);
      }
    }
    catch (customException $e)
    {
      // 显示自定义信息
      echo $e->errorMessage();
    }
  ?>

 9.5 设置顶层异常处理器

  <?php
    function myException($exception)
    {
      echo "<b>Exception:</b> " , $exception->getMessage();
    }

    set_exception_handler('myException');

    throw new Exception('Uncaught Exception occurred');
  ?>

  

 十、过滤器  

10.1 过滤函数
函数描述PHP
filter_has_var() 检查是否存在指定输入类型的变量。 5
filter_id() 返回指定过滤器的 ID 号。 5
filter_input() 从脚本外部获取输入,并进行过滤。 5
filter_input_array() 从脚本外部获取多项输入,并进行过滤。 5
filter_list() 返回包含所有得到支持的过滤器的一个数组。 5
filter_var_array() 获取多个变量,并进行过滤。 5
filter_var() 获取一个变量,并进行过滤。 5

10.2 过滤器
  
ID 名称描述
FILTER_CALLBACK 调用用户自定义函数来过滤数据。
FILTER_SANITIZE_STRING 去除标签,去除或编码特殊字符。
FILTER_SANITIZE_STRIPPED "string" 过滤器的别名。
FILTER_SANITIZE_ENCODED URL-encode 字符串,去除或编码特殊字符。
FILTER_SANITIZE_SPECIAL_CHARS HTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符。
FILTER_SANITIZE_EMAIL 删除所有字符,除了字母、数字以及 !#$%&'*+-/=?^_`{|}~@.[]
FILTER_SANITIZE_URL 删除所有字符,除了字母、数字以及 $-_.+!*'(),{}|\^~[]`<>#%";/?:@&=
FILTER_SANITIZE_NUMBER_INT 删除所有字符,除了数字和 +-
FILTER_SANITIZE_NUMBER_FLOAT 删除所有字符,除了数字、+- 以及 .,eE
FILTER_SANITIZE_MAGIC_QUOTES 应用 addslashes()。
FILTER_UNSAFE_RAW 不进行任何过滤,去除或编码特殊字符。
FILTER_VALIDATE_INT 把值作为整数来验证。
FILTER_VALIDATE_BOOLEAN 把值作为布尔选项来验证。如果是 "1"、"true"、"on" 和 "yes",则返回 TRUE。如果是 "0"、"false"、"off"、"no" 和 "",则返回 FALSE。否则返回 NULL。
FILTER_VALIDATE_FLOAT 把值作为浮点数来验证。
FILTER_VALIDATE_REGEXP 根据 regexp(一种兼容 Perl 的正则表达式)来验证值。
FILTER_VALIDATE_URL 把值作为 URL 来验证。
FILTER_VALIDATE_EMAIL 把值作为 e-mail 地址来验证。
FILTER_VALIDATE_IP 把值作为 IP 地址来验证,只限 IPv4 或 IPv6 或 不是来自私有或者保留的范围。

十一、JSON(在 php5.2.0 及以上版本已经内置 JSON 扩展)
 11.1 json函数
函数描述
json_encode 对变量进行 JSON 编码
json_decode 对 JSON 格式的字符串进行解码,转换为 PHP 变量
json_last_error 返回最后发生的错误
 11.2 json_encode()函数
  
  语法:
string json_encode ( $value [, $options = 0 ] )
  
返回值:用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE
  参数:
    
value: 要编码的值。该函数只对 UTF-8 编码的数据有效
    options:由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS,
         JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT

11.3 json_decode()函数
  
  语法:mixed json_decode ($json_string [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
  参数:
    json_string: 待解码的 JSON 字符串,必须是 UTF-8 编码数
    assoc: 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象
    depth: 整数类型的参数,它指定递归深度
    options: 二进制掩码,目前只支持 JSON_BIGINT_AS_STRING