我在PHP中加载了自定义C扩展,在扩展内部有一个函数做这样的事情
void a() {
printf("abc");
}
Run Code Online (Sandbox Code Playgroud)
我可以a()在CLI模式(命令行)中调用没有问题,abc并按预期获得输出.但是当我在PHP-FPM模式的Yii项目中再次尝试时,我无法获得该输出.
我确信的是:
ob_end_clean()在调用之前调用a()了两次,第一次调用return true,第二次调用返回false.所以我的问题是:
我应该从PHP-FPM模式的扩展中获得输出吗?
如果是这样,我如何捕获输出,或者请给我一些调试建议.
当PHP作为Web服务器模块运行时,stdout将重定向到最初启动Web服务器进程的终端.在生产服务器上,此类终端未处于活动状态,因此您发送到stdout的任何输出都将丢失.
尝试 php_printf()函数而不是printf()一个
可能这篇文章可以帮助你https://devzone.zend.com/317/extension-writing-part-ii-parameters-arrays-and-zvals/