qinling072 发表于 2018-12-12 09:57:39

php 知识总结

  //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出。
  / 【命名规则】 /
  常量名 类常量建议全大写,单词间用下划线分隔// MIN_WIDTH
  变量名建议用下划线方式分隔      // $var_name
  函数名建议用驼峰命名法      // varName
  定界符建议全大写         // 访问。

[*]  静态成员是所有对象共享,属于类。

[*]静态成员用类调用,非静态成员用对象调用。

静态属性


[*]  静态属性不可以由对象通过->操作符来访问。

[*]静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。 所以你可以把静态属性初始化为整型或数组,但不能指向另一个变量或函数返回值,也不能指向一个对象。

静态方法


[*]  由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。

[*]用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。
  // 访问解析操作符(::)


[*]  可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。

[*]  当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字。

[*]self 和 parent 这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。
  // 访问辨析


[*]  对象成员,内部通过$this指定,外部通过对象名指定,均用->访问,访问属性时不需加$。
  对象名->属性名对象名->方法名()$this->属性名    $this->方法名()

[*]  类成员,内部通过self或parent指定,外部通过类名指定,均用::访问,访问属性时需加$。
  类名::$属性名类名::方法名()    self::$属性名    self::方法名()

[*]  特殊:也可以通过对象访问类成员。(不建议)
  对象名::$类属性名$this::$类属性名对象名::$类方法名()$this::类方法名()


对象成员访问用->,类成员访问用::


[*]  无论是静态方法还是非静态方法,均可通过类或对象进行访问。

[*]  静态属性通过类访问,静态方法通过对象访问。

[*]  只有使用对象调用非静态方法时,$this才可以使用!

[*]  静态方法不可使用$this。

[*]  类可以调用对象方法,但注意方法内不能有$this。

[*]非静态方法可以调用静态属性或静态方法,反之不可以。
  // 类常量


[*]  常量的值将始终保持不变。

[*]  在定义和使用常量的时候不需要使用$符号。

[*]常量的值必须是一个定值,不能是变量,类属性或其它操作(如函数调用)的结果。

定义:const 常量名 = 常量值;


[*]  不需要加public等访问修饰限定符

[*]类常量属于类,使用类访问,类名::类常量 或 self::类常量
  // 自动加载对象


[*]  在试图使用尚未被定义的类时自动调用 __autoload 函数

[*]  自动加载使用到的类名文件(根据类名找相应名称的文件,故需类名与类文件名一致)

[*]  每个需要加载类的文件都需要存在__autoload函数

[*]  将__autoload函数写入单独的文件,每个需要用到类的文件再require该函数文件

[*]__autoload 参数是类名
  function __autoload($class_name) {
  require_once $_SERVER["DOCUMENT_ROOT"] . "/class/$class_name.php";
  }
  // $_SERVER["DOCUMENT_ROOT"] 当前运行脚本所在的文档根目录


[*]  可以通过类名,来推导出类所在的文件名!

[*]如果一个项目存在多个自动加载函数时,定义一个可以完成加载的普通函数,并在函数之前使用spl_autoload_register注册该函数。

spl_autoload_register


[*]注册__autoload()函数
  bool spl_autoload_register ([ callback $autoload_function ] )


[*]  可以注册多个自动加载函数,先注册的先执行

[*]  一旦注册自动加载函数,__autoload就失效。

[*]注册函数时,参数为函数名(注意加引号);注册方法时,参数为数组

注册类或对象的方法为自动加载方法时,参数需为数组:
  spl_autoload_register(array(CLASS, '__autoload'));
  CLASS表示当前类名,若是对象可用$this,详细见手册
  // 序列化(串行化)

数据传输均是字符串类型

除了资源类型,均可序列化

序列化在存放数据时,会存放数据本身,也会存放数据类型
  作用:1.在网络传输数据时;2.为了将数组或对象放在磁盘时

序列化
  serialize    产生一个可存储的值的表示
  string serialize ( mixed $value )


[*]  返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方。

[*]有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

反序列化
  unserialize    从已存储的表示中创建PHP的值
  mixed unserialize ( string $str [, string $callback ] )


[*]对单一的已序列化的变量进行操作,将其转换回PHP的值。

文件的读写操作


[*]file_put_contents    将一个字符串写入文件
  int file_put_contents($file, $data [,$flags])
  $flags:FILE_USE_INCLUDE_PATH(覆盖),FILE_APPEND(追加)


[*]file_get_contents    将整个文件读入一个字符串
  string file_get_contents($file [, bool $use_include_path [,int $offset [,int $maxlen]]])

对象序列化


[*]只能序列化对象内部的数据,即非静态属性。

需在反序列化对象之前加载类,也可以触发自动加载机制。
  __sleep    序列化需序列化的属性。

- 提交未提交的数据,或类似的清理操作,部分串行化对象。
- 返回一个包含对象中所有应被序列化的变量名称的数组
  __wakeup反序列化时,预先准备对象需要的资源

- 重新建立数据库连接,或执行其它初始化操作
  public function __sleep() {

return array('server', 'username', 'password', 'db');
  }
  public function __wakeup() {

$this->connect();
  }
  // 对象继承
  class 子类名 extends 父类 {}
  如果一个对象是子类的对象,那么同时也是父类的对象。
  单继承:一个类只能继承一个父类,不能同时继承多个类。但一个父类可以被多个子类继承。
  instanceof判断某对象是否为某类的对象
  对象名 instanceof 类名
  // 访问控制
  public    公有的(继承链、本类、外部均可访问)
  protected保护的(仅继承链、本类可访问)
  private    私有的(仅本类可访问)
  根据成员定义位置、访问位置判断。

兼容性问题


[*]  声明属性时,var关键字声明的默认为public权限

[*]声明方法时,省略访问修饰符,默认为public权限
  // 重写 override
  $this代表本对象,被谁调用,就代表哪个对象。


[*]  继承时,子类成员名于父类成员名发生冲突,则子类成员会重写父类成员。

[*]  属性和方法均可被子类重写。

[*]  当父类的方法或属性已经不满足子类的需求,则需要重写。

[*]也可能因为命名不规范导致重写。
  私有属性不能被重写,每个私有属性都会被记录。在记录属性名的同时,还会记录类。
  如果有内置函数被重写,则可调用父类方法。如调用父类构造方法parent::__construct()

重写限制
  访问限制:
  子类的成员的访问控制必须相等或弱于父类。
  方法参数限制:
  参数数量必须相同,参数名可不同。

$this确定原则
  $this为调用该方法的对象,表示该方法的执行环境对象。


[*]  对象调用

[*]环境的传递。如果当前调用时,不能确定$this的值(静态调用),此时静态调用所处对象环境会传递到被调用的方法内。
  $this并非永远代表本对象,而是由方法的执行环境决定。

final
  如果父类中的方法被声明为final,则子类无法覆盖(重写)该方法。
  如果一个类被声明为final,则不能被继承。
  但加有final关键字的类依旧能被实例化!

抽象类
  关键字:abstract
  抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类。
  抽象类中至少要包含一个抽象方法。非抽象类不能包含抽象方法。
  如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现。抽象方法不能包含大括号及方法体。
  继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法。
  即,子类必须重写抽象父类中的所有抽象方法。
  另外,这些方法的可见性必须和抽象类中一样(或者更为宽松)。
  即,如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不能定义为private。


[*]  抽象类的子类中的普通方法执行方式和其他类相同。

[*]  作用:

[*]  继承,为扩展类,统一公共操作。

[*]限制结构(规范)。规范子类的结构。


  // 接口
  关键字:interface


[*]  对象提供的与对象交互的方式就是接口。

[*]  使用接口可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

[*]  通过interface来定义一个接口,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

[*]  接口中定义的所有属性和方法都必须是public,可省略public关键字。

[*]  接口中也可以定义常量(const)。接口常量和类常量的使用完全相同。
  可以用::访问。接口名::常量名,实现类::常量名。
  它们都是定值,可以被子类或子接口使用,但不能修改。

[*]接口不能定义属性!

定义接口
  interface 接口名 {
  接口内容(公共方法声明的集合)
  }

接口实现


[*]  要实现一个接口,可以使用implements操作符。

[*]  类中必须实现接口中定义的所有方法,否则会报一个fatal错误。

[*]  如果要实现多个接口,可以用逗号来分隔多个接口的名称。

[*]  实现多个接口时,接口中的方法不能有重名。

[*]接口也可以继承,通过使用extends操作符。
  class 类名 implements 接口名 {
  接口方法的实现
  }

注意


[*]  类与抽象类之间是继承关系,类与接口之间是实现关系。

[*]  类与抽象类是单继承,类与接口是多实现。

[*]  接口不是类,限制类的结构。

[*]  接口与接口之间是多继承。用extends关键字。
  interface I_C extends I_A, I_B {}

  // 静态延迟绑定
  self::,代表本类(当前代码所在类)
  永远代表本类,因为在类编译时已经被确定。
  即,子类调用父类方法,self却不代表调用的子类。
  static::,代表本类(调用该方法的类)
  用于在继承范围内引用静态调用的类。
  运行时,才确定代表的类。
  static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的。
  // 对象的遍历(迭代)


