引言:
PHP 扩展是 PHP 语言功能的延伸与增强,涵盖数据库驱动、网络通信、图像处理、数据格式、加密安全、数学计算、国际化、性能优化、队列缓存、NoSQL 等完整分类。本文系统梳理 PHP 扩展的概念、完整分类列表、各扩展详细代码用法及安装管理方法,帮助开发者全面掌握 PHP 扩展的应用。

PHP 扩展模块完全指南

PHP 扩展模块是 PHP 语言功能的延伸和增强。它们如同一个个功能组件,让 PHP 能够连接数据库、处理图像、进行加密、发送网络请求等。本指南将系统介绍 PHP 扩展的概念,并以分类形式全面梳理各类常见扩展的用途和基本用法。

PHP 扩展的概念与形式

什么是 PHP 扩展

PHP 扩展是用 C 语言编写的动态链接库,用于为 PHP 提供额外的功能。PHP 语言本身提供语法、分支、循环、函数、类等基础能力,而扩展则在 PHP 的基础上补充或扩展功能,使 PHP 变得更加强大。

扩展以"插件式"的方式管理和维护 PHP 的功能。如果将全部功能整合到 PHP 语言中,会导致 PHP 过于臃肿且不够灵活。而有了扩展机制,开发者可以根据实际需求灵活启用或禁用功能。

PHP 扩展的存在形式

在 Linux 系统下,PHP 扩展以 .so 文件存在(如 redis.so),在 Windows 系统下则以 .dll 文件存在。

查看已安装的扩展

1
2
3
4
<?php
// PHP 代码中查看所有已加载扩展
print_r(get_loaded_extensions());
?>
1
2
# 命令行查看
php -m

get_loaded_extensions() 函数返回一个数组,包含所有已编译并加载的扩展模块名称。

PHP 扩展的完整分类列表

PHP 扩展种类繁多,以下按照功能领域,系统列出目前 PHP 生态中常见的扩展模块。

一、数据库驱动扩展

扩展名称 作用与用法
mysqli MySQL 数据库原生扩展,支持面向对象和面向过程两种编程风格。支持预处理语句、事务和多个查询结果。
pdo_mysql PDO 的 MySQL 驱动程序,提供统一的数据库访问接口。
pgsql PostgreSQL 数据库的原生扩展,提供对 PostgreSQL 功能的全面访问。
pdo_pgsql PDO 的 PostgreSQL 驱动程序。
sqlite3 SQLite 数据库的原生扩展,提供高效且轻量级的数据库访问。
pdo_sqlite PDO 的 SQLite 驱动程序。
pdo_dblib 用于连接 SQL Server 和 Sybase 数据库的 PDO 驱动扩展。
pdo_firebird Firebird/InterBase 数据库的 PDO 驱动程序。
pdo_oci Oracle 数据库的 PDO 驱动程序。
pdo_odbc ODBC 数据库的 PDO 驱动程序,用于连接支持 ODBC 的各类数据库。
pdo_sqlsrv Microsoft SQL Server 的 PDO 驱动程序。
sqlsrv Microsoft SQL Server 的原生扩展。
mysqlnd MySQL Native Driver,MySQL 数据库的底层驱动库,为 mysqli 和 PDO_MySQL 提供底层支持。
odbc ODBC(Open Database Connectivity)支持,用于连接多种数据库。
interbase Firebird/InterBase 数据库支持。
dba 与平面文件数据库(如 DBM)交互,提供键值对存储功能。
dbase 读取和写入 dBASE 格式的数据库文件。

二、网络通信与 API 交互扩展

扩展名称 作用与用法
curl 使用各种协议(HTTP、HTTPS、FTP 等)发起网络请求,对于与第三方 API 集成和获取外部数据至关重要。
sockets 提供底层套接字通信功能,使 PHP 能够创建网络客户端和服务器。
ftp 提供访问 FTP 服务器上文件的函数,简化通过 FTP 传输文件的过程。
soap 提供构建和使用基于 SOAP 的 Web 服务的功能,简化与使用 SOAP 的遗留系统的集成。
imap 提供使用 IMAP、POP3 和 NNTP 协议与电子邮件服务器交互的函数,用于读取、撰写和发送电子邮件。
ldap 与 LDAP(轻量级目录访问协议)目录进行交互,用于管理集中式用户目录和认证。
ssh2 通过 SSH 协议进行安全的远程通信和文件传输。
amqp 与 Advanced Message Queuing Protocol(AMQP)消息队列交互。
zmq ZeroMQ 消息队列支持。
grpc 支持 gRPC 高性能远程过程调用框架。
http 提供 HTTP 消息处理、客户端请求和服务器响应功能。
smtp SMTP 邮件发送支持(部分发行版)。
oauth OAuth 认证协议支持。

