如何在PHP内置开发服务器中正常加载使用Zend extension
问题核心原因
PHP 内置开发服务器采用 prefork 多进程架构:主进程仅负责端口监听、worker 进程调度,不会处理实际的业务请求;所有请求由 fork 出来的 worker 进程处理。
你通过命令行 -z 参数传递的 Zend 扩展加载指令,仅会在主进程启动阶段生效,worker 进程初始化时默认不会继承命令行传入的 -z 参数,只会读取 php.ini 中配置的扩展加载项,因此你在各个钩子中埋的日志逻辑都不会被触发。
解决方法
方法1:修改全局php.ini配置(最稳妥)
- 执行
php --ini找到当前加载的 php.ini 绝对路径 - 在 php.ini 末尾添加一行配置:
zend_extension = /path/to/my/extension.so
- 执行
php -v确认扩展加载成功后,直接启动内置服务器即可:
php -S localhost:8080 script.php
方法2:指定自定义ini文件(适合开发测试场景,不污染全局配置)
单独编写测试用的ini文件(例如 test_php.ini),仅需写入扩展加载配置:
zend_extension = /path/to/my/extension.so
启动服务器时通过 -c 参数指定自定义ini文件即可:
php -c /path/to/test_php.ini -S localhost:8080 script.php
方法3:通过-d参数动态指定配置(无需修改文件)
直接通过 -d 指令传递zend扩展加载配置,兼容性比 -z 参数更好,会被worker进程继承:
php -d zend_extension=/path/to/my/extension.so -S localhost:8080 script.php
验证方法
修改完配置后,先访问一次服务器地址,再检查你在钩子中定义的日志文件是否有写入,即可确认扩展是否正常生效。
内容的提问来源于stack exchange,提问作者ddavella
相关产品推荐
相关产品推荐