[*]  对象通过属性保存数据,故遍历对象的属性。

[*]  foreach语言结构,获得属性名和属性值。
  foreach ($obj as $p_name => $p_value) {}


自定义遍历(迭代器Iterator)
  Iterator - 可在内部迭代自己的外部迭代器或类的接口
  Iterator::current— 返回当前元素
  Iterator::key    — 返回当前元素的键
  Iterator::next    — 向前移动到下一个元素
  Iterator::rewind— 返回到迭代器的第一个元素
  Iterator::valid    — 检查当前位置是否有效

对象的克隆
  //对象之间的传值是[引用]传递。
  克隆:新对象 = clone 旧对象


[*]所有的引用属性仍然会是一个指向原来的变量的引用。
  __clone()方法在对象被克隆时自动调用。
  注意:构造方法对应实例化(new),克隆方法对应克隆(clone)。
  // 单例模式
  #三私一公
  单例模式(Singleton)用于为一个类生成一个唯一的对象。最常用的地方是数据库连接。使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。

防止一个类被实例化多次
  class MySQLDB {
  private static $instance = null; // 存类实例在此属性中
  // 构造方法声明为private,防止直接创建对象
  private function __construct() {}
  public static function getInstance() {

if(! self::$instance instanceof static) {
self::$instance = new static;
}
return self::$instance;
  }
  private function __clone() {} // 阻止用户复制对象实例
  }
  // 魔术方法
  __construct    构造方法
  __destruct    析构方法
  __clone      克隆对象
  __sleep      序列化对象
  __wakeup    反序列化对象
  __autoload    自动加载,使用类但未找到时
  __toString    对象被当作字符串使用时
  __invoke    当尝试以调用函数的方式调用一个对象时

重载 overload
  指动态地"创建"类属性和方法
  用户可以自由的为对象添加额外的属性,该特性就是重载。
  所有的重载方法都必须被声明为public。
  当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。
  重载相关魔术方法的参数都不能通过引用传递。

属性重载


[*]处理不可访问的属性
  属性重载只能在对象中进行。

属性重载对于静态属性无效
  在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被声明为static。
  __set    在给不可访问的属性赋值时
  public void __set(string $name, mixed $value)
  作用:批量管理私有属性,间接保护对象结构
  __get    读取不可访问的属性的值时
  public mixed __get(string $name)
  __isset    当对不可访问的属性调用isset()或empty()时
  public bool __isset(string $name)
  __unset    当对不可访问的属性调用unset()时
  public void __unset(string $name)

方法重载


[*]处理不可访问的方法
  __call      当调用一个不可访问的非静态方法(如未定义,或者不可见)时自动被调用

public mixed __call(string $name, array $arguments)
  __callStatic当在调用一个不可访问的静态方法(如未定义,或者不可见)时自动被调用

public static mixed __callStatic(string $name, array $arguments)
$name参数是要调用的方法名称。$arguments参数是一个数组,包含着要传递给方法的参数。
  // 类型约束
  函数的参数可以指定只能为对象或数组
  限定为对象则在形参前加类名,限定为数组则在形参前加array
  类型约束允许NULL值
  类型约束不只是用在类的成员方法里,也能使用在函数里。
  // 三大特性
  封装:隐藏内部是吸纳,仅开发接口。
  继承:一个对象的成员被另一个对象所使用。语法上体现为代码的共用。
  多态:多种形态。
  // 类与对象·关键字
  this    代表本对象
  public    公有的(继承链、本类、外部均可访问)
  protected保护的(仅继承链、本类可访问)
  private    私有的(仅本类可访问)
  parent::代表父类
  self::    代表本类(当前代码所在类)
  static::代表本类(调用该方法的类)
  static    静态成员(属性、方法),所有对象均可使用,外部也可直接使用或修改,静态方法不可访问非静态成员
  final    方法用final不可被子类重载,类用final不可被继承(方法、类)
  const    类常量(属性)
  abstract抽象类
  interface接口
  extends    类继承(子接口继承接口、其他普通类继承)
  implements接口实现(类实现接口、抽象类实现借口)(对接口的实现和继承均可有多个)
  Iterator内置接口(迭代)
  clone    克隆
  instance实例
  instanceof某对象是否属于某类
  / 【类与对象相关函数】 /
  class_alias([$original [,$alias]]) 给类取别名
  class_exists($class [,$autoload])检查类是否已定义
  interface_exists($interface [,$autoload])检查接口是否已被定义
  method_exists($obj, $method)检查类的方法是否存在
  property_exists($class, $property) 检查对象或类是否具有该属性
  get_declared_classes(void) 返回由已定义类的名字所组成的数组
  get_declared_interfaces(void)返回一个数组包含所有已声明的接口
  get_class([$obj])    返回对象的类名
  get_parent_class([$obj])返回对象或类的父类名
  get_class_methods($class)返回由类的方法名组成的数组
  get_object_vars($obj)返回由对象属性组成的关联数组
  get_class_vars($class) 返回由类的默认属性组成的数组
  is_a($obj, $class) 如果对象属于该类或该类是此对象的父类则返回TRUE
  is_subclass_of($obj, $class)如果此对象是该类的子类,则返回TRUE
  get_object_vars($obj)返回由对象属性组成的关联数组
  // 常用类

PHP手册 -> 预定义类
  Closure    闭包类,匿名函数对象的final类
  stdClass标准类,通常用于对象类保存集合数据
  __PHP_Incomplete_Class    不完整类,当只有对象而没有找到类时,则该对象被认为是该类的对象
  Exception异常类
  PDO      数据对象类
  // 魔术常量
  DIR      文件所在的目录
  LINE    文件中的当前行号
  FILE    文件的完整路径(绝对路径)和文件名
  CLASS    类的名称
  METHOD    类的方法名,包含类名和方法名
  FUNCTION函数名称,用在方法内只表示方法名
  // 反射机制 Reflection
  作用:1. 获取结构信息    2. 代理执行
  ReflectionClass 报告一个类的有关信息
  ReflectionMethod 报告一个方法的有关信息
  ReflectionClass::export输出类结构报告

代理执行
  实例化 ReflectionFunction 类的对象
  $f = new ReflectionFunction('func');// func为函数func($p)
  $f->invoke('param');
  / 页面跳转 /
  // PHP
  header('Loacation: url')
  header()执行完毕后,后面的代码也会继续执行,故需在该语句后加die结束
  无法给出提示,直接跳转
  // JS方法
  location.href = url
  // HTML
  
  / 【Cookie】 /
  cookie是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
  cookie是HTTP标头的一部分,因此setcookie()函数必须在其它信息被输出到浏览器前调用,这和对header()函数的限制类似。可以使用输出缓冲函数来延迟脚本的输出,直到按需要设置好了所有的cookie或者其它HTTP标头。
  // 新增
  setcookie新增一条cookie信息
  setcookie($name [,$value [,$expire [,$path [,$domain [,$secure [,$httponly]]]]]])
  #注意:setcookie()函数前不能有输出!除非开启ob缓存!

参数说明
  $name- cookie的识别名称
  使用$_COOKIE['name']抵用名为name的cookie
  $value- cookie值,可以为数值或字符串,此值保存在客户端,不要用来保存敏感数据
  假定$name参数的值为'name',则$_COOKIE['name']就可取得该$value值
  $expire- cookie的生存期限(Unix时间戳,秒数)
  如果$expire参数的值为time()+606024*7则可设定cookie在一周后失效。如果未设定该参数,则会话后立即失效。
  $path- cookie在服务器端的指定路径。当设定该值时,服务器中只有指定路径下的网页或程序可以存取该cookie。
  如果该参数值为'/',则cookie在整个domain内有效。
  如果设为'/foo/',则cookie就在domain下的/foo/目录及其子目录内有效。
  默认值为设定cookie的当前目录及其子目录。
  $domain- 指定此cookie所属服务器的网址名称,预设是建立此cookie服务器的网址。
  要是cookie能在如abc.com域名下的所有子域都有效,则该参赛应设为'.abc.com'。
  $secure- 指明cookie是否仅通过安全的HTTPS连接传送中的cookie的安全识别常数,如果设定该值则代表只有在某种情况下才能在客户端与服务端之间传递。
  当设成true时,cookie仅在安全的连接中被设置。默认值为false。
  // 读取


[*]  浏览器请求时会携带当前域名下的所有cookie信息到服务器。

[*]  任何从客户端发送的cookie都会被自动存入$_COOKIE全局数组。

[*]  如果希望对一个cookie变量设置多个值,则需在cookie的名称后加[]符号。即以数组形态保存多条数据到同一变量。
  //设置为$_COOKIE['user']['name'],注意user的name没有引号
  setcookie('user', 'shocker');

[*]$_COOKIE也可以为索引数组
  // 删除
  方法1:将其值设置为空字符串
  setcookie('user', '');
  方法2:将目标cookie设为“已过期”状态。
  //将cookie的生存时间设置为过期,则生存期限与浏览器一样,当浏览器关闭时就会被删除。
  setcookie('usr', '', time()-1);

注意:


[*]  cookie只能保存字符串数据