三、图像处理扩展

扩展名称 作用与用法
gd 提供创建和操作图像的函数,支持多种图像格式,并提供调整大小、裁剪和绘制形状等功能。
imagick 提供对 ImageMagick 库的接口,实现高级图像处理功能,如调整大小、模糊和颜色校正。
exif 从图像中读取可交换图像文件(Exif)元数据,允许访问相机信息、方向、GPS 数据等。
gmagick 提供对 GraphicsMagick 库的接口,ImageMagick 的轻量级替代方案。
vips 与 libvips 图像处理库交互,提供快速且内存高效的大图像处理能力。

四、数据格式与编码扩展

扩展名称 作用与用法
json 提供 JavaScript Object Serialization 支持,用于 JSON 数据的编码和解码。此扩展默认启用。
xml 提供处理 XML 数据的基本工具,允许解析和验证。
simplexml 提供简单接口解析和操作 XML 文档,使处理 XML 数据变得直观且高效。
xmlreader 提供快速、非缓存的 XML 解析器,适合高效处理大型 XML 文件。
xmlwriter 通过写入器 API 创建 XML 文档,提供高效的 XML 生成。
dom 通过文档对象模型(DOM)处理 XML 文档的完整 API,简化 XML 解析和操作。
xsl 使用 XSLT 样式表转换 XML 文档,支持 XML 格式之间灵活的数据转换。
xmlrpc 支持 XML-RPC 协议的远程过程调用。
yaml 解析和生成 YAML 格式数据。
protobuf 支持 Protocol Buffers 序列化格式。
msgpack 支持 MessagePack 二进制序列化格式。
igbinary 提供替代的二进制序列化格式,减少存储空间并加快数据反序列化速度。
iconv 提供在不同字符编码之间转换的函数,确保跨各种语言和编码格式的文本兼容性。
mbstring 多字节字符串扩展,提供处理多字节编码(如 UTF-8、GBK、Shift-JIS)的功能,对于处理非 ASCII 文本至关重要。
bz2 使用 bzip2 算法启用数据压缩,减少文件大小并提高存储效率。
zip 提供创建、修改和从 ZIP 档案中提取文件的功能,简化档案管理。
zlib 使用 zlib 库进行数据压缩和解压缩,有助于减少存储空间和网络带宽。
lz4 使用 LZ4 算法提供快速压缩和解压缩,适用于需要高速数据压缩的应用。
lzf 使用 LZF 算法进行快速数据压缩。
rar 读取和解压缩 RAR 档案文件。
phar 允许将 PHP 应用程序打包到单个文件存档中,简化应用程序的发布和部署。

五、加密与安全扩展

扩展名称 作用与用法
openssl 使用 SSL 和 TLS 协议启用安全数据传输,提供加密、解密和数字证书功能。
sodium 提供现代密码学功能,用于加密、解密、密码哈希和数字签名。
hash 提供各种哈希算法(MD5、SHA1、SHA256 等),用于生成消息摘要。
mcrypt 加密扩展库,提供多种加密算法(已废弃,建议使用 OpenSSL 或 Sodium)。
gnupg GNU Privacy Guard 接口,用于加密、解密和签名。
enchant 提供拼写检查功能,支持多种词典库。
pspell 提供拼写检查功能(基于 Aspell 库)。

六、数学计算扩展

扩展名称 作用与用法
bcmath 提供任意精度算术,允许使用大数字并执行高精度数学运算,在金融应用中特别有用。
gmp 使用 GNU 多精度库提供任意精度算术函数,适合加密应用。
stats 提供统计函数(平均值、标准差、分布等)。
trader 提供技术分析指标函数,适用于金融数据分析。

七、国际化扩展

扩展名称 作用与用法
intl 提供国际化功能,包括根据区域设置格式化数字、日期和货币,以及处理不同语言的文本。
calendar 提供在不同日历格式之间转换的函数,支持儒略历、格里高利历和希伯来历等。
gettext 提供 GNU gettext 支持,用于实现多语言应用。
timezonedb 提供时区数据库,用于更新 PHP 的时区信息。

八、数据验证与过滤扩展

扩展名称 作用与用法
filter 提供简单的方法来清理和验证数据,特别是用户输入,以确保数据完整性和安全性。
ctype 提供检查字符类型的函数,用于验证和清理文本输入。

九、性能优化与调试扩展

