Linux下编译支持SQLite3加密扩展

不问归期 提交于 2020-12-06 02:28:51

自PHP 5.3.0起默认启用SQLite3扩展,但是由于SQLite 3 开源版不带加密功能,如果想使用加密功能需要用他的商业版本。这导致PHP默认的SQLite扩展本身是不支持加密功能,只预留了相关的接口,详见官方文档介绍:

An optional encryption key used when encrypting and decrypting an SQLite database. If the SQLite encryption module is not installed, this parameter will have no effect.

但是如果项目需要用到SQLite,如果不加密,对安全多多少少有一点影响。还好SQLite本身有预留加密的接口,许多爱好者就基于这个接口,实现了加密功能。

目前比较有知名度的分别是:wxsqlite3sqlcipher,其中sqlcipher官方有文档介绍如何实现php的加密SQLite3扩展,而wxsqlite3没有,不过目前知名的数据库管理工具Navicat使用的是wxsqlite3的库实现SQLite3的加密连接,所以为了后续维护的方便,故打算使用wxsqlite3。

扩展编译教程

首先你需要确保你没有将SQLite3扩展加入php主程序(编译时使用 --without-sqlite3 禁用 SQLite3 扩展),万一不幸加入了,我目前也不知道有什么好办法,感觉重新编译一下就好了。

到php官网下载相对应的php版本源码(本文以php-7.0.17为例)。

将下载的源码包放到root目录,并解压

tar -zxf php-7.0.17.tar.gz

进入SQLite3扩展源码目录

cd php-7.0.17/ext/sqlite3

将wxsqlite3源码里的 sqlite3secure/src 的所有文件拷贝进 /root/php-7.0.17/ext/sqlite3/libsqlite 生成并编辑预编译配置文件

cp config0.m4 config.m4
vi config.m4

将config.m4里的 sqlite3_extra_sources="libsqlite/sqlite3.c" 替换成 sqlite3_extra_sources="libsqlite/sqlite3secure.c" 生成预编译文件

phpize

预编译

./configure CFLAGS="-DSQLITE_HAS_CODEC"

编译并安装

make && make install

最后在php.ini里加载编译好的so文件即可,这时php就支持加密版本的SQLite3啦,么么哒。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!