[*]  $_COOKIE只用于接收cookie数据,不用于设置或管理cookie数据。
  对$_COOKIE进行操作不会影响cookie数据。
  $_COOKIE只会保存浏览器在请求时所携带的cookie数据。

[*]  cookie生命周期:
  临时cookie:浏览器关闭时被删除
  持久cookie:$expire参数为时间戳,表示失效时间。

[*]  有效目录
  cookie只在指定的目录有效。默认是当前目录及其子目录。
  子目录的cookie在其父目录或同级目录不可获取。

[*]  cookie区分域名
  默认是当前域名及其子域名有效。

[*]  js中通过document.cookie获得,类型为字符串

[*]浏览器对COOKIE总数没有限制,但对每个域名的COOKIE数量和每个COOKIE的大小有限,而且不同浏览器的限制不同。
  / 【session】 /


[*]  开启session机制
  session_start()
  注意:session_start()函数前不能有输出!除非开启ob缓存。

[*]  操作数据
  对$_SESSION数组进行操作

[*]  浏览器端保存SessionID,默认为当前域名下的所有目录及其子目录生效。即默认设置cookie的path值为'/'

[*]  服务器保存session数据
  默认保存方式:每个会话都会生成一个session数据文件,文件名为:sess_加SessionID

[*]  session可以存储除了资源以外的任何类型数据。
  数据被序列化后再保存到文件中。

[*]  $_SESSION的元素下标不能为整型!
  因为只对元素值进行序列化。
  元素内的数组下标无此要求。

[*]  生存周期
  默认是浏览器关闭
  因为浏览器保存的cookie变量SessionID是临时的
  但是服务器端的session数据文件不一定消失(需要等待session的垃圾回收机制来处理)
  可以延长cookie中PHPSESSID变量的生命周期。(不推荐)
  php.ini配置session.gc_maxlifetime

[*]  删除数据
  $_SESSION变量在脚本结束时依然会消失。开启session机制时会造出$_SESSION变量。
  $_SESSION与保存session数据的文件是两个空间。
  unset($_SESSION['key'])只是删除数组内的该元素,不会立即相应到保存session数据的文件上。
  等到脚本结束,才会将$_SESSION的数据写入到该文件中。
  session_destroy()销毁保存session数据的文件,也不会对该文件写入内容。
  并不删除$_SESSION变量,unset或脚本结束才会删除该变量。
  如何完全删除一个session?需删除3部分
  unset($_SESSION);
  删除$_SESSION变量后,数据文件并未被改动。如果单独使用unset,则需先置空$_SESSION = array()
  session_destroy();
  setcookie('PHPSESSID', '', time()-1); //保险做法是将其生命周期失效
  整个脚本周期内,只对数据文件读一次、写一次。

  // 重写session的存储机制

session存储方式
  session.save_handler = user|files|memcache

因数据文件过多导致的问题,可通过分子目录保存进行解决
  PHP配置文件下session.save_path选项,并需手动创建数据存放目录。
  在该配置选项前加层级。分布子目录的原则,利用会话ID的相应字母来分配子目录。仍需手动创建子目录。
  session.save_path = "2; F:/PHPJob/Temp"

多服务器数据共享问题

数据存储操作:
  初始化$open、释放资源$close、读$read、写$write、销毁存储介质$destroy(调用session_destroy时触发该操作)、垃圾回收$gc

会话ID的长度可变。不同的设置方式导致不同长度的会话ID。
  session.hash_function允许用户指定生成会话ID的散列算法。
  '0' 表示MD5(128 位),'1' 表示SHA-1(160 位)。
  session.hash_bits_per_character允许用户定义将二进制散列数据转换为可读的格式时每个字符存放多少个比特。
  可能值为 '4'(0-9,a-f),'5'(0-9,a-v),以及 '6'(0-9,a-z,A-Z,"-",",")。
  总hash长度为128bit,会话ID长度为128/可能值,4->32, 5->26, 6->22

自定义数据存储操作方法

注意:不用关心PHP如何序列化、反序列化、如何得到数据和写入数据,只做与数据存储相关的操作
  session_set_save_handler设置用户自定义的会话数据存储函数
  bool session_set_save_handler(callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc)
  执行顺序:open, close, read, write, destroy, gc

先设置处理器,再开启会话

常用函数
  session_start    开启或恢复会话机制
  session_id      获取或设置当前会话ID
  session_destroy    销毁当前会话的所有数据(销毁数据文件)
  session_name    获取或设置当前会话名称(cookie变量名,默认为PHPSESSID)
  session_save_path获取或设置当前会话数据文件保存路径
  session_set_save_handler设置用户自定义的会话数据存储函数
  session_unset    释放所有会话变量(清空$_SESSION数组元素)
  session_encode    将当前会话数据编码为一个字符串
  session_decode    将字符串解译为会话数据
  session_write_close写入会话数据并关闭会话
  session_register_shutdown关闭会话
  session_set_cookie_params设置会话cookie变量,必须在session_start()前使用。
  session_set_cookie_params(0,"/webapp/"); //设置session生存时间
  session_get_cookie_params获取会话cookie变量。返回包含当前会话cookie信息的数组

配置php.ini
  ini_set($varname, $newvalue);
  //该函数的配置只对当前脚本生效
  //并非所有php.ini设置均可用该函数设置
  ini_get($varname)//获取某配置项信息
  ini_get_all()//返回所有配置项信息的数组

session扩展配置
  session.name指定会话名以用作cookie的名字。只能由字母数字组成,默认为PHPSESSID。
  session.save_path定义了传递给存储处理器的参数。
  如果选择了默认的files文件处理器,则此值是创建文件的路径。默认为/tmp。
  可选的N参数来决定会话文件分布的目录深度。
  要使用N参数,必须在使用前先创建好这些目录。在ext/session目录下有个小的shell脚本名叫mod_files.sh可以用来做这件事。
  如果使用了N参数并且N大于0,那么将不会执行自动垃圾回收。
  session.save_handler定义了来存储和获取与会话关联的数据的处理器的名字。默认为files。
  如果用户自定义存储器,则该值改为user。
  ini_set('session.save_handler', 'user');//此设置只针对当前脚本生效。
  session.auto_start 指定会话模块是否在请求开始时自动启动一个会话。默认为 0(不启动)。
  session.gc_probability与session.gc_divisor合起来定义了在每个会话初始化时启动gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动gc进程。session.gc_divisor默认为100。session.gc_probability默认为1。
  / 【图片生成与处理】 /GD库
  // 画布生成

新建画布
  imagecreate       新建一个基于调色板的图像
  resource imagecreate(int $x_size, int $y_size)
  imagecreatetruecolor新建一个真彩×××像