扩展名称 作用与用法
opcache / Zend OPcache 通过缓存预编译的脚本字节码来提高 PHP 性能,减少了 PHP 在每次请求时重新编译脚本的需要。
xdebug 提供调试、堆栈跟踪、代码覆盖率分析和性能分析功能。
apcu APC User Cache,提供用户级数据缓存功能。
igbinary 高性能序列化格式,加快数据存储和读取速度。
tideways_xhprof 提供性能分析功能,用于定位 PHP 应用性能瓶颈。

十、命令行与进程控制扩展

扩展名称 作用与用法
readline 提供交互式命令行编辑功能,通过支持历史记录和行编辑增强 CLI 体验。
pcntl 启用进程控制功能,允许在 PHP 中管理并行处理和信号处理。
posix 提供类似 POSIX 的系统调用功能,用于处理进程管理和文件权限。
sysvmsg 发送和接收 System V IPC 消息,用于多个进程之间的消息传递。
sysvsem 管理 System V 信号量,用于同步多个进程。
sysvshm 读写 System V 共享内存段,用于多个进程之间共享数据。
shmop 允许 PHP 读取和写入共享内存段,用于进程间通信(IPC)。

十一、文件系统与文本处理扩展

扩展名称 作用与用法
fileinfo 根据文件签名检测文件类型,对安全检查和内容类型验证有用。
tidy 提供 HTML 文档清理和修复功能。
tokenizer 提供将 PHP 代码解析为标记的功能,用于语法高亮和静态分析。
xdiff 提供差异比较和补丁应用功能。
yaz 提供 Z39.50 协议支持,用于图书馆信息检索。

十二、队列与缓存扩展

扩展名称 作用与用法
redis 允许 PHP 与 Redis 内存数据结构存储交互,用于缓存、消息代理和实时数据处理。
memcached 提供对 Memcached 分布式内存缓存系统的访问。
memcache Memcached 的早期扩展版本(功能相对有限)。
apcu APC User Cache,提供用户级数据缓存。

十三、NoSQL 与大数据扩展

扩展名称 作用与用法
mongodb 与 MongoDB NoSQL 数据库交互。
leveldb 与 LevelDB 键值存储交互。
solr 与 Apache Solr 搜索平台交互。
elastic_apm 与 Elastic APM 应用性能监控集成。

十四、开发与框架支持扩展

扩展名称 作用与用法
ffi 外部函数接口,允许 PHP 直接调用用其他语言(如 C)编写的函数。
reflection 提供运行时类、方法、属性、参数等信息的导出和提取功能。
spl 标准 PHP 库,提供解决典型问题的一组接口与类的集合。
phalcon5 Phalcon PHP 框架的扩展版本。
psr 提供 PSR(PHP Standard Recommendations)标准接口。

十五、特定应用扩展

扩展名称 作用与用法
snmp 与 SNMP(简单网络管理协议)设备交互,用于网络管理。
rrd 与 RRDtool(Round Robin Database)交互,用于时间序列数据存储和图表生成。
inotify 提供 Linux 文件系统事件监控功能。
uploadprogress 提供文件上传进度跟踪功能。
uuid 生成和操作 UUID(通用唯一标识符)。
gender 提供性别识别功能。
geoip 根据 IP 地址获取地理位置信息。
geos 提供几何计算功能(GEOS 库接口)。
mailparse 提供邮件消息解析功能。
swoole 提供异步、并行、高性能网络通信框架。

十六、SAPI 模块

SAPI(Server API)是 PHP 与 Web 服务器交互的接口层:

模块名称 作用
apache2handler Apache 2.x Web 服务器的 PHP 处理模块(libphp.so)。
cgi / fastcgi 通用网关接口模式(php-cgi)。
cli 命令行模式(php 可执行文件)。
fpm FastCGI Process Manager(php-fpm)。
phpdbg 交互式调试器,用于 Debug PHP 程序。
embed 允许在 C/C++ 语言中调用 PHP 提供的函数。
litespeed LiteSpeed Web 服务器的 PHP 处理模块。

十七、其他实用扩展

扩展名称 作用与用法
session 在请求之间管理会话数据,简化安全存储和检索用户特定数据的过程。
date 日期和时间函数,默认编译安装。
libxml libxml 库接口,为 SimpleXML、XSLT 和 DOM 等 XML 处理扩展提供底层支持。
pcre Perl 兼容正则表达式支持。
standard 标准函数库,包含 PHP 的核心函数。
core PHP 核心扩展,提供语言基础功能。

所有扩展的详细用法

下面这一部分我仅写了一些常用的扩展的使用方法,扩展模块过多我的认知有限只能写这么多了。

一、数据库驱动扩展用法

1. MySQLi 扩展

MySQLi(MySQL Improved)是 PHP 操作 MySQL 数据库的原生扩展,支持面向对象和面向过程两种风格。

