【发布时间】:2018-07-18 18:25:39
【问题描述】:
我在我的 PHP 中加载了一个自定义 C 扩展,并且在扩展内部有一个函数可以执行类似的操作
void a() {
printf("abc");
}
我可以在 CLI 模式(命令行)下毫无问题地调用 a(),并按预期得到输出 abc。但是当我在我们的 Yii 项目中以 PHP-FPM 模式再次尝试时,我无法得到那个输出。
我确定的是:
- 扩展已加载。
- 函数调用成功,没有错误。
- PHP 输出缓冲已关闭。我在调用
a()之前调用了两次ob_end_clean(),第一次调用返回true,第二次返回false。
所以我的问题是:
我应该在 PHP-FPM 模式下从扩展中获取输出吗?
如果是这样,我该如何捕获输出,或者请给我一些调试建议。
【问题讨论】:
-
当您说“我确定的是:- 扩展程序已加载。”你的意思是你已经在你的 yii 项目下的一个网页上回显了 phpinfo 并找到了你的扩展。
-
@KamalSoni 是的。实际上,扩展中有几个功能。除了我无法获得
printf输出的问题之外,它们在 Yii 项目中都工作正常 -
好的很好@Lution我认为你可以通过做几件事来调试它可能会对你有所帮助。 1)首先,我认为您的 printf 函数签名看起来不正确。它应该只有一个或多个参数。可以尝试打印。 2) 创建 void b() {printf("abc");} 并查看是否得到任何调用 b 而不是 a 的内容。同样在每次更改后,值得重新启动 php-fpm。
标签: php php-extension