基于已有文件或URL创建画布
  imagecreatefromgd2   从GD2文件或URL新建一图像
  imagecreatefromgd2part 从给定的GD2文件或URL中的部分新建一图像
  imagecreatefromgd    从GD文件或URL新建一图像
  imagecreatefromgif   由文件或URL创建一个新图象
  imagecreatefromjpeg   由文件或URL创建一个新图象
  imagecreatefrompng   由文件或URL创建一个新图象
  imagecreatefromstring从字符串中的图像流新建一图像
  imagecreatefromwbmp   由文件或URL创建一个新图象
  imagecreatefromxbm   由文件或URL创建一个新图象
  imagecreatefromxpm   由文件或URL创建一个新图象
  // 颜色分配
  imagecolorallocate   为一幅图像分配颜色
  int imagecolorallocate(resource $image, int $red, int $green, int $blue)
  imagecolorallocatealpha   为一幅图像分配颜色 + alpha
  imagecolordeallocate    取消图像颜色的分配
  imagecolortransparent    将某个颜色定义为透明色
  imagecolorat      取得某像素的颜色索引值
  imagecolorclosest    取得与指定的颜色最接近的颜色的索引值
  imagecolorclosestalpha 取得与指定的颜色加透明度最接近的颜色
  imagecolorclosesthwb取得与给定颜色最接近的色度的黑白色的索引
  imagecolorexact   取得指定颜色的索引值
  imagecolorexactalpha取得指定的颜色加透明度的索引值
  imagecolormatch   使一个图像中调色板版本的颜色与真彩色版本更能匹配
  imagecolorresolve    取得指定颜色的索引值或有可能得到的最接近的替代值
  imagecolorresolvealpha 取得指定颜色 + alpha 的索引值或有可能得到的最接近的替代值
  imagecolorset      给指定调色板索引设定颜色
  imagecolorsforindex   取得某索引的颜色
  imagecolorstotal    取得一幅图像的调色板中颜色的数目
  // 区域填充
  imagefill区域填充
  bool imagefill(resource $image, int $x, int $y, int $color)
  imagefilledarc   画一椭圆弧且填充
  imagefilledellipse   画一椭圆并填充
  imagefilledpolygon   画一多边形并填充
  imagefilledrectangle画一矩形并填充
  imagefilltoborder    区域填充到指定颜色的边界为止
  imagesettile设定用于填充的贴图
  // 图形创建
  imagearc    画椭圆弧
  imagechar    水平地画一个字符
  imagecharup   垂直地画一个字符
  imagedashedline 画一虚线
  imageellipse画一个椭圆
  imageline    画一条线段
  imagepolygon画一个多边形
  imagerectangle 画一个矩形
  imagesetpixel画一个单一像素
  imagesx   取得图像宽度
  imagesy   取得图像高度
  // 画笔设置
  imagesetbrush设定画线用的画笔图像
  imagesetstyle设定画线的风格
  imagesetthickness设定画线的宽度
  // 图形拷贝
  imagecopy      拷贝图像的一部分
  imagecopymerge   拷贝并合并图像的一部分
  imagecopymergegray 用灰度拷贝并合并图像的一部分
  imagecopyresampled 重采样拷贝部分图像并调整大小
  imagecopyresized拷贝部分图像并调整大小
  // 字符创建
  imagestring   水平地画一行字符串
  imagestringup    垂直地画一行字符串
  imagepsslantfont倾斜某字体
  imagefontheight   取得字体高度
  imagefontwidth   取得字体宽度
  imagettfbbox    取得使用 TrueType 字体的文本的范围
  imageloadfont    载入一新字体
  imagepsencodefont改变字体中的字符编码矢量
  imagepsextendfont扩充或精简字体
  // 导出画布为图片
  imagegif以GIF格式将图像输出到浏览器或文件
  imagepng以PNG格式将图像输出到浏览器或文件
  imagejpeg以JPEG格式将图像输出到浏览器或文件
  imagewbmp以WBMP格式将图像输出到浏览器或文件
  通过header()发送 "Content-type: image/图片格式" 可以使PHP脚本直接输出图像。
  header("Content-type: image/gif"); imagegif($im);
  imagegd   将 GD 图像输出到浏览器或文件
  imagegd2将 GD2 图像输出到浏览器或文件
  // 释放画布资源
  imagedestroy销毁图像
  // 图像信息
  image_type_to_extension   取得图像类型的文件后缀
  getimagesize      取得图像大小
  imagesx         取得图像宽度
  imagesy         取得图像高度
  imageistruecolor      检查图像是否为真彩×××像
  imagetypes         返回当前 PHP 版本所支持的图像类型
  // 图像设置
  imagerotate   用给定角度旋转图像
  imagealphablending 设定图像的混色模式
  imageantialias   是否使用抗锯齿(antialias)功能
  imagefilter   对图像使用过滤器
  imagegammacorrect对 GD 图像应用 gamma 修正
  imageinterlace   激活或禁止隔行扫描
  / 【缩略图】【水印】 /
  imagecopyresampled 重采样拷贝部分图像并调整大小
  bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
  imagecopymerge   拷贝并合并图像的一部分
  bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
  getimagesize    取得图像大小
  array getimagesize ( string $filename [, array &$imageinfo ] )
  / 【URL函数】 /
  get_headers — 取得服务器响应一个 HTTP 请求所发送的所有标头
  get_meta_tags — 从一个文件中提取所有的 meta 标签 content 属性,返回一个数组
  http_build_query — 生成 URL-encode 之后的请求字符串
  urldecode — 解码已编码的URL字符串
  urlencode — 编码URL字符串
  parse_url — 解析URL,返回其组成部分
  'http://username:password@hostname/path?arg=value#anchor'
  scheme(如http), host, port, user, pass, path, query(在问号?之后), fragment(在散列符号#之后)
  //编码可用于交换多个变量
  $a = '中国';
  $b = '四川';
  $a = urlencode($a);
  $b = urlencode($b);
  $a = $a.'&'.$b;
  $b = explode('&', $a);
  $a = urldecode($b);
  $b = urldecode($b);
  echo $a, $b;
  //list()函数用于交换变量
  list($a, $b) = array($b, $a);
  / 【文件、目录】 /
  dirname($path) 返回路径中的目录部分
  basename($path [,$suffix]) 返回路径中的文件名部分
  pathinfo($path [,$options]) 返回文件路径的信息(数组元素:dirname,basename,extension)
  realpath($path) 返回规范化的绝对路径名
  copy($source, $dest)拷贝文件
  unlink($file)删除文件
  rename($old, $new) 重命名或移动一个文件或目录
  mkdir($path [,$mode [,$recursive]]) 新建目录
  $mode表示权限,默认0777
  $recursive表示可创建多级目录,默认false
  rmdir($dir)   删除目录(目录必须为空,且具有权限)
  file_exists($file) 检查文件或目录是否存在
  is_file($file)   判断文件是否存在且为正常的文件
  is_dir($file)    判断文件名是否存在且为目录
  is_readable($file) 判断文件或目录是否可读
  is_writable($file) 判断文件或目录是否可写
  is_executable($file)判断给定文件名是否可执行
  is_link($file)   判断给定文件名是否为一个符号连接
  tmpfile(void)建立一个临时文件
  tempnam($dir, $prefix) 在指定目录中建立一个具有唯一文件名的文件
  file($file) 把整个文件读入一个数组中
  fopen($filename, $mode [,$use_include_path])
  $mode参数:(加入'b'标记解决移植性)

'r'   只读方式打开,将文件指针指向文件头。
'r+'读写方式打开,将文件指针指向文件头。
'w'   写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a'   写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+'读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x'   创建并以写入方式打开,将文件指针指向文件头。
'x+'创建并以读写方式打开,将文件指针指向文件头。
  fclose($handle) 关闭一个已打开的文件指针
  fread($handle, $length) 读取文件(可安全用于二进制文件)
  fwrite($handle, $string [,$length]) 写入文件(可安全用于二进制文件)
  rewind($handle) 倒回文件指针的位置
  ftell($handle) 返回文件指针读/写的位置
  fseek($handle, $offset [,$whence]) 在文件指针中定位
  feof($handle)测试文件指针是否到了文件结束的位置
  fgets从文件指针中读取一行
  fgetss 从文件指针中读取一行并过滤掉HTML标记
  flock($handle, $opt) 轻便的咨询文件锁定
  $opt:LOCK_SH 取得共享锁定(读取的程序);LOCK_EX 取得独占锁定(写入的程序);LOCK_UN 释放锁定(无论共享或独占)
  readfile($file) 读入一个文件并写入到输出缓冲
  fflush($handle) 将缓冲内容输出到文件
  touch($file [,$time [,$atime]])设定文件的访问和修改时间
  fileatime取得文件的上次访问时间
  filectime取得文件的inode修改时间
  filegroup取得文件的组
  fileinode取得文件的inode
  filemtime取得文件修改时间
  fileowner取得文件的所有者
  fileperms取得文件的权限
  filesize取得文件大小
  filetype取得文件类型
  / fileinfo / 获取/设置文件信息
  #扩展Fileinfo,配置php.ini
  #extension=php_fileinfo.dll
  finfo_open([$opt]) //创建一个文件信息资源
  finfo_file($finfo, $file [,$opt]) //获取文件信息
  finfo_set_flags($finfo, $opt) //设置文件信息项
  finfo_close($finfo) //关闭文件信息资源
  mime_content_type($file) //获取文件的MIME类型
  $opt参数选项:
  FILEINFO_MIME_ENCODING 文件编码类型
  FILEINFO_MIME_TYPE 文件MIME类型
  //目录
  chdir($dir)   改变当前目录
  chroot($dir)    将当前目录改变为当前进程的根目录
  closedir($handle)关闭目录句柄
  dir($dir)      返回一个目录的实例对象
  getcwd()      取得当前工作目录
  opendir($path)   打开目录句柄
  readdir($handle)从目录句柄中读取条目
  rewinddir($handle) 倒回目录句柄
  scandir($dir [,$order])   列出指定路径中的文件和目录
  glob($pattern [,$flags])寻找与模式匹配的文件路径
  $flags:

GLOB_MARK - 在每个返回的项目中加一个斜线
GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
GLOB_NOESCAPE - 反斜线不转义元字符
GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'
GLOB_ONLYDIR - 仅返回与模式匹配的目录项
  查找多种后缀名文件:glob('*.{php,txt}', GLOB_BRACE);
  / 解压缩 /
  //新建ZipArchive对象
  $zip = new ZipArchive;
  //打开ZIP文件
  $zip->open($file [,$flags]);
  $flags:

ZIPARCHIVE::OVERWRITE 覆盖(不存在会自动创建)
ZIPARCHIVE::CREATE 添加(不存在会自动创建)
ZIPARCHIVE::EXCL
ZIPARCHIVE::CHECKCONS
  //关闭正在处理的ZIP文件
  //解压缩ZIP文件
  $zip->extractTo($dest, [$entries]);
  $dest:解压到的文件夹,$entries:解压的条目
  //添加文件到ZIP文件
  $zip->addFile($file, [$newname]);
  $newname可以为"dir/file",这样可以将文件添加到压缩文件中的某个目录下。其他函数也如此。
  //添加文件到ZIP文件,而内容来自字符串
  $zip->addFromString($file, $str);
  //添加空文件夹到ZIP文件
  $zip->addEmptyDir($dir);
  //通过索引删除ZIP中的文件或文件夹
  $zip->deleteIndex($index);
  //通过名称删除ZIP中的文件或文件夹
  $zip->deleteName($name);
  //设置ZIP文件注释
  $zip->setArchiveComment($str);
  //获取ZIP文件注释
  $zip->getArchiveComment();
  //通过索引获取文件内容
  $zip->getFromIndex($index);
  //通过名称获取文件内容
  $zip->getFromName($name);
  //获取索引文件的文件名称
  $zip->getNameIndex($index);
  //通过索引重命名文件
  $zip->renameIndex($index, $newname);
  //通过名称重命名文件
  $zip->renameName($name, $newname);
  //若将文件夹内容打包成ZIP文件,需循环文件夹的所有目录及文件
  function addFileToZip($path, $zip) {
  //打开当前文件夹$path
  $handle = opendir($path);
  //循环读取子文件夹及文件
  //为防止文件名本身可被转换为false的情况(比如为"0"),则需用不全等!==
  while ($file = readdir($handle) !== false) {

//过滤假文件夹
if ($file != '.' && $file != '..') {
//对于子文件夹则递归调用本函数
if (is_dir($path . '/' . $file)) {
addFileToZip($path.'/'.$file, $zip);
} else {
//将文件添加到ZIP对象
$zip->addFile($path . '/' . $file);
}
}
  }
  //关闭文件夹$path
  closedir($path);
  }
  // ----- END 解压缩 ----- //
  / 【文件上传】 /
  enctype="multipart/form-data"//FORM标签必须的属性
  $_FILES 上传文件信息数组变量
  error上传错误信息
  无错误
  文件大小超过php.ini配置

1) upload_max_filesize 允许上传的最大文件大小
2) post_max_size 最大的POST数据大小
3) memory_limit 每个脚本能够使用的最大内存数量(默认128MB)
  文件大小超过浏览器表单配置

