我找到了答案。
php-fpm模式下的Class 'Kafka' not found
错误是由php-fpm无法加载Kafka扩展引起的。虽然我在php.ini
中加extension=kafka.so
。但是在加载扩展时出现了一些错误。
我发现原因是使用dl
来手动加载扩展,并在响应中得到错误。为什么php-fpm在加载扩展的过程中出现一些错误时保持沉默。也许我错过了一些配置?
无论如何,原因被发现。当加载扩展卡夫卡时,Php-fpm无法加载librdkafka。 librdkafka位于目录/usr/local/lib
中,它不在红帽子的ld搜索路径中。检查/etc/ld.so.conf以查找您的搜索路径。
将/usr/local/lib
添加到/etc/ld.so.conf并运行ldconfig解决问题。
cli模式工作的原因是因为变量$ LD_LIBRARY_PATH =“/ usr/local/lib”。
有关加载过程的详细信息,请this link
要搜索存储在文件/etc/ld.so.conf中的目录列表。许多源自Red Hat的发行版通常不在文件/etc/ld.so.conf中包含/ usr/local/lib。我认为这是一个bug,并且将/ usr/local/lib添加到/etc/ld.so.conf是在Red Hat派生系统上运行许多程序所需的常见“修复”。
在程序启动时搜索所有这些目录会非常低效,所以实际上使用了缓存安排。默认情况下,程序ldconfig(8)读入文件/etc/ld.so.conf,在动态链接目录中设置适当的符号链接(这样它们将遵循标准约定),然后将缓存写入/ etc/ld.so.cache然后被其他程序使用。这极大地加速了对图书馆的访问。这意味着无论何时添加DLL,删除DLL或DLL目录集发生更改时都必须运行ldconfig;运行ldconfig通常是程序包管理员在安装库时执行的步骤之一。然后,在启动时,动态加载器实际上使用文件/etc/ld.so.cache,然后加载它所需的库。
安装在github引导menthioned大约运行ldconfig,但红色的帽子有特殊situatiion的lib目录不在ld的配置文件。