You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 20.04环境下PHP 8.1配置PDO_SQLite的解决方案咨询

Ubuntu 20.04环境下PHP 8.1配置PDO_SQLite的解决方案咨询

我遇到了一个棘手的问题:PHP 8.1的包在Ubuntu 22.04上能正常获取安装,但Ubuntu 20.04的官方源里却没有这个包。不过好在php7.4-sqlite在20.04上是可用的。

我的核心需求是:在Ubuntu 20.04的PHP 8.1环境下,使用PDO连接SQLite数据库。目前我已经尝试了一些操作,但都没成功,想问问大家有没有可行的解决思路?

我先提前修改了/etc/php/8.1/cli/php.ini,以为这样就能为PDO_SQLite的启用做好准备。之后我找到了编译libsqlite3.so的教程,成功编译出了库文件,接着执行了这条命令:

sudo mv libsqlite3.so /usr/lib/php/20210902/sqlite3.so

但当我运行php -v检查时,错误日志里弹出了这些报错:

[29-Jul-2023 18:26:13 America/New_York] PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20210902/pdo_sqlite (/usr/lib/php/20210902/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/pdo_sqlite.so (/usr/lib/php/20210902/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

[29-Jul-2023 18:26:13 America/New_York] PHP Warning: PHP Startup: Invalid library (maybe not a PHP library) 'sqlite3' in Unknown on line 0

这和我之前遇到的报错还不一样,之前的错误信息是:

[29-Jul-2023 18:24:29 America/New_York] PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20210902/pdo_sqlite (/usr/lib/php/20210902/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/pdo_sqlite.so (/usr/lib/php/20210902/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

[29-Jul-2023 18:24:29 America/New_York] PHP Warning: PHP Startup: Unable to load dynamic library 'sqlite3' (tried: /usr/lib/php/20210902/sqlite3 (/usr/lib/php/20210902/sqlite3: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/sqlite3.so (/usr/lib/php/20210902/sqlite3.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

我也清楚,就算之前的问题解决了,可能也没法搞定PDO的问题。所以现在我有点无从下手,不知道该怎么推进才能在Ubuntu 20.04的PHP 8.1上实现这个功能。有没有其他可用的软件包,或者非标准的软件源能让我成功安装PDO+SQLite3(至少PHP+SQLite3的组合也行)?我搜了很多相关关键词,但都没找到有效的解决方案(除了之前提到的编译库的方法)。或者说,编译的思路其实是可行的,但我漏掉了关键步骤?


补充说明
我编译sqlite3库时使用的完整命令是:

gcc \
-Wl,-soname,libsqlite3.so.0 \
-DSQLITE_ENABLE_COLUMN_METADATA \
-DSQLITE_ENABLE_DBSTAT_VTAB \
-DSQLITE_ENABLE_FTS3 \
-DSQLITE_ENABLE_FTS3_PARENTHESIS \
-DSQLITE_ENABLE_FTS3_TOKENIZER \
-DSQLITE_ENABLE_FTS4 \
-DSQLITE_ENABLE_FTS5 \
-DSQLITE_ENABLE_JSON1 \
-DSQLITE_ENABLE_LOAD_EXTENSION \
-DSQLITE_ENABLE_PREUPDATE_HOOK \
-DSQLITE_ENABLE_RTREE \
-DSQLITE_ENABLE_SESSION \
-DSQLITE_ENABLE_STMTVTAB \
-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION \
-DSQLITE_ENABLE_UNLOCK_NOTIFY \
-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT \
-DSQLITE_HAVE_ISNAN \
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
-DSQLITE_MAX_SCHEMA_RETRY=25 \
-DSQLITE_MAX_VARIABLE_NUMBER=250000 \
-DSQLITE_OMIT_LOOKASIDE \
-DSQLITE_SECURE_DELETE \
-DSQLITE_SOUNDEX \
-DSQLITE_THREADSAFE=1 \
-DSQLITE_USE_URI \
-shared \
-o libsqlite3.so \
-fPIC \
sqlite3.c

备注:内容来源于stack exchange,提问作者Dennis

火山引擎 最新活动