php7 内核剖析学习笔记(一)

一、什么是php

1.1 php概述

1.1.1 发展历程
PHP是一种非常流行的高级脚本语言,尤其适合Web开发,快速、灵活和实用是PHP最重要 的特点。PHP自1995年由Lerdorf创建以来,在全球得到了非常广泛的应用。 Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。
Rasmus Lerdorf 在1995年6月8日将 PHP/FI 公 开发布,版本命名为 PHP 2,已 经有今日 PHP 的一些雏型,像是类似 Perl 的变量命名方式、表单处理功能、以及嵌入到 HTML 中执行的能力。
程序语法上也类似 Perl,有较多的限制,不过更简单、更有弹性。 PHP/FI加入了对MySQL的支持,从此建立了PHP在动态网页开发上的地位。
在1997年,任职于 Technion IIT 公司的两个以色列程序设计师:Zeev Suraski 和 Andi Gutmans,重写了PHP的解析器,成为PHP3的基础,而 PHP 也在这个时候改称为PHP: Hypertext Preprocessor,1998年6月正式发布 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 发布后开始改写 PHP 的核心,这个在1999年发布的解析器称为 Zend Engine, 他们也在以色列的 Ramat Gan 成立了 Zend Technologies 来管理 PHP 的开发。
在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式发布
2004年7月13日则发布 了PHP 5,PHP 5则使用了第二代的Zend Engine。PHP包含了许多新特色:完全实现面向对 象、引入PDO、以及许多性能方面的改进。目前PHP5.X仍然是应用非常广泛的一个版本。
1.1.2 特性
PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法,丰富的语法支持、同时支持面向对象、面向过程,相比C、Java等语言具有语法简洁、使用灵活、开发效率高、容易 学习等特点。
开源免费:PHP社群有大量活跃的开发者贡献代码
快捷:程序开发快,运行快,技术本身学习快,实用性强
效率高:PHP消耗相当少的系统资源,自动gc机制
类库资源:有大量可用类库供开发者使用
扩展性:允许用户使用C/C++扩展PHP
跨平台:可以在unix、windows、max os等系统上面使用PHP
1.1.3 php相关组成

  1. SAPI
    PHP本身可以理解为是一个库函数,提供语言的编译与执行服务,它有标准的输入、输出, 而SAPI是PHP的接入层,它接收用户的请求,然后调用PHP内核提供的一些接口完成PHP脚本的执行,所以严格意义上讲SAPI并不算PHP内核的一部分。
    PHP的角色就好比是leveldb,它实现了基本存储功能,但是没有网络处理模块,而我们基于 leveldb实现的完整存储服务就好比是SAPI。 PHP中常用的SAPI有cli、php-fpm,cli是命令行下执行PHP脚本的实现: bin/php script.php ,它是单进程的,处理模型比较简单,而php-fpm相对比较复 杂,它实现了网络处理模块,用于与web服务器交互。
  2. Zend引擎
    Zend是PHP语言实现的最为重要的部分,是PHP最基础、最核心的部分,它的源码在/Zend 目录下,PHP代码从编译到执行都是由Zend完成的。
    Zend整体由两个部分组成:
    编译器: 负责将PHP代码编译为抽象语法树,然后进一步编译为可执行的opcodes,这 个过程相当于GCC的工作,编译器是一个语言实现的基础
    执行器: 负责执行编译器输出的opcodes,也就是执行PHP脚本中编写的代码逻辑
  3. 相关扩展
    bcmath(精确数值处理)
    BC 数学 函数
    bcadd — 2个任意精度数字的加法计算
    bccomp — 比较两个任意精度的数字
    bcdiv — 2个任意精度的数字除法计算
    bcmod — 对一个任意精度数字取模
    bcmul — 2个任意精度数字乘法计算
    bcpow — 任意精度数字的乘方
    bcpowmod — 将一个任意精度的数提升到另一个精度值,减去指定的模数
    bcscale — 设置所有bc数学函数的默认小数点保留位数
    bcsqrt — 任意精度数字的二次方根
    bcsub — 2个任意精度数字的减法
    calendar(日期与时间扩展)

