前段日子,忽然接到用户的反馈,说系统中原来的QQ登陆、微博登陆统统都不能用,跟踪代码进去后发现,是在 file_get_contents这个函数请求QQ登陆的地方报错,在用该函数file_get_contents请求https协议的地址时,返回的是空,没有任何错误!php
从网上找了不少的帖子,时间跨度也接近3个多月,此问题一致没有获得很好的解决。有说是由于没有openssl的问题,但个人是linux系统,不须要openssl.dll,同时我也尝试编译过openssl.so等方式,都不行,由于个人Php环境就已是包含了openssl的编译的。linux
并且根据网上的教程,不只没有解决掉个人问题,反而出现了新的问题,原来还能返回空的内容,按照一系列的教程后,结果报505的错误,并且nginx、php等错误日志都不能很好地发现问题,这个又接近过去了一个月。nginx
因为一直返回505的错误信息,我也怀疑是nginx返回的错误,这样就看不到底层php返回的具体错误。一直在想如何绕过nginx直接访问php页面,看看最原始的错误呢?但nginx不能随便更改,毕竟系统仍是一直在运行和用户访问提交数据的。sql
又过去了两周,客户一直电话催着要解决这个问题,没办法硬着头皮再上。继续研究php的时候,忽然发现php也是个命令,能够直接php test.php;test.php里只有一个file_get_contents的函数,这下就能够直接快速方便地反馈原始的错误信息了。函数
执行命令后,控制台上就显示 segment fault的错误。继续根据这个线索进行百度或google,有朋友发现是由于sqlite的问题,具体参考该文oop
http://blog.csdn.net/loophome/article/details/53812887google
能够经过查看系统内核日志,发现问题端倪。spa
经过查看内核日志和gdb记录,能够发现问题出如今libsqlite上.net