函数参考
内核
下面的函数介绍属于PHP内核的一部分,不能通过编译选项去除。PHP这部分的函数和介绍相当多,这里只撷选了常用的部分。
数组
这部分的函数主要用来进行和数组相关的操作,由于PHP中的数组包括了键值对这样类似对象的内涵,函数的数量很多,甚至有些冗杂。
array_chunk ( array $input , int $size [, bool $preserve_keys = false ] )将数组分割为多个,单元数目由size决定。返回一个多维数组。array_merge ( array $array1 [, array $... ] )将多个数组的单元合并在一起,字符串键名相同时,后面的值会覆盖前一个。类似的还有array_merge_recursive。
array_count_values ( array $input )统计数组中所有的值出现的次数,返回一个关联数组
array_diff ( array $array1 , array $array2 [, array $... ] )计算数组的差集,返回在array1但不在array2的元素。array_intersect ( array $array1 , array $array2 [, array $ ... ] )计算数组的交集,返回一个在array1中出现同时也在其他所有参数数组中出现的值。在差和交的名称前加上u的函数可以自己指定比较方法。
array_fill( int $start_index , int $num ,mixed$value )用给定的值填充数组的num个条目,start_index为返回数组的第一个索引值。array_fill_keys函数可以填充键值对。
array_pad( array $input , int $pad_size ,mixed$pad_value )用值将数组填充到指定长度。键从第一个整型数开始,否则从0开始。
array_flip(array $trans)返回一个交换键和值的数组。不合法的值将不会反转。类似的array_reverse(array $array)返回一个单元顺序相反的数组。
array_combine ( array $keys , array $values )返回一个由keys数组作键,values数组作值的新数组,两个数组长度不一样时抛出异常。array_keys ( array $array [, mixed $search_value [, bool $strict= false ]] )返回所有值为search_value的键名,strict表示是否进行严格比较。类似地,array_values(array $input)返回一个由所有值组成的数组,并建立起数字索引。
array_multisort(array &$arr[,mixed$arg=SORT_ASC [,mixed$arg=SORT_REGULAR [,mixed$... ]]] )用来一次多多个数组排序,输入数组被当作一个数据表的若干列来排序。常用在对数据库数据的排序。返回值为bool类型。
array_push( array &$array ,mixed$var [,mixed$... ] )和array_pop ( array &$array )分别在array的末尾淡出或压入一个元素。
array_shift和array_uinshift完成类似于上面的功能,不过是在数组开头。
array_product()和array_sum()分别返回数组的乘积和总和。
array_filter( array $array [,callable$callback [, int $flag = 0 ]] )用回调函数过滤数组单元。没有回调函数时将删除input中等值于FALSE的条目。
array_map (callable$callback , array $arr1 [, array $... ] )返回一个arr1所有单元经过callback作用后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
array_walk( array &$array ,callable$callback [,mixed$userdata = NULL ] )使用用户自定义的函数对数组每个函数做回调处理。
array_reduce( array $input ,callable$function [,mixed$initial = NULL ] )根据回调将array简化为一个值。function变量可以读取result和item。
array_replace( array $array1 , array $array2 [, array $... ] )将前面的数组的键值对覆盖为后面的键值对。多维数组下有recursive版本。
array_key_exists ( mixed $key , array $search )检查键名是否存在于数组中。array_search( mixed $needle , array $haystack [, bool $strict = false ] )在数组中搜索给定值。
array_slice ( array $array , int $offset [, int $length = NULL[, bool $preserve_keys = false ]] )根据offset和length从数组中取出一段。
array_splice( array &$input , int $offset [, int $length = 0 [,mixed$replacement ]] )把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement参数,则用其中的单元取代。
array_unique ( array $array [, int $sort_flags = SORT_STRING ] )用于移除数组中重复的值
除了这些,还有is_array(),explode(),split()等不以array开头的函数和数组相关,大多用来进行一些简单的操作,列表见数组参考。和数组排序相关的函数也有很多,它们在排序依据,是否稳定等方面各不相同,更多内容参考对数组进行排序。
字符串
和字符串相关的函数也很多,但只有以str开头的是严格意义上的字符串函数。
addslashes(string $str)转义字符串中的单引号,双引号,反斜线和NUL
chr ( int $ascii )返回ASCII码对应的字符,ord()是其互补函数
chunk_split ( string $body [, int $chunklen = 76 [, string $end = "\r\n" ]] )拆分$body为$chunklen的小块,每块后用$end结尾
count_chars ( string $string [, int $mode = 0 ] ) 根据$mode的模式返回字符串中的字符统计信息,在双字节字符中会有问题。
crypt ( string $str [, string $salt ] )返回一个单向字符串散列,md5(string $str)计算字符串的MD5散列值,sha1(string $str) 计算sha1散列值
echo 输出一组字符串
explode ( string $delimiter , string $string [, int $limit ] ) 使用一个字符串分割另一个字符串;类似地,implode ( string $glue , array $pieces ) 将一个一维数组的值转为字符串。又写作join。
htmlentites(string $string) 转义所有的特殊字符为HTML实体;html_entity_decode()实现相反的步骤。
htmlspecialchars(string $string)和htmlspecialchars_decode()完成的功能和上面相似,但是转义的字符只有&,“,‘,<,>。
lcfirst将首字母小写,ucfirst将首字母大写,ucwords将每个单词的首字母大写
ltrim,rtrim和trim删除字符串首部,尾端和两端的空白。
number_format 将数字转为千分位分割格式
levenshtein()和similar_text()可以计算两个字符串间的编辑距离和相似度
str_getcsv解析csv字符串为一个数组
str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] ) 使用另一个字符串填充字符串到指定长度
str_repeat 重复一个字符串
str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) 字符串替换,preg_replace的特殊情况
str_shuffle()随机打乱一个字符串
str_split ( string $string [, int $split_length = 1 ] ) 将一个字符串转换为数组
strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] ) 查找字符串的第一次出现。stristr()则不区分大小写地查找
strcmp二进制安全字符串比较大小,strncmp类似,不过允许指定比较的长度,strnatcmp(string $str1, string $str2) 以自然顺序比较字符串
strcspn ( string $str1 , string $str2 [, int $start [, int $length ]] ) 返回str1中,所有字符都不在str2范围内的起始子字符串的长度,strspn计算字符串全部字符都存在于指定字符集合的第一段子串的长度
strlen获取字符串长度
strpbrk在字符串中查找一组字符中的任意一个字符
strpos查找字符串初次出现位置,strrpos查找最后一次出现,strripos不区分大小写查找最后一次出现
strrev反转字符串
strip_tags去除str中的空字符,HTML标记和PHP标记,和fgetss()机制一样
strtoupper将字符串转化为大写,strtolower将字符串转换为小写
strtr()转换指定字符
substr( string $string , int $start [, int $length ] ) 返回字符串的子串
substr_count()返回子字符串在字符串中出现的次数。
wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false ]]] ) 使用字符串断点将字符串打断为指定数目的子串
特殊的,用于url的函数有以下这些:
get_header(string $url) 获得服务器响应一个HTTP请求的包头,返回一个数组
get_meta_tags(string $filename) 从一个文件中提取meta标签的content属性
http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )生成URL-encode之后的请求字符串
parse_url(string $url) 解析一个URL,返回其组成部分
urlencode(string $str) 编码一个URL字符串,urlcode解码一个URL字符串
变量
这部分函数实现变量的处理。
boolvar($var) 转换变量为bool类型
empty($var) 判断变量是否为空
isset($var) 检测变量是否已设置
intval($var) 获取变量整数值,floatval($var) 获取变量浮点数值,strval($var) 获取变量的字符串表示
get_resource_type(resource $handle) 获取资源类型
gettype($var) 获取变量类型,settype($var, string $type) 设置变量类型
is_array, is_bool, is_callable, is_float, is_int, is_null, is_numeric, is_object, is_resource, is_scalar, is_string用来检测各种类型。
print_r($expression)和var_dump($expression)打印变量的相关信息,var_export ($expression)以合法PHP代码的形式返回变量的字符串表示
serialize($value) 序列化一个变量,unserialize(string $str) 反序列化一个变量
unset($var) 销毁指定的变量
类和对象
这部分函数允许和类以及对象实例进行交互。PHP承袭了OOP语言的大部分特性,这部分函数和Javascript很不一样。
__autoload()尝试在类名未定义时启动类的自动加载
class_alias ( string $original , string $alias [, bool $autoload= TRUE ] )为一个类创建别名。
class_exists ( string $class_name [, bool $autoload = true ] )检查指定的类是否定义
get_class([object $obj])返回对象实例所属类的名字。类似地还有get_class_vars和get_class_methods函数。
get_declare_classes和get_declare_interfaces以及get_declare_traits获取脚本中已定义的类、接口、trait数组。
method_exists ( mixed $object , string $method_name )检查类方法是否存在于指定object中,类似地还有property_exsits,interface_exists和trait_exist等
更多函数可参见官方文档。
日期和时间
这些函数和PHP服务器的日期及时间有关,这部分信息在PHP中以64为数字存储。使用时需要配置好php.ini中时区等信息。DateTime,DateTimeZone,DateInterval等对象便于进行相关的操作。PHP同时提供了OOP风格和过程化风格两种方式使用函数。其中Date Time和DateTimeImmutable都继承自DateTimeInterface接口,有着diff,format,getTimestamp,getTimezone等方法。
DateTime中的部分方法如下:
add ( DateInterval $interval )在当前时间上加上一个时间段,过程化风格--date_add ( DateTime $object , DateInterval $interval )
sub ( DateInterval $interval ) 在当前时间上减去一个时间段。过程化风格-- date_sub ( DateTime $object , DateInterval $interval )
__construct ([ string $time = "now" [, DateTimeZone$timezone = NULL ]] ),创建一个对象,过程化风格--date_create ()
createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )创建一种时间格式,过程化风格--date_create_from_format ()。format的写法格式见参考。
modify ( string $modify )修改当前时间,modify为合法的时间格式。过程化风格--date_modify ( DateTime $object , string $modify )
setDate ( int $year , int $month , int $day )设置日期。过程化风格--date_date_set ()
setTime ( int $hour , int $minute [, int $second = 0 ] ) 设置时间。 过程化风格--date_time_set ()
setTimestamp ( int $unixtimestamp )设置时间戳。过程化风格-- date_timestamp_set()
DateTimeImmutable对象的方法类似,这里从略。DateInterval类主要描述时间差,方法如下:
__construct ( string $interval_spec )时间差的书写方式可见参考,注意用T隔开日期和时间。
createFromDateString ( string $time ),通过事件字符串创建时间差。
format ( string $format )格式化输出的字符串
DatePeriod和DateTimeZone等的介绍从略。除了以上的对象方法过程化的函数外,还有以下一些常用方法:
date($format[, $timestamp),格式化一个本地时间
getdate([$timestamp = time()]),获得日期时间信息,localtime功能类似,返回一个数组。
mktime获得一个日期的时间戳,默认为当前。类似的还有time,microtime,返回一个时间戳类型
strtotime将英文文本的日期时间解析为Unix时间戳
有意思的是date_sunset和date_sunrise可以获取指定时间戳的日出日落时间
文件系统
这部分内容定义了对目录以及文件系统相关的功能函数和类。PHP的文件系统定义了大量的函数用于进行文件和目录操作。下面进行简单列举。
basename ( string $path [, string $suffix ] )返回文件名部分;dirname(string $path)返回路径中的目录部分,realpath(string $path)返回规范的绝对路径名
chgrp ( string $filename , mixed $group )改变文件所属组,类似的还有chmod和chown
copy用于拷贝文件,rename用于移动和重命名文件。注意,delete并不意味删除。unlink用于删除文件
link ( string $target , string $link )建立一个硬连接,linkinfo, lstat给出连接信息。Symlink创建一个符号连接。
mkdir和rmdir用来创建和删除文件夹
file把整个文件都入到一个数组中,一行一个元素,可以使用URL作为文件名。file_exists检查文件或目录是否已存在。tmpfile则会建立一个关闭后自动删除的临时文件。
file_get_contents将文件读入到字符串中,可以使用stream_context_create创建上下文进行更细致的操作。
file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )写文件,和依次调用fopen(), fwrite(), fclose()一样。
fileatime, filectime, filemtime, filegroup, fileowner, fileperms, filesize, filetype, stat等和字面意义一样获取文件的各方面信息。它们接收文件路径作为参数。
is_dir, is_executable, is_file, is_link, is_readable, is_uploaded_file, is_writable,
fopen打开一个文件,返回一个resource句柄,可以交给fread, fwrite, fscanf, fclose等函数做读写操作。
fgets从当前指针处读取一行,fgetc读取一个字符,fstat返回文件信息,ftruncate将文件阶段到给定长度。
glob ( string $pattern [, int $flags = 0 ] )寻找和pattern匹配的文件路径,flags支持一些有效标记。
Directory类通过dir()创建。Directory实例有close,read,rewind三种方法。分别用来释放句柄,读取条目和倒回开头。初次以外还有下面这些常用的目录相关函数。
chdir(string $directory)用来改变当前目录,
getcwd取得当前工作目录
scandir ( string $directory [, int $sorting_order [, resource $context ]] )返回一个包含目录中所有文件和目录的数组
closedir ([ resource $dir_handle ] )关闭通过opendir()打开的目录流。
readdir ([ resource $dir_handle ] ) 返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。
rewinddir ( resource $dir_handle )将句柄重置到目录开头。
dir ( string $directory [, resource $context ] )创建一个Directory类实例。相似的是opendir也可以打开一个目录句柄,用于closedir, readdir, rewinddir调用
其余的文件系统相关的函数介绍从略。
错误处理
PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式。
debug_backtrace()产生一条PHP的回溯跟踪,返回数组类型;debug_print_backtrace()则将回溯打印出来。
error_get_last()获取最后一个发生错误的信息,error_clear_last()清除最后一个错误信息
error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )发送错误信息到web服务器的错误日志或是一个文件里。
error_reporting([int $level])设置应该报告的PHP错误级别。
set_error_handler, set_exception_handler, restore_error_handler, restore_exception_handler分别是设置和重置错误以及异常处理的函数
trigger_error ( string $error_msg [, int $error_type = E_USER_NOTICE ] ) 触发一个用户级别的错误条件,在运行出现异常时,需要产生一个特定响应时很有用。
Session(会话)
在会话支持下,每个访问网站的用户都有一个唯一的id标识,这个标识可以存储在cookie中,也可以通过URL传递。当一个访问者访问网站时,PHP将自动检查(如果 session.auto_start 被设置为 1)或者在你要求下检查(明确通过 session_start() 或者隐式通过 session_register()) 当前会话 id 是否是先前发送的请求创建. 如果是这种情况, 那么先前保存的环境将被重建.
在安全方面,session还需要注意以下几点:
session.cookie_lifetime=0, 即浏览器不持久化存储cookie数据
session.use_cookies=On 并且 session.use_only_cookies=On,即通过HTTP cookie实现会话ID管理
session.use_strict_mode=On,即禁止使用未初始化会话id的会话,从而防止Javascript进行会话ID的注入
session.cookie_httponly=On,禁止Javascript访问会话ID
session.cookie_secure=On,仅在HTTPS协议下访问session ID,用在仅支持HTTPS的站点
session.use_trans_sid=Off,如果确实需要, 你也可以使用透明的会话 ID 管理。 禁用透明会话 ID 管理可以提高安全性, 规避会话 ID 注入和泄露的风险。
session.referer_check=[你的源 URL] 当启用 session.use_trans_sid 设置项时, 建议尽可能的联合使用此设置项来降低会话 ID 注入的风险。
session.hash_function="sha256"。 高强度的散列函数可以产生高强度的会话 ID
上面这些注意事项和更多介绍可在PHP的会话与安全章节找到,根据实际需要选择。下面是一些session函数的使用
session_abort() 放弃对session数组的更改,关闭session
session_destroy(), 销毁一个会话里的全部数据,但不会重置相关全局变量也不会重置cookie,再次使用时需要重新调用session_start()函数。为彻底删除session,需要调用setcookie()清除cookie中的session ID。
session_cache_expire ([ string $new_cache_expire ] ) 设置或读取当前缓存到期时间(这个只和浏览器页面刷新缓存有关)
session_cache_limiter ([ string $cache_limiter ] ) 读取或设置缓存限制器
session_id ([ string $id ] ) 获取/设置当前会话ID,PHP仅允许会话ID包括a-z A-Z 0-9 ,(逗号) -(减号).如果不是用cookie来存储session ID,session ID通常附在SID常量中,放在URL里。
session_regenerate_id() 在不修改当前session数据的前提下使用新的 ID 替换原有会话ID。如果启用了session.use_trans_sid 选项,那么必须在调用 session_regenerate_id() 函数之后开始进行输出工作,否则会导致使用原有的会话 ID
session_start() 创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。
session_status() 返回当前会话状态
session_write_close () 写入session数据,然后关闭会话
session_register_shutdown() 将session_write_close() 注册为关闭会话的函数
session_name([ string $name ]) 设置或返回当前回话名称,名称应短小易懂,且不能由纯数字组成,如website_id。
session_encode() 将当前session数据序列化为一个字符串,相反session_decode()将序列化的字符串翻译为session数据。
session_save_path ([ string $path ] ) 读取/设置当前会话的保存路径
session_unset() 释放当前会话注册的所有会话变量
进程控制
这部分函数提供执行系统本身命令的能力。注意,以加锁方式打开的文件,必须在执行后台程序前关闭。
escapeshellarg(string $arg)和escapeshellcmd(string $command)对参数和命令元字符转义,保证安全。
exec(string $command [, array &$output [, int &$return_var ]])和passthru()都能执行一个外部程序,区别是前者返回结果的最后一行,后者返回未经处理的全部输出数据。
shell_exec(string $cmd)在shell环境下执行命令,以字符串的形式返回完整的字符串。
system ( string $command [, int &$return_var ] ) 执行 command 参数所指定的命令, 并且输出执行结果。
proc_open和proc_close用来执行一个命令并打开用来输入/输出的文件指针以及关闭这个命令。proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] )比popen()有更强大的控制程序执行能力。
proc_terminate()和proc_get_status()分别用来终结proc_open()打开的进程和查看它的信息。
函数调用
这部分函数处理和函数相关的操作。
call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )把第一个参数作为回掉函数调用。在参数很多时,建议使用$callback(…values)的形式传入数组。类似的还有forward_static_call和forward_static-call_array用来调用静态方法。
create_function(string $args , string $code)创建一个匿名函数,不建议使用(效率低,不利于垃圾回收),可以通过闭包直接替代。
func_get_arg(int $arg_num)和func_get_arg()返回自定义函数的参数和参数列表,用在函数体内。
function_exists(string $function_name)判断函数是否定义
register_shutdown_function, register_tick_function用来注册exit()之后和每个tick后执行的函数
Hash
这部分函数完成哈希相关功能,自5.1.2版本后称为核心的一部分。
hash( string $algo , string $data [, bool $raw_output = false ] )根据指定的哈希算法生成哈希值。类似的还有hash_file。
hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )使用HMAC方法生成带有密钥的哈希值,类似的还有hash_hmac_file。
hash_init ( string $algo [, int $options = 0 [, string $key = NULL ]] )初始化一个哈希运算上下文,返回resource类型
hash_update ( resource $context , string $data )向活跃的哈希运算上下文中填充数据。细化的,还有hash_update_file和hash_update_stream两个函数。
hash_final( resource $context [, bool $raw_output = false ] )结束哈希上下文,返回摘要内容。
hash_copy(resource $context)返回一个哈希运算上下文副本。
PHP相关
这些函数允许你获得许多关于PHP本身的参数,例如:运行时的配置,被加载的扩展,版本等。
assert ( mixed $assertion [, string $description ] )检查一个断言是否为FALSE,并在失败的时候调用assert_options()中指定的回调函数
dl(string $library)运行时加载一个PHP扩展
get_cfg_var ( string $option )获取PHP配置选项的值
get_current_user() 获取当前 PHP 脚本所有者名称
get_included_files() 返回被 include 和 require 文件名的 array
ini_get ( string $varname ) 获取一个配置选项的值
ini_set ( string $varname , string $newvalue ) 设置指定配置选项的值。这个选项会在脚本运行时保持新的值,并在脚本结束时恢复
ini_restore ( string $varname ) 恢复指定的配置选项到它的原始值
memory_get_usage ([ bool $real_usage = false ] ) 返回当前分配给你的 PHP 脚本的内存量,单位是字节(byte)
php_sapi_name() 返回 web 服务器和 PHP 之间的接口类型
php_uname ([ string $mode = "a" ] ) 返回运行 PHP 的系统的有关信息
phpinfo ([ int $what = INFO_ALL ] ) 输出关于 PHP 配置的信息。可以通过what筛选输出内容。
phpversion ([ string $extension ] ) 获取当前的PHP版本
set_time_limit ( int $seconds ) 设置脚本最大执行时间
version_compare ( string $version1 , string $version2 [, string $operator ] ) 对比两个「PHP 规范化」的版本数字字符串,verison1和version2可以通过phpversion返回
Math
这部分函数处理integer和float范围内的计算。预定义常量包括M_PI, M_E, M_LOG2E, M_LN2, M_PI_2, M_1_PI, M_SQRT2, M_SQRT3, INF等诸多数学常量。函数名和其他语言类似。
三角函数相关:sin, cos, tan, asin, acos, atan计算单位为弧度
双曲函数相关:sinh, cosh, tanh, asinh, acosh, atanh, atan2
对数相关:log ( float $arg [, float $base = M_E ] ), log10, log1p(等于log(1+number))
指数相关:pow, exp, expm(等于exp(number)+1)
近似相关:round, floor, ceil
随机数相关: rand ( int $min , int $max ), mt_rand(用法同rand,性能更好), srand和mt_srand(现已不需要使用)
进制转换相关:bindec, octdec, hexdec转为十进制数(读取字符串,输出数字),相对应还有decbin, decbin, dechex。base_convert( string $number , int $frombase , int $tobase )可以做任意进制转换
角度相关:deg2rad角度转弧度
运算相关:intdiv( int $dividend , int $divisor )返回商的整数部分,fmod ( float $x , float $y )返回浮点数余数。abs计算绝对值,sqrt计算开根号
判断相关:is_finite, is_infinite, is_nan,
其他:max, min(可以输入数组), pi, hypot(根据直角边计算三角形斜边长)
输出控制
PHP脚本有输出时,输出控制函数可以用这些来控制输出。如通过ob_start()将下文的输出放在缓冲区直到调用ob_end_flush()。通常配合header ( string $string [, bool $replace = true [, int $http_response_code ]] )和setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )使用,在真正返回数据前写入header和cookie。
ob_start用于打开输出控制缓冲区。可以接受一个回调函数在缓冲区被清除或输出时调用,函数接收的第一个参数即为缓冲区中的内容,返回值为FALSE时,原来的输入内容被直接送到浏览器。缓冲区可堆叠,这意味着ob_start可以嵌套使用。
ob_get_contents() 得到缓冲区的内容,但不清楚它
ob_get_flush() 刷出缓冲区内容,以字符串形式返回,并关闭缓冲区。
ob_get_clean() 得到当前缓冲区内容并删除缓冲区
ob_get_level() 返回输出缓冲的嵌套级别,如果缓冲区不起作用,返回0.
ob_flush() 送出缓冲区的内容,但不销毁缓冲区,一般配合flush()使用
ob_end_clean() 清空缓冲区并关闭缓冲
ob_end_flush() 送出缓冲区内容并关闭缓冲
杂项
下面列举一些常用的杂项函数
connection_status() 检查和客户端的连接状态
constant(string $name) 返回一个常量的值
define ( string $name , mixed $value [, bool $case_insensitive = false ] )定义一个常量
exit ([ string $status ] )或exit ( int $status ) 输出一个消息并且退出当前脚本,die是exit的同名函数。
highlight_file ( string $filename [, bool $return = false ] )语法高亮一个文件,在$return为TRUE时输出,FALSE时返回为字符串。
highlight_string ( string $str [, bool $return = false ] ) 语法高亮一个字符串,使用方法同上。
php_strip_whitespace ( string $filename ) 返回删除注释和空格后的PHP源码
sleep( int $seconds )延迟指定秒数执行。类似的还有usleep以指定微秒数暂缓执行,time_sleep_until使脚本睡眠到指定时间
uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )返回一个基于当前微秒级时间的带前缀的唯一ID。
绑定拓展库
下面的拓展库绑定在PHP发行包中。较之内核部分的函数,更偏向为解决某类问题而设计。这里也只摘选部分常用的介绍。
Ctype
用来检测 在当前的区域设定下,一个字符或者字符串 是否仅包含指定类型的字符。根据官方描述,“如果可以满足需求,请优先考虑使用 ctype 函数, 而不是正则表达式或者对应的 "str*" 和 "is" 函数。 *因为 ctype 使用的是原生 C 库,所以会有明显的性能优势”。在4.2.0版本后,这些函数是默认启动的。
ctype_alpha ( string $text ) 纯字符检测
ctype_upper ( string $text ) 大写字母检测
ctype_lower ( string $text ) 小写字母检测
ctype_digit ( string $text ) 纯数字检测
ctype_alnum ( string $text ) 检查$text是否全部为字母或数字
ctype_cntrl ( string $text ) 控制字符检测
ctype_print ( string $text ) $text里面的字符是否都可以打印
ctype_graph ( string $text ) $text里面的字符输出是否都是可见的
ctype_punct ( string $text ) $text里面的字符是否都可打印却不是字母数组和空白
ctype_space ( string $text ) 空白字符检测
ctype_xdigit ( string $text ) 十六进制字符串检测
正则表达式(PCRE)
在PHP5.3版本后,原来的POSIX Regex不再推荐使用。兼容Perl的正则表达式库PCRE仍可以使用,且默认开启。关于PCRE中约定的正则表达式这里不做介绍,仅介绍PCRE相关函数,它们均以preg开头。
preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) 返回$pattern在$subject中的匹配次数
preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] ) 搜索subject中所有匹配pattern给定正则表达式的匹配结果并且将它们以flag指定顺序输出到matches中.
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) 执行一个正则表达式的搜索和替换,当$pattern和$replacement都是数组时,会进行相对应位置的替换。
preg_grep ( string $pattern , array $input [, int $flags = 0 ] ) 返回给定数组input中与模式pattern 匹配的元素组成的数组.
preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ) 通过正则表达式分割字符串,返回一个数组。
JSON
自5.2.0起,JSON拓展默认内置并编译进PHP。
json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] ) JSON编码一个变量。
json_decode( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] ) 解码一个JSON格式的字符串
json_last_error() 返回JSON编码时最后的错误
多字节字符串
在汉语中,每个字符通常占用2个字节,在使用string的相关函数时,可能会出现意外问题。多字节字符串即为了解决此问题。这不是一个默认扩展,需要在configure选项中显式激活。详见安装。另外,mbstring支持“函数重载”,即使用mb_xxx替代原有的字符串函数。
下面仅列举最可能用到(汉语环境下)的若干函数。
mb_detect_encoding ( string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = false ]] ) 检测字符的编码
mb_ereg_xxx打头的与preg_xx同名的函数为正则匹配多字节版
mb_internal_encoding ([ string $encoding = mb_internal_encoding() ] ) 设置/获取内部字符编码,多用在不同的部署场景下
mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] ) 获取字符串长度。
mb_split ( string $pattern , string $string [, int $limit = -1 ] ) 使用正则表达式分割多字节字符串
mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] ) 执行一个多字节安全的substr()操作,length指定字数
mb_strpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] ) 查找字符串在另一个字符串中首次出现的位置;类似地mb_strrpos查找最后出现的位置。
mb_strstr ( string $haystack , string $needle [, bool $before_needle = false [, string $encoding = mb_internal_encoding() ]] ) 查找字符串在另一个字符串里的首次出现;类似地,mb_strrchr()查找指定字符在另一个字符串中最后一次的出现
BCMath
这部分函数进行任意大小和精度的数字的二进制计算。自4.0.4后随PHP一起发布。Windows版本下是默认支持的。
string bcadd ( string $left_operand , string $right_operand [, int $scale ] ) 加法。scale用来决定小数点位数,下同。
string bcsub ( string $left_operand , string $right_operand [, int $scale = int ] ) 减法
int bccomp ( string $left_operand , string $right_operand [, int $scale = int ] ) 比较
string bcmul ( string $left_operand , string $right_operand [, int $scale = int ] ) 乘法
string bcdiv ( string $left_operand , string $right_operand [, int $scale = int ] ) 除法
string bcmod ( string $left_operand , string $modulus ) 取模
string bcpow ( string $left_operand , string $right_operand [, int $scale ] ) 乘方
string bcsqrt ( string $operand [, int $scale ] ) 二次方根
bcscale ( int $scale ) 设置所有bc数学函数的默认小数点位数
图像处理
PHP可以处理各种格式的图像,并把它们输出到浏览器。这需要在编译时指定GD库(除了getimagesize()函数)。GD库不仅能处理图像,还能对字体进行处理。使用PHP可以动态修改图像文件,或为图像添加水印信息,甚至创建一个图像。
下面是和图像信息相关的函数:
gd_info() 获取当前安装的GD库信息
getimagesize ( string $filename [, array &$imageinfo ] ) 获取图像大小,返回数组类型,按顺序分别是宽度,高度,类型,描述宽高的字符串。getimagesizefromstring函数则通过打开的图片信息(字符串格式)中读取图像尺寸信息
image_type_to_extension ( int $imagetype [, bool $include_dot = TRUE ] ) 获取图像类型的文件后缀,$imagetype是名为IMAGETYPE_XXX的常量。
imageistruecolor(resource $image) 检查图像是否为真彩色
imagesx ( resource $image ) 返回image所代表的图像宽度;imagesy ( resource $image ) 返回所代表的图像高度
imagetypes() 返回PHP支持的图像类型,int类型。
下面是和创建/输出/删除图像相关的函数:
imagecreate( int $x, int $y) 新建一个基于调色板的图像,更推荐使用下面的函数
imagecreatetruecolor(int $width, int $height) 新建一个真彩色图像
imagecreatefromgif/jpeg/png/string/wbmp/webp/xbm/xpm(string $filename) 从文件或URL中创建一个新图像,返回resource句柄
imagedestroy(resource $image) 销毁图像释放相关联内存
imagegif/png/jpeg/sbmp/sebp/xbm/xpm(resource $image[, strin $filename]) 输出图像到浏览器或文件
imageantialias ( resource $image , bool $enabled ) 是否启用抗锯齿功能,仅用于真彩色图像,不支持线宽和风格。
imagegarbscreen()和imagegrabwindow()截取当前屏幕和窗口,返回资源句柄。(仅windows下生效)
下面是与画图相关的函数:
imagesetbrush ( resource $image , resource $brush ) 设定用来画线用的画笔,brush可以是另外的图像。
imagesetstyle ( resource $image , array $style ) 设定画线风格,详见教程。
magesetthickness ( resource $image , int $thickness ) 设定画线宽度
imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col ) 画一个矩形,有filled版本。
imagepolygon ( resource $image , array $points , int $num_points , int $color ) 画一个多边形,有filled版本。
imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color ) 使用color颜色画一条线段。
imagearc ( resource $image , int $cx , int $cy , int $w , int $h , int $s , int $e , int $color ) 画一个椭圆弧,有filled版本。
imageellipse ( resource $image , int $cx , int $cy , int $width , int $height , int $color ) 画一个椭圆,有filled版本。
imagesetpixel ( resource $image , int $x , int $y , int $color ) 画一个单一像素
imagechar ( resource $image , int $font , int $x , int $y , string $c , int $color ) 水平地将字符串c的第一个字符画在image指定的图像上
imagecharup ( resource $image , int $font , int $x , int $y , string $c , int $color ) 垂直地画一个字符,类似以上
imagestring ( resource $image , int $font , int $x , int $y , string $s , int $color) 水平画一个字符串,同上,也有垂直版本imagestringup()。
下面是和编辑图像相关的函数:
imagecrop ( resource $image , array $rect ) 裁剪图像到指定大小的矩形(5.5以后)
imageflip ( resource $image , int $mode ) 根据mode,翻转一个图像
imagerotate ( resource $image , float $angle , int $bgd_color [, int $ignore_transparent = 0 ] ) 旋转一个角度
imagefill ( resource $image , int $x , int $y , int $color ) 填充一个区域
imagefilltoborder ( resource $image , int $x , int $y , int $border , int $color ) 区域填充到遇到border对应的颜色为止。
imagefilter() 对图像使用过滤器,详见教程。
imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h ) 拷贝一个图像的一部分到新的图像
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 ) 拷贝并合并图像的一部分,合并的成都由pct决定,pct=0时等于什么都没做,pct=100时等同于imagecopy函数。
imagecopymergegray函数和上面类似,用灰度拷贝合并图像的一部分
imagecopyresized() 拷贝部分图像并调整大小,参数同下
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 ) 重采样拷贝部分图像并调整大小。
下面是和颜色/调色板相关的函数:
imagecolorallocate ( resource $image , int $red , int $green , int $blue ) 给一个图像分配颜色,第一次使用时会填充背景色。返回一个代表颜色的标识符。
imagecolordeallocate ( resource $image , int $color ) 取消使用上面函数分配的颜色
imagepalettecopy ( resource $destination , resource $source ) 拷贝调色板到另一幅图像。
imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha ) 为一个图像分配颜色与alpha(透明度)
imagepalettetotruecolor ( resource $src ) 将一幅图像转换成真彩色
imagecorstotal ( resource $image ) 取得一幅图像调色板中颜色的数目
imagecolorat ( resource $image , int $x , int $y ) 获取某像素位置的颜色索引值
imagecolorclosest ( resource $image , int $red , int $green , int $blue ) 返回图像调色板中与指定颜色最接近的索引值,如果从文件中创建的图像,只有图像中使用的颜色会被辨析。类似地还有imagecolorexact函数和imagecolorclosestalpha,imagecolorexactalpha函数。
imagecolorsforindex ( resource $image , int $index ) 取得某索引的颜色,返回可读程度更高的数组格式
imagecolortransparent ( resource $image [, int $color ] ) 设置或返回当前图像的透明色。
下面是和字体相关的函数:
imageloadfont ( string $file ) 载入新字体,返回大于5的标识符
imagefontwidth(int $font) 返回指定字体一个字符的宽度;imagefontheight(int $font)返回指定字体一个字符的高度。
imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text ) 使用TrueType字体向图像写入文本;类似的还有imagepstext()和imagefttext()使用PostScript和FreeType。
Exif
通过exif扩展,可以操作图像元数据。必须使用—enable-exif选项编译PHP,Windows用户还需要启用mbstring扩展。
exif_imagetype() 读取一个图像的第一个字节并检查其签名
exif_read_data() 函数从 JPEG 或 TIFF 图像文件中读取 EXIF 头信息。这样就可以读取数码相机产生的元数据。
exif_thumbnail() 读取 TIFF 或 JPEG 图像中的嵌入缩略图。如果图像不包含缩略图则返回 FALSE
Socket
Socket拓展基于流行的BSD sockets,实现了和socket通讯功能的底层接口。在编译PHP时必须在配置中添加—enable-sockets配置项。利用这部分函数可以很方便地搭建起socket服务器和客户端,示例见官网。
socket_create( int $domain , int $type , int $protocol ) 创建并返回一个套接字(resource类型)。其中domain指定使用的网络协议族,type指定建立的套接字类型,protocol指定使用的具体协议。
socket_create_listen ( int $port [, int $backlog = 128 ] ) 在某端口打开socket以接收连接。
socket_bind( resource $socket , string $address [, int $port = 0 ] ) 绑定网络地址address到套接字的source。
socket_connect ( resource $socket , string $address [, int $port = 0 ] ) 使用address作为目的地址,建立套接字连接。
socket_listen( resource $socket [, int $backlog = 0 ] ) 在创建好socket资源,并绑定了source address后,可以调用此函数监听进入的数据流。
socket_accept( resource $socket ) 在依次使用socket_create创建套接字,使用socket_bind绑定端口,使用socket_listen监听连接后。该函数允许到此套接字上的连接,返回一个新的socket资源用来通信。
socket_read( resource $socket , int $length [, int $type = PHP_BINARY_READ ] ) 从已连接的socket中读取一段长度的数据,返回读出的数据。
socket_recv ( resource $socket , string &$buf , int $len , int $flags ) 功能同上,返回字节数并将数据存放在$buf中。
socket_recvfrom ( resource $socket , string &$buf , int $len , int $flags , string &$name [, int &$port ] ) 从已连接和还未连接的socket中读取数据。
socket_write ( resource $socket , string $buffer [, int $length ] ) 向socket中写入数据
socket_send ( resource $socket , string $buf , int $len , int $flags ) 向已连接的socket中写入数据。
socket_sendto ( resource $socket , string $buf , int $len , int $flags , string $addr [, int $port = 0 ] ) 向socket中发送数据而不管是否已连接
socket_getsockname()和socket_getpeername() 获取本地和远端socket信息
socket_set_block()和socket_set_nonblock() 设置socket是否阻塞
socket_strerror( int $errno ) 显示socket_last_error给出的错误信息
socket_set_option ( resource $socket , int $level , int $optname , mixed $optval ) 设置套接字选项,其中$optname可以通过socket_get_option得到。
socket_shutdown ( resource $socket [, int $how = 2 ] ) 停止从socket中读写数据
socket_close ( resource $socket ) 关闭给定的socket资源
外部拓展库
这些扩展库已经绑定在 PHP 发行包中,但是要编译以下扩展库,需要外部的库文件。这里仅介绍常用的cURL库。Mysqli和Mongo等可能会用得到的库介绍从略。
client URL
PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。这些curl函数在PHP 4.0.2 中引入。需要安装libcurl包才能使用PHP的cURL函数。安装过程从略。curl的使用流程思路和socket,mysql等十分相似,先使用curl_init()初始化会话,再使用curl_setopt()设置选项,然后通过curl_exec()执行会话,最后使用curl_close()关闭。
curl_init([ string $url = NULL ]) 初始化一个新的会话,返回一个cURL句柄
curl_setopt ( resource $ch , int $option , mixed $value ) 设置一个传输选项,常用的设置包括CURLOPT_URL, CURLOPT_HEADER, CURLOPT_RETURNTRANSFER, CURLOPT_TIMEOUT等。类似的,还有curl_setopt_array函数。
curl_reset ( resource $ch ) 重置一个 libcurl 会话句柄的所有的选项
curl_exec ( resource $ch ) 执行一个cURL会话。返回TRUE或执行的结果,或是FALSE。
curl_close ( resource $ch ) 关闭一个会话,释放所有相关资源
curl_getinfo ( resource $ch [, int $opt = 0 ] ) 获取最后一次传输的相关信息。
curl_error ( resource $ch ) 返回一条最近一次cURL操作明确的文本的错误信息
curl_version ([ int $age = CURLVERSION_NOW ] ) 获取cURL版本信息