面向对象方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

if ($mysqli->connect_errno) {
die("连接失败: " . $mysqli->connect_error);
}

// 执行查询
$result = $mysqli->query("SELECT name, email FROM users LIMIT 5");

// 处理结果
while ($row = $result->fetch_assoc()) {
echo $row['name'] . " - " . $row['email'] . "\n";
}

// 使用预处理语句(防 SQL 注入)
$stmt = $mysqli->prepare("SELECT name FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$id = 1;
$stmt->execute();
$stmt->bind_result($name);
while ($stmt->fetch()) {
echo $name;
}

$mysqli->close();
?>

面向过程方式

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$conn = mysqli_connect('localhost', 'username', 'password', 'database');
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}

$result = mysqli_query($conn, "SELECT * FROM users");
while ($row = mysqli_fetch_assoc($result)) {
print_r($row);
}
mysqli_close($conn);
?>

2. PDO 及数据库驱动

PDO 提供统一的数据库访问接口,支持多种数据库驱动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// MySQL 连接
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// 预处理查询
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([1]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

// 命名参数
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute([':name' => '张三', ':email' => 'zhang@example.com']);

// 获取最后插入 ID
$lastId = $pdo->lastInsertId();

// PostgreSQL 连接
$pdoPg = new PDO('pgsql:host=localhost;dbname=test', 'user', 'pass');

// SQLite 连接
$pdoSqlite = new PDO('sqlite:/path/to/database.db');
?>

3. PgSQL 扩展

PostgreSQL 数据库的原生扩展。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$conn = pg_connect("host=localhost port=5432 dbname=mydb user=postgres password=secret");
if (!$conn) {
die("连接失败: " . pg_last_error());
}

// 执行查询
$result = pg_query($conn, "SELECT id, name FROM users");
while ($row = pg_fetch_assoc($result)) {
echo $row['name'] . "\n";
}

// 预处理语句
$result = pg_prepare($conn, "my_query", "SELECT * FROM users WHERE id = $1");
$result = pg_execute($conn, "my_query", array(1));

pg_free_result($result);
pg_close($conn);
?>

4. SQLite3 扩展

轻量级嵌入式数据库扩展。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$db = new SQLite3('database.db');

// 创建表和插入数据
$db->exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");
$db->exec("INSERT INTO users (name) VALUES ('张三')");

// 查询
$result = $db->query("SELECT * FROM users");
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
echo $row['name'] . "\n";
}

// 预处理语句
$stmt = $db->prepare("SELECT * FROM users WHERE id = :id");
$stmt->bindValue(':id', 1, SQLITE3_INTEGER);
$result = $stmt->execute();

// 内存数据库
$memoryDb = new SQLite3(':memory:');

$db->close();
?>

5. ODBC 扩展

ODBC 扩展用于连接支持 ODBC 的各类数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$conn = odbc_connect('DSN_NAME', 'username', 'password');
if (!$conn) {
die("ODBC 连接失败");
}

$result = odbc_exec($conn, "SELECT * FROM users");
while (odbc_fetch_row($result)) {
echo odbc_result($result, "name") . "\n";
}

odbc_close($conn);
?>

二、网络通信与 API 交互扩展用法

1. cURL 扩展

cURL 是最常用的网络请求扩展,支持 HTTP、HTTPS、FTP 等协议。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
// 基本 GET 请求
$curl = curl_init('https://api.example.com/users');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer your-token'
]);
$response = curl_exec($curl);

if (curl_errno($curl)) {
echo "cURL Error: " . curl_error($curl);
} else {
$data = json_decode($response, true);
print_r($data);
}
curl_close($curl);

// POST 请求
$curl = curl_init('https://api.example.com/users');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode(['name' => '张三']));
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);

// 文件下载
$curl = curl_init('https://example.com/file.zip');
$fp = fopen('local_file.zip', 'w');
curl_setopt($curl, CURLOPT_FILE, $fp);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_exec($curl);
curl_close($curl);
fclose($fp);
?>

2. Sockets 扩展

底层套接字通信功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// TCP 客户端
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("创建 socket 失败: " . socket_strerror(socket_last_error()));
}

$result = socket_connect($socket, '127.0.0.1', 8080);
if ($result === false) {
die("连接失败: " . socket_strerror(socket_last_error($socket)));
}

socket_write($socket, "Hello Server", strlen("Hello Server"));
$response = socket_read($socket, 1024);
echo "服务器响应: " . $response;

socket_close($socket);

// UDP 客户端
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_sendto($socket, "UDP 消息", strlen("UDP 消息"), 0, '127.0.0.1', 8080);
socket_recvfrom($socket, $buf, 1024, 0, $from, $port);
echo "收到: " . $buf;
socket_close($socket);
?>