MAX_FILE_SIZE表示表单数据最大文件大小,该元素需在文件上传域之前。(默认2M)

  文件只有部分被上传
  文件没有被上传
  6,7 临时文件写入时失败
  找不到临时文件
  文件写入失败
  name文件名
  type文件类型
  tmp_name上传文件临时路径
  size文件大小
  move_uploaded_file($path, $newpath);//将上传的文件移动到新位置
  is_uploaded_file($file) //判断是否为POST上传的文件
  //多文件上传
   //HTML中以数组提交
  $_FILES['updfile']['tmp_name']//服务器端可访问第一个文件的临时路径,其他属性类似
  //php.ini配置
  file_uploads = On 是否允许HTTP上传文件
  upload_max_filesize 上传文件大小限制,默认为2M
  post_max_sizepost方式表单数据总大小限制,默认为8M
  upload_tmp_dir 上传文件临时目录,默认是系统临时目录
  需设置上传文件临时目录,给其最小权限
  GET方式的最大传输量为2K
  / 【批量提交】 /
  FORM表单中的name值可用名称加中括号的形式,在$_POST获取表单数据时,可多项提交形成数组。
  比如多文件上传file,复选框提交checkbox等。
  
  
  $id = $_POST['id']; //则可获得全部被选中的复选框值,形成索引数组
  如果name值为:
  
  
  $id = $_POST['id']; //则可获取所有name为id[...]的值,形成管理数组
  / iconv /
  //php.ini配置iconv
  
  ;iconv.input_encoding = ISO-8859-1
  ;iconv.output_encoding = ISO-8859-1
  ;iconv.internal_encoding = ISO-8859-1
  iconv_set_encoding($type, $charset);
  $type:input_encoding,output_encoding,internal_encoding
  iconv_get_encoding([$type = "all"])
  $type:all,input_encoding,output_encoding,internal_encoding
  iconv($in_charset, $out_charset, $str) //将字符串转换为目标编码
  指定编码,可解决中文字符的统计、查询、截取等!
  iconv_strlen($str [,$charset]) //统计字符串的字符数
  iconv_strpos($str, $needle, $offset [,$charset]) //查找子串首次出现的位置
  iconv_strrpos($str, $needle [,$charset]) //查找子串最后一次出现的位置
  iconv_substr($str, $offset [,$len [,$charset]]) //截取子串
  / 【字符串函数】/
  addslashes($str)//使用反斜线转移字符串
  stripcslashes($str) //反引用一个使用addcslashes转义的字符串
  stripslashes($str) //反引用一个引用字符串
  chr($ascii) //返回ASCII码的字符
  ord($char) //返回字符的ASCII码
  substr_count($haystack, $needle)//计算子串出现的次数
  count_chars($str [,$mode]) 统计每个字节值出现的次数
  //0 - 以所有的每个字节值作为键名,出现次数作为值的数组。
  //1 - 与0相同,但只列出出现次数大于零的字节值。
  //2 - 与0相同,但只列出出现次数等于零的字节值。
  //3 - 返回由所有使用了的字节值组成的字符串。
  //4 - 返回由所有未使用的字节值组成的字符串。
  crypt($str, [$salt])//单向字符串散列
  str_split($str [,$len]) //将字符串按长度分割为数组
  explode($separ, $str)//使用一个字符串分割另一个字符串
  implode([$glue,] $arr) //将数组元素的值根据$glue连接成字符串
  chunk_split($str [,$len [,$end]])//将字符串分割成小块
  $len:每段字符串的长度,$end:每段字符串末尾加的字符串(如"\r\n")
  html_entity_decode($str [,$flags [,$encoding]]) //将HTML实体转成字符信息
  htmlentities($str [,$flags [,$encoding]])//将字符信息转成HTML实体
  htmlspecialchars_decode($str)//将特殊HTML实体转成字符信息
  htmlspecialchars($str [,$flags [,$encoding]])//将字符信息转成特殊HTML实体
  lcfirst($str)//将字符串首字母转成小写
  ucfirst($str)//将字符串首字母转成大写
  ucwords($str)//将字符串中每个单词的首字母转换为大写
  strtolower($str)//将字符串转化为小写
  strtoupper($str)//将字符串转化为大写
  trim($str [,$charlist]) //去除字符串首尾处的空白字符(或者其他字符)
  ltrim($str [,$charlist])//去除字符串首段的空白字符(或者其他字符)
  rtrim($str [,$charlist])//去除字符串末端的空白字符(或者其他字符)
  md5_file($file) //计算指定文件的MD5散列值
  md5($str)//计算字符串的MD5散列值
  money_format($format, $num) //将数字格式化为货币形式
  number_format($num) //格式化数字
  nl2br($str) //在字符串所有新行之前插入HTML换行标记
  parse_str($str, [$arr]) //解析字符串
  print($str) //输出字符串
  printf   //输出格式化字符串
  sprintf($format [,$args...])//格式化字符串
  sha1_file//计算文件的sha1散列值
  sha1    //计算字符串的sha1散列值
  similar_text($first, $second [,$percent])//计算两个字符串的相似度
  返回在两个字符串中匹配字符的数目,$percent存储相似度百分比
  str_replace($search, $replace, $str [,$count [,$type]]) //子字符串替换
  str_ireplace//字符串替换(忽略大小写)
  str_pad($str, $len [,$pad [,$type]]) //使用另一个字符串填充字符串为指定长度
  $type:在何处填充。STR_PAD_RIGHT,STR_PAD_LEFT 或 STR_PAD_BOTH
  str_repeat($str, $num) //重复一个字符串
  str_shuffle($str)//随机打乱一个字符串
  str_word_count($str [,$format [,$charlist]])//返回字符串中单词的使用情况
  strcasecmp($str1, $str2)//二进制安全比较字符串(不区分大小写)
  如果str1小于str2,返回负数;如果str1大于str2,返回正数;二者相等则返回0。
  strcmp($str1, $str2)//二进制安全字符串比较
  strcoll($str1, $str1)//基于区域设置的字符串比较(区分大小写,非二进制安全)
  strcspn($str1, $str1 [,$start [,$len]])//获取不匹配遮罩的起始子字符串的长度
  strip_tags($str)//从字符串中去除HTML和PHP标记
  strpos($haystack, $needle [,$offset])//查找字符串首次出现的位置
  stripos($haystack, $needle [,$offset])//查找字符串首次出现的位置(不区分大小写)
  strripos($haystack, $needle [,$offset])//计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
  strrpos($haystack, $needle [,$offset])//计算指定字符串在目标字符串中最后一次出现的位置
  strlen($str)//获取字符串长度
  strpbrk($haystack, $str)//在字符串中查找一组字符的任何一个字符
  strrev($str)//反转字符串
  join('', array_reverse(preg_split("//u", $str))); //实现对UTF-8字符串的反转
  strspn$subject, $mask) //计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度。
  strstr($haystack, $needle)//查找字符串的首次出现
  stristr($haystack, $needle)//查找字符串的首次出现(不区分大小写)
  strrchr($haystack, $needle) //查找指定字符在字符串中的最后一次出现
  strtok($str, $token)//标记分割字符串
  substr_compare($main_str, $str, $offset [,$len) //二进制安全比较字符串(从偏移位置比较指定长度)
  substr_replace$str, $replace, $start [,$len]//替换字符串的子串
  strtr($str, $from, $to) //转换指定字符
  substr($str, $start [,$len])//返回字符串的子串
  vfprintf$handle, $format, $args)//将格式化字符串写入流
  vprintf($format, $args) //输出格式化字符串
  vsprintf($format, $args) //返回格式化字符串
  wordwrap($str [,$width=75 [,$break='\n']]) //打断字符串为指定数量的字串
  crc32($str) //计算一个字符串的crc32多项式
  crc32算法[循环冗余校验算法]
  生成str的32位循环冗余校验码多项式。将数据转换成整数。
  / mbstring(多字节字符串) /
  //需开启mbstring扩展
  mb_strimwidth($str, $start, $width [,$trim [,$encoding]])//保留指定的子串(并补充)
  mb_stripos($str, $needle [,$offset [,$encoding]])//查找子串首次出现的位置(忽略大小写)
  mb_strpos($str, $needle [,$offset [,$encoding]])//查找子串首次出现的位置
  mb_strripos($str, $needle [,$offset [,$encoding]])//查找子串最后一次出现的位置(忽略大小写)
  mb_strrpos($str, $needle [,$offset [,$encoding]])//查找子串最后一次出现的位置
  mb_strstr($str, $needle [,$before [,$encoding]])//返回子串首次出现位置之后(前)的字符串
  mb_stristr($str, $needle [,$before [,$encoding]])//返回子串首次出现位置之后(前)的字符串(忽略大小写)
  mb_strrchr($str, $needle [,$before [,$encoding]])//返回字符最后一次出现位置之后(前)的字符串
  mb_strrichr($str, $needle [,$before [,$encoding]])//返回字符最后一次出现位置之后(前)的字符串(忽略大小写)
  mb_strtoupper($str [,$encoding])//转换成大写
  mb_strtolower($str [,$encoding])//转换成小写
  mb_strlen($str [,$encoding])//获取字符串长度
  mb_split($pattern, $str [,$limit]) //将字符串分割成数组
  mb_substr($str, $start [,$len [,$encoding]])//获取字符串的子串
  mb_strcut($str, $start [,$len [,$encoding]])//获取字符串的子串
  mb_strwidth($str [,$encoding]) //获取字符串的宽度
  mb_substr_count($str, $needle [,$encoding]) //子串在字符串中出现的次数
  / PCRE函数 /
  preg_filter($pattern, $replace, $subject [,$limit [,&$count]]) 执行一个正则表达式搜索和替换
  preg_replace($pattern, $replace, $subject [,$limit [,&$count]]) 执行一个正则表达式搜索和替换
  preg_replace_callback($pattern, $callback, $subject [,$limit [,&$count]])执行一个正则表达式搜索并且使用一个回调进行替换
  preg_grep($pattern, $input [,$flags])返回匹配模式的数组条目
  preg_match($pattern, $subject [,&$matches [,$flags [,$offset]]]) 执行一个正则表达式匹配
  preg_match_all($pattern, $subject [,&$matches [,$flags [,$offset]]]) 执行一个全局正则表达式匹配
  $matches存放返回的结果

