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




