今天发现了这样的问题,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就退出命令行,导出的数据库仍旧是加密的。

sqlcipher的php扩展运行在fast-cgi:php-fpm下工作不正常的更多相关文章

  1. Fast CGI 工作原理

    http://www.cppblog.com/woaidongmao/archive/2011/06/21/149092.html 一.FastCGI是什么? FastCGI是语言无关的.可伸缩架构的 ...

  2. Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈

    一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同 ...

  3. 运行于Windows内建账户下的服务访问映射网络驱动器的方法

    Windows服务如果是运行在本地系统帐户下或本地服务帐户下,它只能访问这个账户自己创建的映射驱动器,UNC路径访问则不受次限制. LocalService Account (NT AUTHORITY ...

  4. Junit4.x扩展:运行指定方法

    相信很多道友搞开发的一般都会用到Junit单元测试工具,不知道大家有没有遇到一个这样的问题: 有的单元测试用例有很多@Test方法,甚至有的方法会执行很长时间,只能空等执行.而实际上我们只需要运行其中 ...

  5. php的运行原理、cgi对比fastcgi以及php-cgi和php-fpm之间的联系区别

    最近项目中本地测试环境遇到了windows环境下的nginx使用file_get_contents/curl访问php文件导致的阻塞问题,一直在找解决的方案,这个问题研究了三天终于找到了解决方案,特别 ...

  6. 安装fast cgi

    1. 下载 在HTTPD主页,找到"mod_fcgid" 下载“mod_fcgid-2.3.9-crlf.zip” 2. 生成so文件 首先,设置APACHE2_HOME系统变量. ...

  7. 关于fast cgi和php-fpm的关系

    相关文档“https://segmentfault.com/q/1010000000256516%20” 一.什么是cgi cgi是一个协议,这个协议规定我们web服务器访问的时候,nginx和php ...

  8. eclipse新建web项目,运行后在tomcat安装目录下webapps中没有该项目

    一.发现问题在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并没 ...

  9. Docker - 运行 containers 使用在 swarm 模式下创建的 overlay 模式的 network

    前言 在Docker engine v1.12, 使用Swarm可以方便的创建overlay模式的网络,但是它只能被swarm下面的service所使用的,相对于container,这个网络是完全隔离 ...

随机推荐

  1. Redis启动报错解决

    报错 redis_6379.service - LSB: start and stop redis_6379    Loaded: loaded (/etc/rc.d/init.d/redis_637 ...

  2. 冷知识: 不会出现OutOfMemoryError的内存区域

    程序计数器(PC) 因为程序计数器只是记录当前线程正在执行的那条字节码指令的地址,即使出现死循环都不会内存溢出

  3. CountDownLatch和CycliBarrier介绍

    一.CountDownLatch 它被用来同步一个或多个任务,强制他们等待其他任务完成,这就是闭锁. public CountDownLatch(int count) { if (count < ...

  4. vue render

    Vue 的 render 渲染 API vue2 的 vnode tag: 当前节点的标签名 data: 当前节点是数据对象 children: 子节点,数组也是vnode 类型 text: 当前节点 ...

  5. 2017.12.21 学习vue的新得

    温故而知新,这句话说的真的有道理.每次回顾vue总会学到不一样的知识点,我就在想,我第一遍到底看了什么? 废话不多说,简要记录今天的所得: 1.v-if 与 v-show 同:都是条件渲染 异:渲染的 ...

  6. fenby C语言 P20

    循环停止 break 立刻跳出不再循环 continue立刻跳出循环从下一次循环继续执行 #include <stdio.h> int main(){ int i; for(i=1;i&l ...

  7. json基本内容

    json的基本信息和历史 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于欧洲计算机协会制定的js规范的一个子集,采用完全独立于编程语言的文本格式来 ...

  8. 如何在sprintf函数中输出百分号(%)等特殊符号

    php中的sprinf可以格式化字符串的数据类型.今天遇到了想在其中输出%,可难倒我了. $query =  sprintf("select * from books where %s li ...

  9. $POJ2942\ Knights\ of\ the\ Round\ Table$ 图论

    正解:图论 解题报告: 传送门! 一道,综合性比较强的题(我是萌新刚学$OI$我只是想练下$tarjan$,,,$QAQ$ 考虑先建个补图,然后现在就变成只有相互连边的点不能做邻居.所以如果有$K$个 ...

  10. ArcGIS Engine空间分析之拓扑分析的实现

    简单介绍: 拓扑学是一门研究几何图形位置关系的科学. GIS所关注的拓扑主要集中在拓扑关系——存在于地理实体间的拓扑关系. 拓扑关系在GIS中起着描述两个地理实体的相对空间位置的重要作用.它是GIS空 ...