PHP 扩展开发和管理的流程在多年来通过 PECL(PHP 扩展社区库)得到了显著的优化。为了继续提升开发者体验,PIE 的出现为此带来了新的可能性。
在 23 年 12 月份,PHP 邮件列表收到了由 Derick 发送的一封新邮件:New "PECL"
。
在 PHP 基金会内部,已经讨论了一段时间如何处理 PECL 及其网站,PECL 的现状是代码老旧,难以维护,数据库中充满了乱码。查看邮件原文
什么是 PECL
PECL(PHP Extension Community Library)是一个专门用于托管和管理 PHP 扩展的社区库。PHP 扩展是一种用来增强 PHP 核心功能的模块,开发者可以通过这些扩展来实现额外的功能,比如数据库驱动、图像处理、缓存系统、加密工具等。
PECL 提供了一个集中化的目录,开发者可以浏览、下载和安装各种扩展。它还为开发者提供了扩展的开发和托管设施,使得社区能够参与扩展的维护和改进。许多 PHP 扩展的源代码都托管在 PECL 上,开发者可以在其基础上进行二次开发。
PECL 的打包和分发系统与 PEAR(PHP Extension and Application Repository)共享。PEAR 主要面向可重用的 PHP 库和组件,而 PECL 则专注于底层扩展。两者都使用相同的包管理工具来简化安装和管理过程。PECL 扩展可以通过 pecl
命令行工具直接安装,这极大地方便了开发者的使用。
通过 PECL,PHP 开发者可以快速找到并集成高质量的扩展,提升 PHP 应用的性能和功能。
前往 PECL 官网了解更多信息。
对于扩展开发者,发布版本的时候,需要登录 PECL 网站,并将打包好的 zip 包上传到 PECL,而且只能 lead
角色上传,developer
角色是无法上传的。
对于用户,PECL 也是一种过时的安装方式,而通过 Composer 处理用户空间代码要容易得多
所以才有了本篇文章要介绍的 PIE,用于替代 PECL
什么是 PIE
PIE(PHP Installer for Extensions) 是一个全新的工具,专为 PHP 开发者设计,目的是提供一个更轻量、更现代化的 PHP 扩展管理方式。它采用模块化设计,能够方便地添加、管理和部署 PHP 扩展。相比 PECL,PIE 的安装和使用过程更加流畅,具有更好的用户体验。
使用 PIE 的优势
与传统的 PECL 相比,PIE 更注重简洁和现代化的设计。其轻量级架构不仅减少了开发者的维护成本,还使得扩展的安装速度和稳定性得到了提升。
扩展开发者只需要在项目中增加composer.json
,声明一些安装选项等,并提交到 Packagist 即可。
下载安装 PIE
需要 PHP 8.1 或更新版本才能运行 PIE,但 PIE 可以为任何已安装的 PHP 版本安装扩展。
wget https://github.com/php/pie/releases/download/0.1.0/pie.phar
sudo chmod +x pie.phar
sudo mv pie.phar /usr/local/bin/pie
两种命令,二选一即可。
sudo curl -L --output /usr/local/bin/pie https://github.com/php/pie/releases/download/0.1.0/pie.phar && sudo chmod +x /usr/local/bin/pie
目前发布了 0.1.0 的预览版,所以本文使用 0.1.0 的下载地址,等正式版本发布后,可以使用
https://github.com/php/pie/releases/latest/download/pie.phar
此链接下载。
下载、构建或安装扩展
PIE 可以:
- 只下载一个扩展,使用
pie download
- 下载并构建扩展,使用
pie build
- 最常见的是:下载、构建和安装扩展,使用
pie install
使用 PIE 安装扩展时,必须使用其 Composer 软件包名称,可以在 https://packagist.org/extensions 上找到与 PIE 兼容的软件包列表。
知道扩展名称后,就可以使用下面的命令进行安装:
pie install <vendor>/<package>
# 举个例子
pie install apcu/apcu
在为不同的 PHP 版本安装扩展时,可以通过指定php-config
来进行:
pie install --with-php-config=/usr/bin/php-config7.4 apcu/apcu
版本约束和 composer 是一样的,了解更多可以查看:Composer 进阶使用之版本约束表达式的使用
pie install <vendor>/<package>:<version-constraint>
编译扩展时,有些扩展需要向 ./configure
命令传递额外的参数。
这些参数通常用于启用或禁用某些功能,或提供未自动检测到的库的路径。
为了确定扩展可用的配置选项,可以使用pie info <vendor>/<package>
将返回列表,例如:
$ pie info apcu/apcu
You are running PHP 8.2.10
Target PHP installation: 8.2.10 nts, on Linux/OSX/etc x86_64 (from /usr/local/Cellar/php/8.2.10/bin/php)
Found package: apcu/apcu:v5.1.24 which provides ext-apcu
Extension name: apcu
Extension type: php-ext (PhpModule)
Composer package name: apcu/apcu
Version: v5.1.24
Download URL: https://api.github.com/repos/krakjoe/apcu/zipball/62e67989a35247263c370b5ecebb4e69b73b0709
Configure options:
--disable-apcu-mmap (Disable mmap, falls back on shm)
--disable-apcu-rwlocks (Disable rwlocks in APCu)
--disable-valgrind-checks (Disable Valgrind-based memory checks)
--enable-apcu (Enable APCu support)
--enable-apcu-clear-signal (Enable SIGUSR1 clearing handler)
--enable-apcu-debug (Enable APCu debugging)
--enable-apcu-spinlocks (Use spinlocks before flocks)
--enable-coverage (Include code coverage symbols (DEVELOPERS ONLY!!))
需要注意的是,目前,PIE 不会配置 INI 文件,但很快会进行改进,需要手动给对应的php.ini
中添加extension=
这些内容对于普通用户来说已经够用了,而对于扩展开发者来说,需要给项目中添加composer.json
来让 PIE 能够索引和下载,具体可以查看面向扩展维护者的 PIE
并且我也给 Swoole 添加了 PIE 支持:composer.json,但对于像 Swow 这种已经自己实现了安装脚本,并且也是使用 composer 进行管理的,应该并不会使用 PIE,或者可能存在冲突,所以还是先观望吧
pie install swow/swow
composer require swow/swow
./vendor/bin/swow-builder --install
结语
PIE 0.1.0 的发布标志着 PHP 扩展管理进入了一个新阶段。它为开发者提供了更加轻松的工具集,让扩展的管理、安装和部署更加高效。PIE 将逐步替代 PECL,成为 PHP 社区中的主流工具。
通过 PIE,PHP 开发者能够更加专注于代码本身,而不再需要为复杂的扩展管理流程而烦恼。
看前面以为是 Composer Vendor 一样的原生 PHP 代码。看后面发现也能编译 C 扩展。那好像不错。
@dujun 就是为了C扩展而生的