今天发现了这样的问题,php-fpm运行sqlcipher时,有些数据库工作正常,有些却不正常。

不正常的,都在日志上报错,也就是php处理异常了。

这个报错发生在执行sql语句时,通常就是sqlcipher实际去解密,分析数据库结构之时。

为什么其它的数据库又正常呢,反复在python和php下执行,验证并不是key的问题后。这就怪事了,同一php代码,在php下执行正常,在php-fpm(cgi for nginx)却不正常。

最后发现,不正常的数据库处理,都发生在数据库文件大于30M。通过sqlcipher解密出数据库文件,让php-fpm直接使用没有加密的数据库文件(体积在30M以上),却一切正常。

补充:

第二天,发觉不对,因为在我的开发环境中,php-fpm跑sqlcipher是一切正常的,但是放到服务器上就不能正常跑。开发机器和服务器是同样版本的linux,安装同样的包,唯一就是硬件不同。开发机是i5上虚拟机,服务器是至强cpu。都是x86_64,也不用特殊的扩展指令集。不管怎么,在服务器上重新编译php的sqlcipher扩展,结果也是不行。因为使用php去直接运行代码是跑得正常的,所以将 nginx 的 cgi 从php-fpm 转到 php-cgi,果然没有出错一切正常。xdebug也只能跟踪php代码,扩展是c层的东西,当控制流从php层进入扩展的c层就没办法了,不好调试。php-fpm是多进程的,gdb也不好命中。

sqlcipher在php-fpm下工作时,如果加密的数据库文件超过30M(临界点在多少没仔细去测) 后,就会不正常。

在使用sqlcipher_export导出解密数据库时,如果没有将解密数据库detach就退出命令行,导出的数据库仍旧是加密的。

最新文章

  1. MyBatis Mapper.xml文件中 $和#的区别
  2. View and Data API 现在支持IE11了
  3. oracle查询以当前年份为准的近些年数据
  4. Unity3D特效-场景淡入淡出
  5. 【转载】Debian 6安装小记
  6. java 数组基本操作(一维)
  7. 【CSS3】---曲线阴影翘边阴影
  8. C# this指针用法
  9. PC问题-可以PING通IP,PING名字不通,可以远程,但不能访问共享文件夹?
  10. java 中的匿名内部类
  11. 简单的网页采集程序(ASP.NET MVC4)
  12. Lambda表达式中的表达式lambda和语句lambda区别
  13. javascript 之 this 用法
  14. RT3070 USB WIFI 在连接socket编程过程中问题总结
  15. jQuery添加删除节点例子第十节"员工增删表"
  16. 取n到m行
  17. Oracle数据文件迁移到裸设备
  18. Android 性能优化 SparseArray【转载】
  19. 6-完美解决Error:SSL peer shut down incorrectly
  20. 《Lua程序设计》9.1 协同程序基础 学习笔记

热门文章

  1. JS单例对象与构造函数对象的区别
  2. pytorch笔记
  3. 百万年薪python之路 -- 小数据池和代码块
  4. C++ 11标准
  5. 字符编码 + python2和python3的编码区别(day08整理)
  6. selenium学习-拖拽页面元素
  7. Andriod项目结构
  8. vue-cli3安装jQuery
  9. fenby C语言P21
  10. Mycat分布式数据库架构解决方案--配置defaultAccount属性报错解决方案