php使用memcached擴充套件的乙個BUG

2021-07-08 18:27:21 字數 995 閱讀 5508

memcache是一套分布式的快取記憶體系統,很多**都在使用memcache,以提高**的訪問速度。最近,遇到了乙個比較頭痛的問題。

首先,分離出關鍵的**:

$mc=new memcached();

$mc->addserver("www.***.com",11711); 為未解析的host

$mc->get("fffffff");

執行該php指令碼,發現報了segmentation fault錯誤,為啥?

使用gdb跟蹤程式,找到了報錯的**:

libmemcached-0.44/libmemcached/connect.c:line400

if ((ptr->fd= socket(use->ai_family,

use->ai_socktype,

use->ai_protocol)) < 0)

segmentation 說明錯誤是非法訪問記憶體區域,可以判斷use的某個元素為null(ps:由於編譯優化,gdb無法列印詳細的值,這塊等以後有空在檢查了)

翻查了一下php關於memcahed的介紹,也找到了問題所在(

說說我php的環境配置吧,也最終確認了問題所在。php官網上已經說明了,memcached擴充套件,必須使用libmemcached大於1.0的版本。(ps:這裡插一句,如果使用的是memcache擴充套件,不會出現改問題,原因是memcache擴充套件使用的是libmemcache系統庫) 

php版本

libmemcached版本

是否出現問題

5.2.14

libmemcached-0.44

是5.4.41

libmemcached-1.0.18否

總結:環境配置,按照官方說明配置,並編寫文件規範。

LNMP環境PHP7 memcached擴充套件安裝

以下是安裝memcached擴充套件 所需軟體包 libmemcached 1.0.9 2 tar zxvf 解壓 3 cd 進入對應目錄 4 configure 5 make make install 1 tar zxf 解壓 2 cd 進入對應目錄 3 usr local php bin php...

linux php安裝memcached擴充套件

在linux 編譯,需要gcc,make,cmake,autoconf,libtool 等工具,需提前安裝好。memcached的安裝包括 1 服務端的安裝 2 客戶端的安裝 一 伺服器端安裝 方法一 memcached 依賴於libevent 庫,因此我們需要先安裝libevent.假設將原始碼放...

Memcached學習 安裝 使用 PHP

libevent memcached依賴於libevent庫,因此需要先安裝 libevent cd libevent 2.1.12 stable configure prefix usr local libevent make make install memcached cd memcached...