$matches (n>=0) 表示存放第n+1个匹配到的结果
$matches (m>=1, n>=0) 表示存放第n+1个匹配到结果的第m个表达式的内容
  preg_split($pattern, $subject [,$limit [,$flags]]) 通过一个正则表达式分隔字符串
  $limit表示限制分隔得到的子串最多只有limit个,-1表示不限制
  $flags参数:

PREG_SPLIT_NO_EMPTY:将返回分隔后的非空部分
PREG_SPLIT_DELIM_CAPTURE:用于分隔的模式中的括号表达式将被捕获并返回
PREG_SPLIT_OFFSET_CAPTURE:对于每一个出现的匹配返回时将会附加字符串偏移量
  preg_quote($str [,$delimiter]) 转义正则表达式字符
  preg_last_error()返回最后一个PCRE正则执行产生的错误代码
  / Math函数 /
  base_convert($number, $frombase, $tobase)//在任意进制之间转换数字
  ceil($float)//向上取整
  floor($float)//向下取整
  exp($float) //计算e的指数
  hypot($x, $y)//计算直角三角形的斜边长
  is_nan($val)//判断是否为合法数值
  log($arg [,$base=e]) //自然对数
  max($num1, $num2, ...) //找出最大值
  max($arr)//找出数组中的最大值
  min($num1, $num2, ...) //找出最小值
  rand([$min], $max) //产生一个随机整数
  srand([$seed]) //播下随机数发生器种子
  mt_rand([$min], $max)//生成更好的随机数
  mt_srand($seed)   //播下一个更好的随机数发生器种子
  pi()//得到圆周率值
  pow($base, $exp)//指数表达式
  sqrt($float)//求平方根
  deg2rad($float) //将角度转换为弧度
  rad2deg($float) //将弧度数转换为相应的角度数
  round($val [,$pre=0]) //对浮点数进行四舍五入
  fmod($x, $y) //返回除法的浮点数余数
  / 【MySQL函数】 /
  mysql_client_encoding([$link]) //返回字符集的名称
  mysql_set_charset($charset [,$link])//设置客户端字符集编码
  mysql_connect($host, $user, $pass) //打开一个到MySQL服务器的连接
  mysql_create_db($db [,$link])//新建一个MySQL数据库
  mysql_pconnect($host, $user, $pass) //打开一个到MySQL服务器的持久连接
  mysql_ping([$link]) //Ping一个服务器连接,如果没有连接则重新连接
  mysql_close([$link])//关闭MySQL连接
  mysql_data_seek($result, $row) //移动内部结果的指针
  mysql_errno([$link])//返回上一个MySQL操作中的错误信息的数字编码
  mysql_error([$link])//返回上一个MySQL操作产生的文本错误信息
  mysql_affected_rows([$link]) //取得前一次MySQL操作所影响的记录行数
  mysql_info([$link]) //取得最近一条查询的信息
  mysql_insert_id([$link])//取得上一步INSERT操作产生的ID
  mysql_query($sql [,$link]) //发送一条MySQL查询
  mysql_unbuffered_query($sql [,$link])//向MySQL发送一条SQL查询,并不获取和缓存结果的行
  mysql_db_query($db, $sql [,$link]) //发送一条MySQL查询
  mysql_escape_string($str)//转义一个字符串用于mysql_query
  mysql_real_escape_string($str) //转义SQL语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
  mysql_fetch_array($result [,$type]) //从结果集中取得一行作为关联数组,或数字数组,或二者兼有
  mysql_fetch_assoc($result) //从结果集中取得一行作为关联数组
  mysql_fetch_object($result) //从结果集中取得一行作为对象
  mysql_fetch_row($result)//从结果集中取得一行作为枚举数组
  mysql_fetch_field($result) //从结果集中取得列信息并作为对象返回
  mysql_num_fields($result)//取得结果集中字段的数目
  mysql_num_rows($result) //取得结果集中行的数目
  mysql_fetch_lengths($result)//取得结果集中每个输出的长度
  mysql_field_flags($result, $field_offset)//从结果中取得和指定字段关联的标志
  mysql_field_len($result, $field_offset)//返回指定字段的长度
  mysql_field_name($result, $field_offset)//取得结果中指定字段的字段名
  mysql_field_seek($result, $field_offset)//将结果集中的指针设定为制定的字段偏移量
  mysql_field_table($result, $field_offset)//取得指定字段所在的表名
  mysql_field_type($result, $field_offset)//取得结果集中指定字段的类型
  mysql_free_result($result) //释放结果内存
  mysql_list_dbs([$link]) //列出MySQL服务器中所有的数据库
  mysql_list_fields($db, $table [,$link]) //列出MySQL结果中的字段
  mysql_list_processes([$link])//列出MySQL进程
  mysql_list_tables($db [,$link]) //列出MySQL数据库中的表
  mysql_result($result, $row [$field])//取得结果数据
  mysql_select_db($db [,$link])//选择MySQL数据库
  mysql_tablename($result, $i)//取得表名
  mysql_db_name($result, $row [,$field]) //取得mysql_list_dbs()调用所返回的数据库名
  mysql_stat([$link]) //取得当前系统状态
  mysql_thread_id([$link])//返回当前线程的ID
  mysql_get_client_info() //取得MySQL客户端信息
  mysql_get_host_info()//取得MySQL主机信息
  mysql_get_proto_info() //取得MySQL协议信息
  mysql_get_server_info() //取得MySQL服务器信息
  / 【SQL注入】 /
  特殊字符导致的问题:


[*]  转义:mysql_real_escape_string()
  对外来数据(GPC: GET, POST, COOKIE)进行转义

[*]先查询当前记录行,再匹配用户名
  //魔术引号机制
  自动为所有提交到服务器的数据增加特殊符号的转义。
  当打开时,所有的单引号,双引号,反斜线和NULL字符都会被自动加上一个反斜线进行转义。这和addslashes()作用完全相同。
  php.ini配置:
  magic_quotes_gpc = Off
  get_magic_quotes_gpc() 获取当前魔术引号机制的配置信息
  / 【错误处理】 /
  解析错误、运行错误
  //标准错误:
  级别、信息、文件、行号
  trigger_error触发一个用户自定义的error/warning/notice错误信息
  //php.ini配置,ini_set()
  error_reporting   设置报告哪些级别的错误

错误报告:显示到页面
  display_errors = On 是否显示错误报告