ctype(字符类型检测)
ctype_alnum — 做字母和数字字符检测
ctype_alpha — 做纯字符检测
ctype_cntrl — 做控制字符检测
ctype_digit — 做纯数字检测
ctype_graph — 做可打印字符串检测,空格除外
ctype_lower — 做小写字符检测
ctype_print — 做可打印字符检测
ctype_punct — 检测可打印的字符是不是不包含空白、数字和字母
ctype_space — 做空白字符检测
ctype_upper — 做大写字母检测
ctype_xdigit — 检测字符串是否只包含十六进制字符

curl(Client URL 库)
curl_close — 关闭 cURL 会话
curl_copy_handle — 复制一个cURL句柄和它的所有选项
curl_errno — 返回最后一次的错误代码
curl_error — 返回当前会话最后一次错误的字符串
curl_escape — 使用 URL 编码给定的字符串
curl_exec — 执行 cURL 会话
curl_file_create — 创建一个 CURLFile 对象
curl_getinfo — 获取一个cURL连接资源句柄的信息
curl_init — 初始化 cURL 会话
curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄
curl_multi_close — 关闭一组cURL句柄
curl_multi_errno — 返回上一次 curl 批处理的错误码
curl_multi_exec — 运行当前 cURL 句柄的子连接
curl_multi_getcontent — 如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的cURL的相关传输信息
curl_multi_init — 返回一个新cURL批处理句柄
curl_multi_remove_handle — 移除cURL批处理句柄资源中的某个句柄资源
curl_multi_select — 等待所有cURL批处理中的活动连接
curl_multi_setopt — 为 cURL 并行处理设置一个选项
curl_multi_strerror — 返回字符串描述的错误代码
curl_pause — 暂停和取消暂停一个连接。
curl_reset — 重置一个 libcurl 会话句柄的所有的选项
curl_setopt_array — 为 cURL 传输会话批量设置选项
curl_setopt — 设置 cURL 传输选项
curl_share_close — 关闭 cURL 共享句柄
curl_share_errno — 返回共享 curl 句柄的最后一次错误号
curl_share_init — 初始化一个 cURL 共享句柄。
curl_share_setopt — 为 cURL 共享句柄设置选项。
curl_share_strerror — 返回错误号对应的错误消息
curl_strerror — 返回错误代码的字符串描述
curl_unescape — 解码给定的 URL 编码的字符串
curl_version — 获取 cURL 版本信息

CURLFile::__construct — 创建 CURLFile 对象
CURLFile::getFilename — 获取被上传文件的 文件名
CURLFile::getMimeType — 获取被上传文件的 MIME 类型
CURLFile::getPostFilename — 获取 POST 请求时使用的 文件名
CURLFile::setMimeType — 设置被上传文件的 MIME 类型
CURLFile::setPostFilename — 设置 POST 请求时使用的文件名
CURLFile::__wakeup — 反序列化句柄

date(时间扩展)

dom (文件对象模型)

ereg( 正则表达式匹配)

exif(可交换图像信息)
exif_imagetype — 判断一个图像的类型
exif_read_data — 从 JPEG 或 TIFF 文件中读取 EXIF 头信息
exif_tagname — 获取指定索引的头名称
exif_thumbnail — 取得嵌入在 TIFF 或 JPEG 图像中的缩略图
read_exif_data — 别名 exif_read_data

fileinfo(文件信息)
finfo_buffer — 返回一个字符串缓冲区的信息
finfo_close — 关闭 fileinfo 资源
finfo_file — 返回一个文件的信息
finfo_open — 创建一个 fileinfo 资源
finfo_set_flags — 设置 libmagic 配置选项
mime_content_type — 检测文件的 MIME 类型

