PHP 7.3使用PECL Memcache舊模組簡易修正方式

PHP PECL Memcache模組(這裡與Memcached不同), 已經停止維護很久, 不過仍有熱心人士將Memcache持續支援到PHP 7.2, 不過PHP 7.3就無法使用了, 原因是PHP 7.3改了一些模組API做法, 這裡採用的是websupport-sk所提供的PHP 7相容Memcache模組, 雖然只能用到PHP 7.2, PHP 7.3可以做一些Memcache模組原始碼修改就能順利編譯使用。

websupport-sk Memcache模組放置於: https://github.com/websupport-sk/pecl-memcache, 請自行clone下來修改

這裡PHP採用Debian開發者Ondřej Surý的PHP 7 repository: https://packages.sury.org/php/

我在虛擬機上安裝Debian Linux 9.5作業系統, 安裝PHP 7.3, 加入Ondřej Surý的PHP 7 repository
apt-get install apt-transport-https lsb-release ca-certificates zlib1g-dev git
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list


然後更新Ondřej Surý的PHP 7 repository
apt-get update


安裝PHP 7.3
apt-get install php7.3 php7.3-cli php7.3-common php7.3-curl php7.3-mbstring php7.3-mysql php7.3-xml php7.3-fpm php7.3-dev php7.3-zip


把websupport-sk Memcache模組下載
git clone https://github.com/websupport-sk/pecl-memcache.git


進入模組目錄, 我先試著編譯
cd pecl-memcache
phpize
./configure
make


會出現這樣的錯誤
/usr/local/src/pecl-memcache/php7/memcache.c: In function ‘mmc_find_persistent’:
/usr/local/src/pecl-memcache/php7/memcache.c:731:19: error: lvalue required as left operand of assignment
GC_REFCOUNT(le) = 1;
^
/usr/local/src/pecl-memcache/php7/memcache.c: In function ‘php_mmc_pool_addserver’:
/usr/local/src/pecl-memcache/php7/memcache.c:789:24: error: lvalue required as increment operand
GC_REFCOUNT(list_res)++;
^~
/usr/local/src/pecl-memcache/php7/memcache.c: In function ‘php_mmc_connect’:
/usr/local/src/pecl-memcache/php7/memcache.c:873:24: error: lvalue required as increment operand
GC_REFCOUNT(list_res)++;
^~
Makefile:194: recipe for target 'php7/memcache.lo' failed
make: *** [php7/memcache.lo] Error 1


修改原始碼
nano php7/memcache.c

前往錯誤行數731, 把GC_REFCOUNT(le) = 1;修改為GC_SET_REFCOUNT(le, 1);
前往錯誤行數789, 把GC_REFCOUNT(list_res)++;修改為GC_ADDREF(list_res);
前往錯誤行數873, 把GC_REFCOUNT(list_res)++;修改為GC_ADDREF(list_res);

接著重新編譯就不會出錯了
make
make install

memcache.so將會安裝在/usr/lib/php/20180731/目錄

手動製作PHP 7.3的memcache.ini
nano /etc/php/7.3/mods-available/memcache.ini

貼入內容
; configuration for php memcache module
; priority=20
extension=memcache.so


啟用Memcache模組
phpenmod memcache


檢視已啟用模組
php -m

顯示如下
[PHP Modules]
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mbstring
memcache
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

Memcache模組正確的安裝完成

Ryan Lai wrote:
PHP PECL Memcache...(恕刪)

不好意思
請問要怎樣像你這樣把程式碼貼上來??
謝謝
請在發文時用HTML標籤<pre></pre>包住程式碼即可有此效果

紫色雙魚 wrote:
不好意思請問要怎樣像...(恕刪)

Ryan Lai wrote:
請在發文時用HTML...(恕刪)

謝謝
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!