无法加载pdo_sqlite.so扩展

时间:2017-06-22 13:45:55

标签: php sqlite pdo

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

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

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

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如何知道要查看哪个?感谢。

5 个答案:

答案 0 :(得分:2)

我尝试删除前面的注释中提到的库,并且该库工作了很短的时间,然后问题再次出现,所以当我在执行ldd /usr/lib/php/20190902/pdo_sqlite时删除库时,我执行了以下操作。出现了:

libsqlite3.so.0 => lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007fd35803b000)

,并且该链接指向同一目录中的 libsqlite3.so.0.8.6

因此替换/ usr / local / lib中的链接以指向该库,如下所示

sudo ln -sf /lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 /usr/local/lib/libsqlite3.so.0

对不起,我不会说英语,所以我使用Google翻译器

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

据我发现,/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

引导我找到答案的线索:link

这解决了我的问题,我希望他们也解决您的问题:)

答案 3 :(得分:0)

您可以尝试安装php版本5:

sudo apt install php5-sqlite3

或其他版本:

PHP 7.1

sudo apt install php7.1-sqlite3

PHP 7.2

sudo apt install php7.2-sqlite3

PHP 7.3

sudo apt install php7.3-sqlite3

和您想要的另一个版本。...

答案 4 :(得分:0)

我有同样的想法,对我来说,问题出在/etc/php/7.2/apache2/php.ini中,结果已删除,因此pdo_sqlite也从那里加载(或试图加载)。

现在从/etc/php/7.2/apache2/conf.d /

加载模块