【问题标题】:PHP 7.2 memcached extension on Mac OSMac OS 上的 PHP 7.2 memcached 扩展
【发布时间】:2018-11-24 01:22:16
【问题描述】:

我正在尝试在 mac OS High Sierra 上设置 php memcached 扩展。我正在运行 php 7.2

php -v 的输出:

PHP 7.2.6 (cli) (built: May 25 2018 06:18:43) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.6, Copyright (c) 1999-2018, by Zend Technologies

我通过pecl 安装memcached 没有任何错误:

pecl install memcached

在 php.ini 文件中启用:

extension="memcached.so"

当我在我的 Apache 服务器上运行 <?php echo phpinfo();?> 时。我可以看到会话已配置:

session.save_handler    memcached   memcached

我的 symfony 应用程序仍然给我这个错误:

(1/1) ClassNotFoundException
Attempted to load class "Memcached" from the global namespace.
Did you forget a "use" statement?

编辑:

我的 apache 运行的是不同版本的 php(PHP 版本 7.1.16)我不知道为什么,但我认为这不是问题。

在信息文件中,我可以在 CORE 部分 中看到 php 扩展目录是 "/usr/local/lib/php/pecl/20170718"。当我打开该目录时,有 memcached.so 文件。路径是正确的。

编辑 2:

在我的 apache 日志中,我看到警告:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/pecl/20170718/memcached.so' - dlopen(/usr/local/lib/php/pecl/20170718/memcached.so, 9): Symbol not found: _zend_empty_string\n  Referenced from: /usr/local/lib/php/pecl/20170718/memcached.so\n  Expected in: flat namespace\n in /usr/local/lib/php/pecl/20170718/memcached.so in Unknown on line 0

【问题讨论】:

  • “在我的 Apache 服务器上。我可以看到 memcached 已启用”是错误的。您看到的是您将会话保存处理程序设置为 memcached。您应该在 phpinfo 输出中看到一个单独的 memcached 块,即一个带有紫色和灰色颜色的单独表。检查 Aapache mod 正在使用哪个 ini 文件,它也在其中。
  • 在这种情况下,我看不到它,但是当我运行此命令时,我可以看到 memcached 扩展 php -m | grep memcached
  • 您是否验证了 phpinfo 告诉正在使用的 ini 文件是您正在编辑的那个文件?你确定 php -m 列出 'memcached' 而不是 'memcache'?
  • 是的,我有。我的 apache 在 /etc/php.ini 中使用了不同的 php.ini 文件,但它也在那里启用,是的,它是 memcached 而不是 memcache。
  • 当然,PHP 不会加载启用了该模块的那些 ini 文件,从那时起您会在 phpinfo 输出中看到 memcached 块。从 'Loaded Configuration File' 和 'Additional .ini files parsed' 中的值可以清楚地看出哪些文件被加载了。

标签: php symfony memcached macos-sierra


【解决方案1】:

所以。 Apache 和 SLI php 版本使用不同的 php.ini 文件。 例如,在我的 Debian 9 上,它使用 /etc/php/7.2/apache2/php.ini 和 /etc/php/7.2/cli/php.ini

我相信您的问题是您使用的是不同版本的 PHP。

试试下面的命令:

$sudo a2dismod php7.1
$sudo a2enmod php7.2
$sudo service apache2 restart

如果您仍然遇到相同的错误,请尝试在您的 www 根目录中创建 info.php 并包含下一个代码:

<?php
phpinfo();

并检查 Memcache 是否已加载。

【讨论】:

  • 谢谢,但这些命令在 MacOS 上不存在。我收到sudo: a2dismod: command not found
  • 所以,好吧!你能创建包含“127.0.0.1/info.php 并找到“配置文件(php.ini)路径”行。
  • 你用brew安装apache & php吗?
  • 我已经做到了。我的 php.ini 位于/etc/php.ini。在该文件中,我添加了extension="memcached.so" 并重新启动了 Apache。但它没有用。当我运行 Symfony 内置服务器(在 php7.2 上)时,一切正常并加载了 memcached。
  • Apache 已预装。我通过 brew 升级了 php。
猜你喜欢
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多