CentOS 上带有 PHP 7 的内存缓存扩展无法安装

Memcache extension with PHP 7 on CentOS fails to install

我正在尝试将一个相当大的 PHP 5.3 代码库升级到 PHP 7。它托管在 CentOS 6.5 上,所以我想将它保留在那个 OS。我目前正在一个原始的 Vagrant 盒子上进行操作 - 我已经成功安装了 PHP 7,以及除 Memcache 之外的所有模块。

作为 root,当我 运行 pecl install memcache 它试图安装 v2.2.7 但我从 make 得到一长串错误和警告。最后是:

make: *** [memcache.lo] Error 1
ERROR: `make' failed

根据 GoPHP7 it should work, Memcache should work with PHP 7 - it says "php7 port on github". There is indeed a Memcache PHP 7 port on GitHub. When I look at the Memcache page on Pecl 页面,它表明我应该安装 v3.0.8,但这是测试版(自 2013 年以来一直如此)。

所以我尝试 运行 pecl install memcache-3.0.8 还是失败了,报同样的错误:

make: *** [memcache.lo] Error 1
ERROR: `make' failed

那么 Memcache 扩展是否可以在 CentOS 6.5 上与 PHP 7 一起使用?

如果您还没有解决这个问题,我有一个适合我的解决方案。我在 CentOS 7.x 但它应该仍然适用于你,以及任何其他想要使用 pecl-memcache with PHP 7 (not pecl-memcached 的人,因为那是一个完全不同的包。

正如您已经发现的那样,您必须为此使用 Memcache PHP 7 port on GitHub

登录您的 shell 并执行以下操作:

 1. wget https://github.com/websupport-sk/pecl-memcache/archive/NON_BLOCKING_IO_php7.zip
 2. unzip NON_BLOCKING_IO_php7.zip
 3. cd pecl-memcache-NON_BLOCKING_IO_php7
 4. /opt/cpanel/ea-php70/root/usr/bin/phpize && ./configure --enable-memcache --with-php-config=/opt/cpanel/ea-php70/root/usr/bin/php-config && make
 5. cp modules/memcache.so /opt/cpanel/ea-php70/root/usr/lib64/php/modules/
 6. echo 'extension=memcache.so' >/opt/cpanel/ea-php70/root/etc/php.d/memcached.ini
 7. service httpd restart

上面的一些注释:

  • 将我使用的每个完整路径替换为您自己系统上的适当完整路径。我有 /opt/cpanel/ea-php70/root/,你可能有 /opt/php-7.0.7/。如果像我一样安装了多个 PHP 版本,运行ning phpize 最终可能会使用旧版本的 PHP 进行构建。经过反复试验,我发现了这一点。
  • 要找出你的 PHP 模块文件夹在哪里,你可以 运行 "/opt/cpanel/ea-php70/root/usr/bin/php -i | grep extension_dir
  • 如果您已经在其他地方加载了 memcached.ini,您可能不需要执行我正在创建的第 6 步。
  • 您可以使用“/opt/cpanel/ea-php70/root/usr/bin/php -i | grep memcache”验证它是否已正确构建和安装。如果您看到各种内存缓存条目,则一切都已成功安装。

希望对您有所帮助!