filter(过滤器函数)
filter_has_var — 检测是否存在指定类型的变量
filter_id — 返回与某个特定名称的过滤器相关联的id
filter_input_array — 获取一系列外部变量,并且可以通过过滤器处理它们
filter_input — 通过名称获取特定的外部变量,并且可以通过过滤器处理它
filter_list — 返回所支持的过滤器列表
filter_var_array — 获取多个变量并且过滤它们
filter_var — 使用特定的过滤器过滤一个变量
ftp(文件传输)
ftp_alloc — 为要上传的文件分配空间
ftp_append — Append the contents of a file to another file on the FTP server
ftp_cdup — 切换到当前目录的父目录
ftp_chdir — 在 FTP 服务器上改变当前目录
ftp_chmod — 设置 FTP 服务器上的文件权限
ftp_close — 关闭一个 FTP 连接
ftp_connect — 建立一个新的 FTP 连接
ftp_delete — 删除 FTP 服务器上的一个文件
ftp_exec — 请求运行一条 FTP 命令
ftp_fget — 从 FTP 服务器上下载一个文件并保存到本地一个已经打开的文件中
ftp_fput — 上传一个已经打开的文件到 FTP 服务器
ftp_get_option — 返回当前 FTP 连接的各种不同的选项设置
ftp_get — 从 FTP 服务器上下载一个文件
ftp_login — 登录 FTP 服务器
ftp_mdtm — 返回指定文件的最后修改时间
ftp_mkdir — 建立新目录
ftp_mlsd — Returns a list of files in the given directory
ftp_nb_continue — 连续获取/发送文件(non-blocking)
ftp_nb_fget — 从 FTP 服务器获取文件并写入到一个打开的文件(非阻塞)
ftp_nb_fput — 将文件存储到 FTP 服务器 (非阻塞)
ftp_nb_get — 从 FTP 服务器上获取文件并写入本地文件(non-blocking)
ftp_nb_put — 存储一个文件至 FTP 服务器(non-blocking)
ftp_nlist — 返回给定目录的文件列表
ftp_pasv — 返回当前 FTP 被动模式是否打开
ftp_put — 上传文件到 FTP 服务器
ftp_pwd — 返回当前目录名
ftp_quit — ftp_close 的 别名
ftp_raw — 向 FTP 服务器发送命令
ftp_rawlist — 返回指定目录下文件的详细列表
ftp_rename — 更改 FTP 服务器上的文件或目录名
ftp_rmdir — 删除 FTP 服务器上的一个目录
ftp_set_option — 设置各种 FTP 运行时选项
ftp_site — 向服务器发送 SITE 命令
ftp_size — 返回指定文件的大小
ftp_ssl_connect — 打开 SSL-FTP 连接
ftp_systype — 返回远程 FTP 服务器的操作系统类型
gettext(实现程序的国际化)
bind_textdomain_codeset —指定将以字符编码形式返回DOMAIN消息目录中的消息
bindtextdomain —设置域的路径
dcgettext —覆盖单个查询的域
dcngettext — dcgettext的复数版本
dgettext-覆盖当前域
dngettext — dgettext的复数版本
gettext —在当前域中查找消息
ngettext — gettext的复数版本
textdomain —设置默认域

hash(哈希信息摘要框架)
hash_algos — 返回已注册的哈希算法列表
hash_copy — 拷贝哈希运算上下文
hash_equals — 可防止时序攻击的字符串比较
hash_file — 使用给定文件的内容生成哈希值
hash_final — 结束增量哈希,并且返回摘要结果
hash_hkdf — Generate a HKDF key derivation of a supplied key input
hash_hmac_algos — Return a list of registered hashing algorithms suitable for hash_hmac
hash_hmac_file — 使用 HMAC 方法和给定文件的内容生成带密钥的哈希值
hash_hmac — 使用 HMAC 方法生成带有密钥的哈希值
hash_init — 初始化增量哈希运算上下文
hash_pbkdf2 — 生成所提供密码的 PBKDF2 密钥导出
hash_update_file — 从文件向活跃的哈希运算上下文中填充数据
hash_update_stream — 从打开的流向活跃的哈希运算上下文中填充数据
hash_update — 向活跃的哈希运算上下文中填充数据
hash — 生成哈希值 (消息摘要)

iconv(字符编码转换)
iconv_get_encoding — 获取 iconv 扩展的内部配置变量
iconv_mime_decode_headers — 一次性解码多个 MIME 头字段
iconv_mime_decode — 解码一个MIME头字段
iconv_mime_encode — Composes a MIME header field
iconv_set_encoding — 为字符编码转换设定当前设置
iconv_strlen — 返回字符串的字符数统计
iconv_strpos — Finds position of first occurrence of a needle within a haystack
iconv_strrpos — Finds the last occurrence of a needle within a haystack
iconv_substr — 截取字符串的部分
iconv — 字符串按要求的字符编码来转换
ob_iconv_handler — 以输出缓冲处理程序转换字符编码

json(json对象)
json_decode — 对 JSON 格式的字符串进行解码
json_encode — 对变量进行 JSON 编码
json_last_error_msg — Returns the error string of the last json_encode() or json_decode() call
json_last_error — 返回最后发生的错误

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独宠子沫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值