错误日志:存放到文件
  log_errors = on   是否开启错误日志
  error_log      发送错误信息到错误日志文件


[*]错误报告和错误日志可同时启用!
  自定义错误处理器
  set_error_handler — 注册自定义错误处理器函数


[*]  自定义处理器函数包含4个参数,分别是级别、信息、文件、行号

[*]  开启自定义错误处理器,则系统内置的错误报告和错误日志则不会执行。

[*]  自定义错误处理器函数返回false,则自定义函数结束后系统内置的会继续执行。

[*]用户定义的错误级别(E_USER_ERROR),可以被自定义的错误处理器所捕获并继续执行。系统内置的错误,则脚本会立即停止。
  restore_error_handler — 恢复预定义错误处理器函数
  error_get_last — 获取最近的错误信息
  //错误处理函数
  debug_backtrace 产生一条回溯跟踪
  返回数组,包含的键值:function, line, file, class, object, type, args
  debug_print_backtrace 打印一条回溯
  //错误常量
  手册>错误处理
  #生产模式
  关闭错误报告,记录错误日志。
  #开发模式
  关闭错误日志,开启错误报告。
  //异常
  面向对象语法中的错误处理方式。
  一个异常就是一个包含当前异常信息的对象。
  预定义异常类Exception及其扩展类。
  #抛出异常
  触发一个异常的错误
  throw new UserException();
  如果没有被捕获,则报告致命错误。
  #监视异常
  try {代码段}
  #捕获异常
  catch (UserException $obj) {代码段}
  需要通过当前异常的类型匹配才可悲捕获。
  #异常处理器
  用以处理未被捕获的异常。
  异常处理器函数与catch类似,参数也是含类型的对象。
  set_exception_handler — 注册异常处理器函数
  restore_exception_handler — 恢复预定义的异常处理器函数
  #自定义异常
  用户定义的异常类须继承自Exception类。
  //异常相关属性
  protected string $message 异常消息内容
  protected int $code 异常代码
  protected string $file 抛出异常的文件名
  protected int $line 抛出异常在该文件中的行号
  //异常相关方法
  Exception::__construct — 异常构造函数
  Exception::getMessage — 获取异常消息内容
  Exception::getPrevious — 返回异常链中的前一个异常
  Exception::getCode — 获取异常代码
  Exception::getFile — 获取发生异常的程序文件名称
  Exception::getLine — 获取发生异常的代码在文件中的行号
  Exception::getTrace — 获取异常追踪信息
  Exception::getTraceAsString — 获取字符串类型的异常追踪信息
  Exception::__toString — 将异常对象转换为字符串
  Exception::__clone — 异常克隆
  / 【数据库抽象层】 /
  PDO:PHP Data Objects
  PHO抽象层默认被加载,但需加载相应数据库的驱动。
  PDO是OOP语法,提供三个类:
  PDO:PDO自身
  PDOStatement:PDO语句类,提供对语句的后续处理
  PDOException:PDO异常类,提供对错误的异常处理
  //连接数据库
  PDO::__construct(str $dsn [,str $username [,str $password [,arr $driver_options]]])
  DSN:Data Source Name,数据源
  $dsn = 'mysql:dbname=testdb;host=127.0.0.1;port=3306';
  //执行没有返回结果的SQL语句
  int PDO::exec(str $statement)//返回影响的记录数
  //执行有返回结果集的SQL语句
  PDOStatement PDO::query (string $statement) //返回PDOStatement对象
  //处理结果集(PDOStatement对象)
  array PDOStatement::fetchAll(]])//默认返回关联+索引数组
  mixed PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] ) //返回一行
  string PDOStatement::fetchColumn ([ int $column_number = 0 ] ) //返回一列
  //释放资源
  unset($pdo) 或 $pdo = null
  //错误报告
  静默模式:silent mode,出现错误,不主动报告错误(默认)
  array PDO::errorInfo(void)
  警告模式:warning mode,出现错误,触发一个警告级别的错误
  异常错误:exception mode,出现错误,抛出异常
  bool PDO::setAttribute(int $attribute, mixed $value)//设置PDO类属性值
  PDO::setAttribute('PDO::ATTR_ERRMODE', 'PDO::ERRMODE_SILENT | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION')
  //预处理式执行SQL
  可对数据自动转义,可有效抵制SQL注入。
  PDOStatement PDO::prepare(string $statement [,array $driver_options=array()])
  bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
  bool PDOStatement::execute ([ array $input_parameters ] )
  / 【AR模式】 /
  表 -> 类
  字段 -> 类属性
  数据 -> 对象
  / Date/Time /
  date($format [,$timestamp]) //格式化一个本地时间/日期,$timestamp默认为time()
  Y:4位数字完整表示的年份
  m:数字表示的月份,有前导零
  d:月份中的第几天,有前导零的2位数字
  j:月份中的第几天,没有前导零
  H:小时,24小时格式,有前导零
  h:小时,12小时格式,有前导零
  i:有前导零的分钟数
  s:秒数,有前导零
  L:是否为闰年,如果是闰年为1,否则为0
  M:三个字母缩写表示的月份,Jan到Dec
  W:年份中的第几周,每周从星期一开始
  z:年份中的第几天
  N:数字表示的星期中的第几天
  w:星期中的第几天,数字表示
  e:时区标识
  T:本机所在的时区
  U:从Unix纪元开始至今的秒数(时间戳)
  time() //返回当前的Unix时间戳(秒)
  microtime([$get_as_float]) //返回当前Unix时间戳和微秒数
  $get_as_float参数存在并且其值等价于TRUE,将返回一个浮点数
  strtotime($time [,$now]) //将任何英文文本的日期时间描述解析为Unix时间戳
  date("Y-m-d H:i:s", strtotime("-1 day")); //格式化前一天的时间戳
  "now"
  "10 September 2000"
  "+1 week"
  "+1 week -2 days 4 hours 2 seconds"
  "last Monday"
  "next Thursday"
  gmdate($format [,$timestamp]) //格式化一个GMT/UTC 日期/时间
  mktime([$hour = date("H") [,$minute = date("i") [,$second = date("s") [,$month = date("n") [,$day = date("j") [,$year = date("Y") [,$is_dst = -1]]]]]]]) //取得一个日期的Unix时间戳
  strftime($format [,$timestamp]) //根据区域设置格式化本地时间/日期
  date_default_timezone_get($timezone) //获取默认时区
  date_default_timezone_set($timezone) //设置默认时区
  / DateTime /
  //date()函数能处理有效时间戳范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07(因为32位系统能最大正整数限制)
  DateTime::__construct([$time="now"]) //构造方法
  $time若是时间戳,则在时间戳前加@符号,如'@2345678'
  DateTime::setTimezone($timezone) //设置时区
  eg: $date->setTimezone(new DateTimeZone('PRC'));
  DateTime::format($format) //格式化时间戳,格式化字符串形式同date()函数
  / $_SERVER /
  //示例URL:http://desktop/dir/demo.php?a=aaa&b=bbb
  PHP_SELF 当前执行脚本的文件名 // /dir/demo.php
  GATEWAY_INTERFACE 服务器使用的CGI规范的版本 // CGI/1.1
  SERVER_ADDR 当前运行脚本所在的服务器的IP地址 // 127.0.0.1
  SERVER_NAME 当前运行脚本所在的服务器的主机名 // desktop
  SERVER_SOFTWARE 服务器标识字符串 // Apache/2.2.22 (Win32) PHP/5.3.13
  SERVER_PROTOCOL 请求页面时通信协议的名称和版本 // HTTP/1.1
  REQUEST_METHOD 访问页面使用的请求方式 // GET
  REQUEST_TIME 请求开始时的时间戳 // 1386032633
  QUERY_STRING 查询字符串(参数) // a=aaa&b=bbb
  DOCUMENT_ROOT 当前运行脚本所在的文档根目录 // C:/Users/Administrator/Desktop
  HTTP_ACCEPT 当前请求头中Accept:项的内容 // text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
  HTTP_ACCEPT_CHARSET 当前请求头中Accept-Charset:项的内容 // UTF-8,*
  HTTP_ACCEPT_ENCODING 当前请求头中Accept-Encoding:项的内容 // gzip, deflate
  HTTP_ACCEPT_LANGUAGE 当前请求头中Accept-Language:项的内容 // zh-cn,zh;q=0.5
  HTTP_CONNECTION 当前请求头中Connection:项的内容 // keep-alive
  HTTP_HOST 当前请求头中Host:项的内容 // desktop
  HTTP_REFERER 引导用户代理到当前页的前一页的地址
  HTTP_USER_AGENT 当前请求头中User-Agent:项的内容 // Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
  HTTPS 如果脚本是通过HTTPS协议被访问,则被设为一个非空的值
  REMOTE_ADDR 浏览当前页面的用户的IP地址 // 127.0.0.1
  REMOTE_HOST 浏览当前页面的用户的主机名
  REMOTE_PORT 用户机器上连接到Web服务器所使用的端口号 // 49197
  REMOTE_USER 经验证的用户
  REDIRECT_REMOTE_USER 验证的用户,如果请求已在内部重定向
  SCRIPT_FILENAME 当前执行脚本的绝对路径 // C:/Users/Administrator/Desktop/dir/demo.php
  SERVER_ADMIN 该值指明了Apache服务器配置文件中的SERVER_ADMIN参数 //admin@shocker.com
  SERVER_PORT Web服务器使用的端口 // 80
  SERVER_SIGNATURE 包含了服务器版本和虚拟主机名的字符串
  PATH_TRANSLATED 当前脚本所在文件系统(非文档根目录)的基本路径
  SCRIPT_NAME 当前脚本的路径 // /dir/demo.php
  REQUEST_URI URI用来指定要访问的页面 // /dir/demo.php?a=aaa&b=bbb
  PHP_AUTH_DIGEST 客户端发送的“Authorization” HTTP头内容
  PHP_AUTH_PW 用户输入的密码
  AUTH_TYPE 认证的类型
  PATH_INFO 包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息
  ORIG_PATH_INFO 在被PHP处理之前,“PATH_INFO”的原始版本
  / 缓存 /