3. FTP 扩展

FTP 文件传输操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$conn_id = ftp_connect('ftp.example.com');
$login_result = ftp_login($conn_id, 'username', 'password');

if (!$login_result) {
die("FTP 登录失败");
}

// 上传文件
ftp_put($conn_id, 'remote_file.txt', 'local_file.txt', FTP_BINARY);

// 下载文件
ftp_get($conn_id, 'local_file.txt', 'remote_file.txt', FTP_BINARY);

// 列出目录
$contents = ftp_nlist($conn_id, '/public');
print_r($contents);

ftp_close($conn_id);
?>

4. SOAP 扩展

SOAP Web 服务调用。

1
2
3
4
5
6
7
8
9
10
11
<?php
$client = new SoapClient('http://example.com/webservice.wsdl');

// 调用方法
$result = $client->someMethod(['param1' => 'value1', 'param2' => 'value2']);
print_r($result);

// 查看可用的方法
print_r($client->__getFunctions());
print_r($client->__getTypes());
?>

5. IMAP 扩展

电子邮件操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$mailbox = '{imap.example.com:993/imap/ssl}INBOX';
$username = 'user@example.com';
$password = 'password';

$inbox = imap_open($mailbox, $username, $password);
if (!$inbox) {
die("连接失败: " . imap_last_error());
}

// 获取邮件列表
$emails = imap_search($inbox, 'UNSEEN');
if ($emails) {
foreach ($emails as $email_num) {
$overview = imap_fetch_overview($inbox, $email_num, 0);
echo $overview[0]->subject . "\n";
}
}

imap_close($inbox);
?>

三、图像处理扩展用法

1. GD 扩展

GD 是最常用的图像处理扩展。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// 创建图像
$image = imagecreatetruecolor(200, 100);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);

// 绘制
imagefilledrectangle($image, 0, 0, 199, 99, $white);
imagestring($image, 5, 50, 40, 'Hello PHP', $black);

// 输出
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

// 图像缩放
$src = imagecreatefromjpeg('photo.jpg');
$width = imagesx($src);
$height = imagesy($src);
$dst = imagecreatetruecolor($width / 2, $height / 2);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $width / 2, $height / 2, $width, $height);
imagejpeg($dst, 'thumbnail.jpg');
imagedestroy($src);
imagedestroy($dst);
?>

2. Imagick 扩展

ImageMagick 高级图像处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$image = new Imagick('photo.jpg');

// 缩放
$image->resizeImage(100, 100, Imagick::FILTER_LANCZOS, 1);

// 添加水印
$watermark = new Imagick('watermark.png');
$image->compositeImage($watermark, Imagick::COMPOSITE_OVER, 10, 10);

// 转换格式
$image->setImageFormat('png');
$image->writeImage('output.png');

// 裁剪
$image->cropImage(100, 100, 10, 10);

$image->destroy();
?>

3. EXIF 扩展

读取图像元数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$exif = exif_read_data('photo.jpg');
if ($exif) {
echo "相机: " . ($exif['Make'] ?? '') . "\n";
echo "型号: " . ($exif['Model'] ?? '') . "\n";
echo "拍摄时间: " . ($exif['DateTimeOriginal'] ?? '') . "\n";
echo "GPS 纬度: " . ($exif['GPSLatitude'] ?? '') . "\n";
echo "GPS 经度: " . ($exif['GPSLongitude'] ?? '') . "\n";
}

// 提取缩略图
$thumb = exif_thumbnail('photo.jpg');
if ($thumb) {
file_put_contents('thumb.jpg', $thumb);
}
?>

四、数据格式与编码扩展用法

1. JSON 扩展

JSON 编解码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// 编码
$data = ['name' => '张三', 'age' => 30, 'skills' => ['PHP', 'JavaScript']];
$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;

// 解码
$jsonStr = '{"name":"张三","age":30}';
$array = json_decode($jsonStr, true);
$object = json_decode($jsonStr); // 返回 stdClass 对象

// 错误处理
if (json_last_error() !== JSON_ERROR_NONE) {
echo "JSON 错误: " . json_last_error_msg();
}
?>

2. XML 扩展系列

SimpleXML:简单 XML 解析。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$xml = simplexml_load_string('<user><name>张三</name><age>30</age></user>');
echo $xml->name . "\n";
echo $xml->age . "\n";

// 解析 XML 文件
$xml = simplexml_load_file('data.xml');
foreach ($xml->children() as $child) {
echo $child->getName() . ": " . $child . "\n";
}

