我正在尝试为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如何知道要查看哪个?感谢。
答案 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 /
加载模块