[*]  ob缓存(输出缓存)(需开启)
  php.ini设置中开启并设置输出缓存大小:output_buffering = 4096
  ob_start() 开启当前脚本页面的输出缓存
  如果输出缓存打开,则输出的数据先放到输出缓存(header函数前可以有输出),否则直接放入程序缓存。
  header()函数发送的内容直接放入程序缓存。
  开启输出缓存后,输出缓存数据会刷新到程序缓存,然后有Apache封装成http响应包返回给浏览器。
  输出缓存:存放的数据是从开启输出缓存开始返回给浏览器的所有静态页面数据!

[*]  程序缓存(内部缓存,必须存在,不能关闭)

[*]浏览器缓存
  / ob缓存(输出控制) / Output Buffering
  ob_start() //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面。
  ob_start('ob_gzhandler'); //将gz编码的数据发送到支持压缩页面的浏览器
  ob_clean();      //删除内部缓冲区的内容,不关闭缓冲区(不输出)。
  ob_end_clean();    //删除内部缓冲区的内容,关闭缓冲区(不输出)。
  ob_get_clean();    //返回内部缓冲区的内容,关闭缓冲区。相当于执行ob_get_contents()与ob_end_clean()
  ob_flush();      //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区。
  ob_end_flush();    //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,关闭缓冲区。
  ob_get_flush();    //返回内部缓冲区的内容,并关闭缓冲区,再释放缓冲区的内容。相当于ob_end_flush()并返回缓冲区内容。
  flush();      //将当前为止程序的所有输出发送到用户的浏览器
  ob_get_contents();   //返回缓冲区的内容,不输出。
  ob_get_length();    //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回FALSE。
  ob_get_level();    //Return the nesting level of the output buffering mechanism.
  ob_get_status();    //获取ob状态信息
  ob_implicit_flush();//打开或关闭绝对刷新,默认为关闭,打开后ob_implicit_flush(true),所谓绝对刷新,即当有输出语句(e.g: echo)被执行时,便把输出直接发送到浏览器,而不再需要调用flush()或等到脚本结束时才输出。
  ob_gzhandler      //ob_start回调函数,用gzip压缩缓冲区的内容。
  ob_list_handlers      //List all output handlers in use
  output_add_rewrite_var   //Add URL rewriter values
  output_reset_rewrite_vars //Reset URL rewriter values
  这些函数的行为受php_ini设置的影响:
  output_buffering    //该值为ON时,将在所有脚本中使用输出控制;若该值为一个数字,则代表缓冲区的最大字节限制,当缓存内容达到该上限时将会自动向浏览器输出当前的缓冲区里的内容。
  output_handler   //该选项可将脚本所有的输出,重定向到一个函数。例如,将 output_handler 设置为 mb_output_handler() 时,字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。
  implicit_flush   //作用同ob_implicit_flush,默认为Off。
  //ob缓存作用
  1)防止在浏览器有输出之后再使用setcookie()、header()或session_start()等发送头文件的函数造成的错误。其实这样的用法少用为好,养成良好的代码习惯。
  2)捕捉对一些不可获取的函数的输出,比如phpinfo()会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。
  3)对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
  4)生成静态文件,其实就是捕捉整页的输出,然后存成文件。经常在生成HTML,或者整页缓存中使用。
  / 网站并发 /
  测试工具:apache/bin/ab.exe
  用法:cmd{%apache-bin%}>ab.exe -n 执行访问次数 -c 用户并发数量 URL地址
  MPM(多路处理模块):perfork(预处理模式), worker(工作者模式), winnt(Win系统)
  MPM配置:httpd-mpm.conf
  查看当前MPM模式:httpd –lmpm_xxx.c中xxx表示当前模式类型
  httpd.conf配置(开启MPM):#Include conf/extra/httpd-mpm.conf
  #参考配置
  #配置文件:extra/httpd-mpm.conf
  #mpm_winnt.c
  
  ThreadsPerChild   1000#中型网站1500-5500合理
  MaxRequestsPerChild 0
  
  #mpm_prefork.c
  
  StartServers5    #预先启动
  MinSpareServers 5
  MaxSpareServers 10   #最大空闲进程
  ServerLimit   1500#用于修改apache编程参数
  MaxClients   1000#最大并发数
  MaxRequestsPerChild 0#一个进程对应的线程数,对worker更用
  
  #如果你的网站pv值上百万
  ServerLimit   2500#用于修改apache编程参数
  MaxClients   2000#最大并发数
  / 静态化 /


[*]  页面URL长度不超过255字节

[*]  meta信息尽量完整,keywords5个左右

[*]  前端不要使用框架

[*]  图片alt属性添加信息

[*]静态页面不要带动态值
  
  url可以是js/php/图片等,返回的数据替换标签所在位置的内容!相当于简单的Ajax
  / Apache压缩 /
  gzip/deflate
  / XSS*** /
  #恶意JS代码
  #不规则HTML代码
  开源过滤器:htmlpurifier
  //获取COOKIE
  
  var c = document.cookie; //获取COOKIE
  var script = document.createElement('script'); //创建script标签
  script.src = 'demo.php?c=' + c; //发送到指定的文件接收
  document.body.appendChild(script); //添加到DOM对象中生效
  
  / 命令行CLI /
  //显示帮助信息
  php -h
  //解析并运行-f选项给定的文件名
  php [-f][--]
  //在命令行内运行单行PHP代码
  php -r[--]
  无需加上PHP的起始和结束标识符,否则将会导致语法解析错误
  //调用phpinfo()函数并显示出结果
  php -i/--info
  //检查PHP语法
  php -l/--syntax-check
  //打印出内置以及已加载的PHP及Zend模块
  php -m/--modules
  //将PHP,PHP SAPI和Zend的版本信息写入标准输出
  php -v/--version
  //参数接收
  $argv传递给脚本的参数数组
  第一个参数总是当前脚本的文件名,因此$argv就是脚本文件名
  $argc传递给脚本的参数数目
  脚本的文件名总是作为参数传递给当前脚本,因此$argc的最小值为1
  包含当运行于命令行下时传递给当前脚本的参数的数组
  此两个变量仅在register_argc_argv打开时可用
  / 设计模式 /
  单例模式:为一个类生成一个唯一的对象。使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
  工厂模式:封装对象的建立过程。可以在对象本身创建对象工厂或者是一个额外的工厂类
  MVC模式:用户->控制器->模型->控制器->视图->控制器->用户
  / 配置选项 /
  set_time_limit($seconds) //设置脚本最大执行时间(默认30秒),0表示不限制
  ini_get($varname) //获取一个配置选项的值
  ini_set($varname, $newvalue) //为一个配置选项设置值
  extension_loaded($ext_name) //检测一个扩展是否已经加载
  get_extension_funcs($ext_name) //返回模块函数名的数组
  / 【其他】 /
  version_compare(str $ver1, str $ver2 [,str $operator]) //比较版本号
  $operator表示操作符,可选:=, ge, ==, =, eq, !=, , ne
  如果省略$operator,返回两个版本号的差值。
  符号@用于抑制系统运行错误的报告显示
  memory_get_usage//获取当期内存使用情况
  memory_get_peak_usage//获取内存使用的峰值
  getrusage//获取CPU使用情况(Windows不可用)
  uniqid([$prefix])//获取一个带前缀、基于当前时间微秒数的唯一ID
  highlight_string($str [,$return])//字符串的语法高亮
  $return:设置为TRUE,高亮后的代码不会被打印输出,而是以字符串的形式返回。高亮成功返回TRUE,否则返回FALSE。
  highlight_file($file [,$return])//语法高亮一个文件
  __halt_compiler   //中断编译器的执行
  get_browser   //获取浏览器具有的功能
  get_browser ([ string $user_agent [, bool $return_array = false ]] )
  如果设置为 TRUE,该函数会返回一个 array,而不是 object
  eval($code) //把字符串作为PHP代码执行
  gzcompress($str [,$level=-1])//压缩字符串
  gzuncompress($str) //解压缩字符串
  gzencode($str [,$level=-1])//压缩字符串
  gzdecode($str) //解压缩字符串
  ignore_user_abort($bool) //设置客户端断开连接时是否中断脚本的执行



页: [1]
查看完整版本: php 知识总结