扩展注意事项
因为是静态编译,扩展不会 100% 完美编译,而且不同扩展对 PHP、环境都有不同的要求,这里将一一列举。
curl
使用 curl 请求 HTTPS 时,可能存在 error:80000002:system library::No such file or directory
错误, 解决办法详见 FAQ - 无法使用 ssl。
phpmicro
- phpmicro SAPI 仅支持 PHP >= 8.0 版本。
swoole
- swoole >= 5.0 版本仅支持 PHP >= 8.0 版本。
- swoole 目前不支持 PHP 8.0 版本 curl 的 hook(后续有可能会修复)。
- 编译时只包含
swoole
扩展时不会完整开启支持的 Swoole 数据库协程 hook,如需使用请加入对应的swoole-hook-xxx
扩展。 - swoole 在部分扩展组合下可能出现
zend_mm_heap corrupted
问题,暂未找到是什么原因导致的。
swoole-hook-pgsql
swoole-hook-pgsql 不是一个扩展,而是 Swoole 的 Hook 特性。 如果你在编译时添加了 swoole,swoole-hook-pgsql
,你将启用 Swoole 的 PostgreSQL 客户端和 pdo_pgsql
扩展的协程模式。
swoole-hook-pgsql 与 pdo_pgsql
扩展冲突。如需使用 Swoole 和 pdo_pgsql
,请删除 pdo_pgsql 扩展,启用 swoole
和 swoole-hook-pgsql
即可。 该扩展包含了 pdo_pgsql
的协程环境的实现。
在 macOS 系统,pdo_pgsql
可能无法正常连接到 postgresql 服务器,请谨慎使用。
swoole-hook-mysql
swoole-hook-mysql 不是一个扩展,而是 Swoole 的 Hook 特性。 如果你在编译时添加了 swoole,swoole-hook-mysql
,你将启用 Swoole 的 mysqlnd
和 pdo_mysql
的协程模式。
swoole-hook-sqlite
swoole-hook-sqlite 不是一个扩展,而是 Swoole 的 Hook 特性。 如果你在编译时添加了 swoole,swoole-hook-sqlite
,你将启用 Swoole 的 pdo_sqlite
的协程模式(Swoole 必须为 5.1 以上)。
swoole-hook-sqlite 与 pdo_sqlite
扩展冲突。如需使用 Swoole 和 pdo_sqlite
,请删除 pdo_sqlite 扩展,启用 swoole
和 swoole-hook-sqlite
即可。 该扩展包含了 pdo_sqlite
的协程环境的实现。
swow
- swow 仅支持 PHP 8.0 ~ 8.4 版本。
imap
- 该扩展目前不支持 Kerberos。
- 由于底层的 c-client、ext-imap 不是线程安全的。 无法在
--enable-zts
构建中使用它。 - 由于该扩展可能会从未来的 PHP 中删除,因此我们建议您寻找替代实现,例如 Webklex/php-imap。
gd
- gd 扩展依赖了较多的额外图形库,默认情况下,直接使用
bin/spc build gd
不会引入和支持部分图形库,例如libjpeg
、libavif
等, 需要使用--with-libs
参数补全。目前支持freetype,libjpeg,libavif,libwebp
四个库的支持,所以这里可以使用以下命令来让 gd 库引入它们:
bin/spc build gd --with-libs=freetype,libjpeg,libavif,libwebp --build-cli
mcrypt
- 目前未支持,未来也不计划支持此扩展。#32
oci8
- oci8 是 Oracle 数据库的扩展,因为 Oracle 提供的扩展所依赖的库未提供静态编译版本(
.a
)或源代码,无法使用静态链接的方式将此扩展编译到 php 内,故无法支持。
xdebug
- Xdebug 是一个 Zend 扩展,Xdebug 的功能依赖于 PHP 的 Zend 引擎和底层代码,如果要将其静态编译到 PHP 中,可能需要巨量的 patch 代码,这是不可行的。
- macOS 平台可以通过在相同平台编译的 PHP 下编译一个 xdebug 扩展,并提取其中的
xdebug.so
文件,再在 static-php-cli 中使用--no-strip
参数保留调试符号表,同时加入ffi
扩展。 编译的./php
二进制可以通过指定 INI 配置并运行,例如./php -d 'zend_extension=xdebug.so' your-code.php
。
xml
- xml包括 xmlreader、xmlwriter、dom、simplexml 等,添加 xml 扩展时最好同时启用这些扩展。
- libxml 包含在 xml 扩展中。 启用 xml 相当于启用 libxml。
glfw
- glfw 扩展依赖 OpenGL,在 Linux 平台还依赖 X11 等环境,这些库都无法被轻易地动态链接。
- 在 macOS 系统下,我们可以动态链接系统的 OpenGL 和一些相关的库。
rar
- rar 扩展目前在 macOS x86_64 环境下与
common
扩展集合编译 phpmicro 存在问题。
pgsql
pgsql ssl 连接与 openssl 3.2.0 不兼容。相关链接:
https://github.com/Homebrew/homebrew-core/issues/155651https://github.com/Homebrew/homebrew-core/pull/155699https://github.com/postgres/postgres/commit/c82207a548db47623a2bfa2447babdaa630302b9
pgsql 16.2 修复了这个 Bug,现在正常工作了。
在 pgsql 使用 SSL 连接时,可能存在 error:80000002:system library::No such file or directory
错误, 解决办法详见 FAQ - 无法使用 ssl。
openssl
使用基于 openssl 的扩展(如 curl、pgsql 等网络库)时,可能存在 error:80000002:system library::No such file or directory
错误, 解决办法详见 FAQ - 无法使用 ssl。
password-argon2
- password-argon2不是一个标准的扩展,它是
password_hash
函数的额外算法。 - 在Linux系统,password-argon2 的依赖库
libargon2
与libsodium
库冲突。
ffi
- 因为 Linux 系统的限制,虽然可以成功编译 ffi 扩展,但无法使用它加载其他
so
扩展。Linux 支持加载 so 扩展的前提是非静态编译,但动态编译和本项目的目的冲突。 - macOS 支持 ffi 扩展,但是部分内核下不包含调试符号时会出现错误。
- Windows 支持 ffi 扩展。
xhprof
xhprof 扩展包含三部分:xhprof_extension
、xhprof_html
、xhprof_libs
。编译的二进制中只包含 xhprof_extension
。 如果需要使用 xhprof,请到 pecl.php.net/package/xhprof 下载源码,指定 xhprof_libs
和 xhprof_html
路径来使用。
event
event 扩展在 macOS 系统下编译后暂无法使用 openpty
特性。相关 Issue:
parallel
parallel 扩展只支持 PHP 8.0 及以上版本,并只支持 ZTS 构建(--enable-zts
)。