// 创建 XML
$xml = new SimpleXMLElement('<root/>');
$xml->addChild('user', '张三');
$xml->user->addAttribute('id', 1);
echo $xml->asXML();
?>

DOM 扩展:完整的 DOM API。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = true;

$root = $doc->createElement('users');
$doc->appendChild($root);

$user = $doc->createElement('user');
$user->setAttribute('id', 1);
$name = $doc->createElement('name', '张三');
$user->appendChild($name);
$root->appendChild($user);

$xml = $doc->saveXML();
echo $xml;
?>

XMLReader:高效读取大型 XML。

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$reader = new XMLReader();
$reader->open('large.xml');

while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'user') {
$node = new SimpleXMLElement($reader->readOuterXML());
echo $node->name . "\n";
}
}
$reader->close();
?>

3. Mbstring 扩展

多字节字符串处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$str = "你好世界 Hello World";

echo mb_strlen($str, 'UTF-8') . "\n"; // 18
echo mb_substr($str, 0, 4, 'UTF-8') . "\n"; // 你好世界
echo mb_strtoupper($str, 'UTF-8') . "\n";
echo mb_strpos($str, 'World', 0, 'UTF-8') . "\n";

// 编码转换
$gbk = mb_convert_encoding($str, 'GBK', 'UTF-8');
$utf8 = mb_convert_encoding($gbk, 'UTF-8', 'GBK');

// 检测编码
$encoding = mb_detect_encoding($str, ['UTF-8', 'GBK', 'BIG5']);
echo $encoding . "\n";
?>

4. Zip 扩展

ZIP 档案操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
// 创建 ZIP
$zip = new ZipArchive();
if ($zip->open('archive.zip', ZipArchive::CREATE) === TRUE) {
$zip->addFile('file1.txt', 'file1.txt');
$zip->addFile('file2.jpg', 'images/photo.jpg');
$zip->addEmptyDir('docs');
$zip->addFromString('readme.txt', '这是说明文件');
$zip->close();
}

// 解压 ZIP
$zip = new ZipArchive();
if ($zip->open('archive.zip') === TRUE) {
$zip->extractTo('extract_folder/');
$zip->close();
}

// 读取 ZIP 内容
$zip = new ZipArchive();
if ($zip->open('archive.zip') === TRUE) {
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
echo $stat['name'] . " - " . $stat['size'] . "\n";
}
$zip->close();
}
?>

5. Zlib 扩展

数据压缩。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$data = "这是需要压缩的数据,重复重复再重复。";

// 压缩
$compressed = gzcompress($data, 9);
$encoded = base64_encode($compressed);
echo "压缩后大小: " . strlen($encoded) . "\n";

// 解压
$decoded = base64_decode($encoded);
$uncompressed = gzuncompress($decoded);
echo $uncompressed . "\n";

// gzip 文件操作
$fp = gzopen('file.gz', 'w9');
gzwrite($fp, $data);
gzclose($fp);
?>

五、加密与安全扩展用法

1. OpenSSL 扩展

SSL/TLS 安全通信。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// 加密/解密
$data = "敏感数据";
$key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(16);

$encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
$decrypted = openssl_decrypt($encrypted, 'aes-256-cbc', $key, 0, $iv);

echo $decrypted . "\n";

// 签名/验证
$privateKey = openssl_pkey_get_private('file://private.pem');
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);

$publicKey = openssl_pkey_get_public('file://public.pem');
$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);
echo $valid ? '签名有效' : '签名无效';
?>

2. Sodium 扩展

现代密码学。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// 密码哈希
$password = 'user_password';
$hash = sodium_crypto_pwhash_str(
$password,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);

if (sodium_crypto_pwhash_str_verify($hash, $password)) {
echo "密码验证成功\n";
}

// 对称加密
$key = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$message = '机密消息';
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
echo $plaintext . "\n";
?>

3. Hash 扩展

哈希函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
echo md5('hello') . "\n";
echo sha1('hello') . "\n";
echo hash('sha256', 'hello') . "\n";

// 支持的算法列表
$algorithms = hash_algos();
print_r($algorithms);

// HMAC
$hmac = hash_hmac('sha256', 'message', 'secret_key');
echo $hmac . "\n";

// 文件哈希
echo hash_file('md5', 'file.txt') . "\n";
?>

六、数学计算扩展用法

1. BCMath 扩展

任意精度算术。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// 高精度加法
$result = bcadd('1.23456789', '9.87654321', 8);
echo $result . "\n"; // 11.11111110

// 乘法
$result = bcmul('999999999.99', '888888888.88', 2);
echo $result . "\n";

// 除法
$result = bcdiv('10', '3', 4);
echo $result . "\n"; // 3.3333

