【发布时间】:2020-12-24 19:54:49
【问题描述】:
我正在尝试在 Amazon Linux EC2 实例上将 memcached 用于 PHP。在我的 PHP 脚本中,当我调用 $mc = new Memcached(); 时,/var/log/php-fpm/www-error.log 中会引发以下错误:
[06-Sep-2020 00:49:44 UTC] PHP Fatal error: Uncaught Error: Class 'Memcached' not found in /var/app/current/memcached.php:8
Stack trace: #0 {main}
thrown in /var/app/current/memcached.php on line 8
调用php -m 我没有看到memcached 列出,我认为这意味着它没有安装。
所以,我首先尝试:
sudo yum install memcached
sudo yum install php70-pecl-memcached
以及对 /etc/php.ini 的编辑以包含
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"
如here 所述,但没有运气。
接下来,我尝试了 AWS 支持here 为 Amazon Linux EC2 v1 概述的建议。查看cfn-init-cmd.log,包libmemcached 安装成功,但是,当它尝试安装memcached 时脚本失败,因为它无法按照命令01_install_memcached 找到/use/bin/pecl7。作为参考,我在.ebextensions/memcache.config 中的完整脚本是:
packages:
yum:
libmemcached-devel: []
commands:
01_install_memcached:
command: /usr/bin/yes 'no'| /usr/bin/pecl7 install memcached
test: '! /usr/bin/pecl info memcached'
02_rmfromphpini:
command: /bin/sed -i -e '/extension="memcached.so"/d' /etc/php.ini
03_createconf:
command: /bin/echo 'extension="memcached.so"' > /etc/php-7.3.d/41-memcached.ini
test: '/usr/bin/pecl7 info memcached'
关于如何解决的任何想法?
【问题讨论】:
-
如果您ssh到EB实例,您可以手动安装它并使其工作吗?这将允许您验证您尝试自动化的步骤。
-
在解释 YAML 和
.ebextensions时我有点新手,所以我根据脚本运行了以下命令:'sudo yum install -y libmemcached-devel', next @987654340 @,然后从/etc/php.ini/, created a new file/etc/php.d/41-memcached.ini` 中删除memcached.so行与extension="memcached.so"行,最后重新启动实例...然后成功!所以对脚本进行了两处更改,首先使用pecl而不是pecl7,其次是memcached.ini文件的目录以反映实例上的内容 -
刚刚测试了一个修改后的脚本,它似乎可以工作。我想我有点惊讶这是让 memcache 在 Amazon Linux 2 实例上与 PHP 一起工作所必需的,因为我认为它是默认安装的。
-
@qwertytam 特别是当您需要它来使用 AWS Elasticache 时。对我来说似乎有点失败。
标签: php amazon-web-services memcached ebextensions amazon-linux-2