前段日子,忽然接到用戶的反饋,說系統中原來的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