// 比较
$cmp = bccomp('1.5', '1.2', 1);
echo $cmp . "\n"; // 1

// 幂运算
$pow = bcpow('2', '10');
echo $pow . "\n"; // 1024

// 平方根
$sqrt = bcsqrt('16', 0);
echo $sqrt . "\n"; // 4
?>

2. GMP 扩展

GNU 多精度算术。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// 大整数运算
$a = gmp_init('999999999999999999');
$b = gmp_init('888888888888888888');
$sum = gmp_add($a, $b);
echo gmp_strval($sum) . "\n";

// 阶乘
$fact = gmp_fact(100);
echo gmp_strval($fact) . "\n";

// 素数检测
$prime = gmp_init('17');
echo gmp_prob_prime($prime) . "\n"; // 2 (可能是素数)

// 随机数
$rand = gmp_random_range(1, 100);
echo gmp_strval($rand) . "\n";
?>

3. Stats 扩展

统计函数。

1
2
3
4
5
6
7
<?php
$data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
echo "平均值: " . stats_mean($data) . "\n";
echo "标准差: " . stats_standard_deviation($data) . "\n";
echo "方差: " . stats_variance($data) . "\n";
echo "中位数: " . stats_median($data) . "\n";
?>

七、国际化扩展用法

1. Intl 扩展

