我在我的 PHP 中加载了一个自定义的 C 扩展,在扩展中有一个函数执行类似这样的操作
void a() {
printf("abc");
}
我可以在 CLI 模式(命令行)下毫无问题地调用 a()
并按预期获得输出 abc
。但是当我在我们的 Yii 项目中以 PHP-FPM 模式再次尝试时,我无法得到那个输出。
我确定的是:
- 已加载扩展程序。
- 函数调用成功,没有错误。
- PHP 输出缓冲已关闭。在调用
a()
之前,我调用了两次ob_end_clean()
,第一次调用返回true
,第二次返回false
.
所以我的问题是:
我应该在 PHP-FPM 模式下从扩展中获取输出吗?
如果是这样,我如何捕获输出,或者请给我一些调试建议。
最佳答案
当 PHP 作为网络服务器模块运行时,标准输出被重定向到最初启动网络服务器进程的终端。在生产服务器上,这样的终端不活动,因此您发送到标准输出的任何输出都将丢失。
尝试使用 php_printf() 函数代替 printf()
或许这篇文章可以帮到你https://devzone.zend.com/317/extension-writing-part-ii-parameters-arrays-and-zvals/
关于php - 使用 PHP-FPM 时如何捕获 PHP 扩展的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48681163/