无法加载 pdo_sqlite.so 扩展

Sam*_*ner 5 php sqlite pdo

我正在尝试为 cli 安装 pdo-sqlite ext。

我试过运行sudo apt-get install php5-sqlite,它说 ext 已经是最新的,但是当我运行时php -m它没有出现在列表中。

在我的 /usr/lib/php/ 文件夹中,我有 2 个文件夹,分别命名为 20131226 和 20160303。后一个(20160303)包含 pdo_sqlite.so 但是当我尝试将其添加到 php.ini 文件时,我收到错误

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/pdo_sqlite.so' - /usr/lib/php/20160303/pdo_sqlite.so: undefined symbol: zend_fetch_resource2_ex in Unknown on line 0

我正在运行 ubuntu 14.04 和 php 5.6。

有没有人能够帮助解决这个问题?也有人能够解释为什么 php 扩展名存储在这些不同编号的文件夹中,以及 php 如何知道要查看哪个?谢谢。

Inc*_*ony 6

我知道这个问题已经回答了,但其他人可能和我有同样的问题。我希望这对某人有所帮助,因为我在这上面花了三天时间。

据我所知,/usr/local/lib调用中有一个错误文件libsqlite3.so.0指向libsqlite3.so.0.8.6. 我重命名了文件,以防万一。使用命令:

cd /usr/local/lib

sudo mv libsqlite3.so.0 ./libsqlite3.so.0.back

但你也可以删除它: rm libsqlite3.so.0

引导我找到答案的线程:链接

这解决了我的问题,我希望它们也能解决你的问题:)

  • 接受的答案对我没有帮助。你的回答真是太好了。你救了我的日子。谢谢。 (2认同)

Ale*_*sky 4

您已经安装了(至少部分)两个不同版本的 php,并且它们是冲突的。您可能需要清理不使用的版本,以防止出现进一步的问题。最简单的方法可能是擦除两者,然后重新安装您想要的那个。还要确保您的 php.ini 的extension_dir设置指向您所保留版本的正确目录。

内部 PHP API 根据日期进行版本控制,因此当进行向后不兼容的更改并且需要新版本时,您将获得新的子目录名称。如果更改向后兼容的,并且不需要新的 API 版本,那么您可以对 PHP 版本进行较小的更新,而无需重新编译扩展。

我相信 20131226 适用于 PHP 版本 5.6,20160303 适用于 PHP 版本 7。