国际化功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// 数字格式
$formatter = new NumberFormatter('zh_CN', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency(1234.56, 'CNY') . "\n"; // ¥1,234.56

// 日期格式
$dateFormatter = new IntlDateFormatter(
'zh_CN',
IntlDateFormatter::LONG,
IntlDateFormatter::SHORT
);
echo $dateFormatter->format(new DateTime()) . "\n";

// 信息格式
$msgFormatter = new MessageFormatter('zh_CN', '{0} 于 {1,date} 完成');
echo $msgFormatter->format(['任务', time()]) . "\n";

// 字符串比较
$collator = Collator::create('zh_CN');
$result = $collator->compare('张三', '李四');
echo $result . "\n";

// 拼音处理(需要编译时启用)
$trans = Transliterator::create('Any-Latin; Latin-ASCII');
echo $trans->transliterate('中文拼音') . "\n";
?>

2. GetText 扩展

多语言支持。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
putenv('LC_ALL=zh_CN.UTF-8');
setlocale(LC_ALL, 'zh_CN.UTF-8');
bindtextdomain('messages', './locale');
textdomain('messages');

// 翻译字符串
echo _('Hello World') . "\n";
echo gettext('Welcome') . "\n";

// 复数形式
echo ngettext('1 item', '%d items', 5) . "\n";
?>

八、性能优化扩展用法

1. OPcache 扩展

PHP 字节码缓存。

1
2
3
4
5
6
7
; php.ini 配置
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0 ; 生产环境建议关闭
opcache.revalidate_freq=0 ; 生产环境建议设为 0
1
2
3
4
5
6
7
8
9
10
11
12
<?php
// 清除缓存
opcache_reset();

// 查看缓存状态
$status = opcache_get_status();
echo "缓存的文件数: " . $status['opcache_statistics']['num_cached_scripts'] . "\n";

// 查看配置
$config = opcache_get_configuration();
print_r($config);
?>

2. APCu 扩展

用户数据缓存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// 存储
apcu_store('key', 'value', 3600);
apcu_store('user', ['name' => '张三', 'age' => 30]);

// 读取
$value = apcu_fetch('key');
if ($value === false) {
// 缓存未命中
}

// 删除
apcu_delete('key');

// 清空
apcu_clear_cache();

// 检查是否存在
if (apcu_exists('key')) {
echo "存在\n";
}

// 统计信息
$info = apcu_cache_info();
print_r($info);
?>

九、队列与缓存扩展用法

1. Redis 扩展

Redis 内存数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('password'); // 如有密码

// 字符串操作
$redis->set('key', 'value');
$redis->setex('expiring_key', 60, 'value');
echo $redis->get('key') . "\n";

// 哈希操作
$redis->hSet('user:1', 'name', '张三');
$redis->hSet('user:1', 'age', 30);
$user = $redis->hGetAll('user:1');

// 列表操作
$redis->lPush('queue', 'task1');
$redis->rPush('queue', 'task2');
$task = $redis->rPop('queue');

// 集合操作
$redis->sAdd('tags:php', 'web', 'backend');
$members = $redis->sMembers('tags:php');

// 有序集合
$redis->zAdd('rank', 1, 'user_a');
$redis->zAdd('rank', 2, 'user_b');
$top = $redis->zRange('rank', 0, 9, true);

// 发布/订阅
$redis->publish('channel', 'message');

// 管道(批量执行)
$redis->multi();
$redis->set('a', 1);
$redis->set('b', 2);
$results = $redis->exec();

$redis->close();
?>

2. Memcached 扩展

分布式缓存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$memcached = new Memcached();
$memcached->addServer('127.0.0.1', 11211);

// 存储
$memcached->set('key', 'value', 3600);
$memcached->setMulti(['a' => 1, 'b' => 2]);

// 读取
$value = $memcached->get('key');
$values = $memcached->getMulti(['a', 'b']);

// 原子操作
$memcached->add('counter', 0);
$memcached->increment('counter');
$memcached->decrement('counter');

// 删除
$memcached->delete('key');

// CAS(乐观锁)
$cas = 0;
$value = $memcached->get('key', null, $cas);
$memcached->cas($cas, 'key', 'new_value');

$memcached->quit();
?>

十、NoSQL 扩展用法

1. MongoDB 扩展

MongoDB NoSQL 数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
$client = new MongoDB\Client('mongodb://localhost:27017');

// 选择数据库和集合
$db = $client->mydb;
$collection = $db->users;

// 插入
$result = $collection->insertOne(['name' => '张三', 'age' => 30]);
$id = $result->getInsertedId();

// 插入多条
$result = $collection->insertMany([
['name' => '李四', 'age' => 25],
['name' => '王五', 'age' => 35]
]);

// 查询
$documents = $collection->find(['age' => ['$gt' => 20]]);
foreach ($documents as $doc) {
echo $doc['name'] . "\n";
}

// 更新
$collection->updateOne(
['name' => '张三'],
['$set' => ['age' => 31]]
);

// 删除
$collection->deleteOne(['name' => '张三']);

// 聚合
$pipeline = [
['$match' => ['age' => ['$gt' => 20]]],
['$group' => ['_id' => '$age', 'count' => ['$sum' => 1]]]
];
$result = $collection->aggregate($pipeline);
?>

十一、扩展的安装与启用方法

查看已安装扩展

1
2
3
4
5
6
7
8
9
10
11
12
<?php
// 查看所有已加载扩展
print_r(get_loaded_extensions());

// 检查特定扩展是否加载
if (extension_loaded('mysqli')) {
echo "MySQLi 扩展已加载\n";
}

// 查看详细 PHP 信息
phpinfo();
?>

命令行方式:

1
2
php -m
php -i | grep extension

安装扩展

Linux 包管理器方式

1
2
3
4
5
6
7
8
# Debian/Ubuntu
sudo apt-get install php-mysqli php-curl php-gd php-mbstring

# CentOS/RHEL
sudo yum install php-mysqli php-curl php-gd php-mbstring

# Fedora
sudo dnf install php-mysqli php-curl php-gd php-mbstring

PECL 方式

1
2
3
sudo pecl install redis
sudo pecl install mongodb
sudo pecl install imagick

Windows 方式:在 php.ini 中取消扩展注释。

1
2
3
extension=mysqli
extension=curl
extension=gd

启用扩展

php.ini 中添加或取消注释:

1
2
3
4
5
6
7
; 启用扩展(推荐方式,PHP 7.2+)
extension=mysqli
extension=curl

; 或使用完整文件名
extension=php_mysqli.dll ; Windows
extension=mysqli.so ; Linux

PIE:下一代扩展管理工具

PIE(PHP Installer for Extensions)是新一代 PHP 扩展安装工具,旨在取代 PECL,解决 PECL 维护困难、依赖管理不足等问题。

1
2
# 使用 PIE 安装扩展
pie install asgrim/example_pie_extension

PIE 支持通过 Composer 管理扩展依赖,可以将扩展像普通 PHP 包一样声明在 composer.json 中。

总结

本文系统梳理了 PHP 各类扩展的完整列表和详细代码用法,涵盖了数据库驱动、网络通信、图像处理、数据格式、加密安全、数学计算、国际化、性能优化、队列缓存、NoSQL 等主要扩展类别。

PHP 扩展的使用核心要点可归纳为:

  1. 选择合适的扩展:根据项目需求选择扩展,MySQLi 适合 MySQL 专属项目,PDO 适合跨数据库项目
  2. 安全使用:数据库操作使用预处理语句防止 SQL 注入,加密使用 OpenSSL 或 Sodium
  3. 性能优化:使用 OPcache 缓存字节码,使用 Redis/Memcached 缓存数据
  4. 安装与管理:优先使用系统包管理器,其次选择 PECL,新项目可评估 PIE 工具

掌握这些扩展的使用方法,能够帮助开发者构建功能丰富、性能优良、安全可靠的 PHP 应用。