Apache 是“无法初始化模块”,因为更改 PHP 配置后模块和 PHP 的 API 不匹配

Posted

技术标签:

【中文标题】Apache 是“无法初始化模块”,因为更改 PHP 配置后模块和 PHP 的 API 不匹配【英文标题】:Apache is "Unable to initialize module" because of module's and PHP's API don't match after changing the PHP configuration 【发布时间】:2011-01-24 13:42:01 【问题描述】:

php -v 给出了这个

PHP Warning:  PHP Startup: memcache: Unable to initialize module
Module compiled with module API=20060613
PHP    compiled with module API=20090626
These options need to match in Unknown on line 0
PHP Warning:  PHP Startup: memcache: Unable to initialize module
Module compiled with module API=20060613
PHP    compiled with module API=20090626
These options need to match in Unknown on line 0
bogus test name tests/

ps。我已经从 php 5.2 升级到 5.3。在此之前一切正常。

【问题讨论】:

【参考方案1】:

当您更新 PHP 版本时(尤其是从 X.Y 版本升级到 X.Z 版本时)您也必须更新 PHP 扩展

这是因为 PHP 扩展是用 C 开发的,并且与 PHP 的内部“接近”——这意味着,如果这些内部的 API 发生变化,则必须重新编译扩展才能使用新版本。

而且,据我所知,在 PHP 5.2 和 PHP 5.3 之间,PHP 引擎使用的内部数据结构发生了一些修改——这意味着必须重新编译扩展,以匹配新的这些数据结构的版本。

如何更新您的 PHP 扩展将取决于您使用的系统。

如果你在 Windows 上,你可以在这里找到一些扩展的.dll:http://downloads.php.net/pierre/ 关于不同版本的更多信息,您可以查看windows.php.net左侧栏的内容。

如果您使用的是 Linux,则必须:

检查您的发行版提供了什么 或者使用pecl命令,重新下载相关扩展的源代码,重新编译。

【讨论】:

这就是我真正认为我应该做的。不幸的是,我有 openSUSE 11.2,我的发行版。没有提供任何东西,我应该怎么做才能重新编译 php 或其扩展 - 谷歌提供了很多思想分散的信息......谢谢。 你可能不需要重新编译 PHP 本身:你已经更新了它;;要重新安装/编译扩展,最简单的方法(至少对于内存缓存) 将是 pecl 命令;;我想像pecl upgrade memcache 这样的东西可能会成功(你需要构建/编译东西所需的东西) ;;;更多信息,您可以查看php.net/manual/en/install.pecl.php 我尝试重新编译 php 和我的所有模块,但没有任何效果,但不知何故“pear install -f pecl/memcache”对我有用:) 无论如何,谢谢) 好吧,很高兴你找到了解决方案 :-) 我遇到了同样的问题,我尝试了pecl upgrade <modulename>,但我得到了错误“错误:make failed”,我也尝试了pear install -f pecl/<modulename>,我得到了同样的错误:(请帮助【参考方案2】:

只是

pecl uninstall module_name

然后

pecl install module_name

【讨论】:

谢谢 - 这对我有用!我试过pecl upgrade-all,但我猜我的模块没有更新版本,所以它没有触发重新编译。【参考方案3】:

您的问题出在 php5-dev 软件包中。我猜你是从旧版 linux 上的 php5.2 升级到 php5.3。我做了同样的事情,当我设法安装 php 5.3 时,与 php5-dev 发生冲突。由于某种原因,它没有升级到新版本。不知道为什么会这样,我不在乎,但是这会使您的扩展使用较旧的 API 版本编译,而 php ofc 使用较新的 api 版本。我为解决这个问题所做的是:

我删除了 php5-dev sudo apt-get remove php5-dev,然后我运行 sudo apt-get autoremove 以摆脱给我带来麻烦的剩菜,然后我再次安装了 php5-dev。 sudo apt-get install php5-dev.

完成后,我使用sudo pecl uninstall memcache 删除了我的内存缓存,然后再次安装了sudo pecl install memcache。现在模块和 php 都有相同的 api 版本,所以我马上就知道我已经解决了问题:)

希望对你有帮助。

【讨论】:

这真的帮助我安装了pecl/zmq 扩展。我最近从php5.3 升级到php5.4php5-dev 也没有升级。【参考方案4】:

有可能模块已安装,但您的 PHP.ini 仍指向旧目录。

检查 /usr/lib/php/extensions 的内容。我的目录有两个:no-debug-non-zts-20060613 和 no-debug-non-zts-20060613。在 php.ini 的第 428 行附近,更改:

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613"

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20090626"

然后重启apache。这应该可以解决问题。

【讨论】:

【参考方案5】:

我在这个问题上苦苦挣扎了很长时间,发现当你运行 configure 时,只需将路径传递给正确的 php-config 工具即可。

在我的情况下,它是

./configure --with-php-config=/usr/local/zend/bin/php-config 

...如果您不确定,请在您的机器上运行locate php-config 并在安装的不同版本中找到正确的版本。

希望这对未来的人有所帮助。

PS。我的默认 php-config 设置为 20090926,即 PHP 5.3。我为 PHP 5.4 (2010...) 手动输入的 ./configure was 的参数

【讨论】:

就我而言,我必须先执行 /usr/local/zend/bin/phpize,然后再执行 ./configure --with-php-config=/usr/local/zend/bin/php -配置【参考方案6】:

我在我的 php.ini 中启用了这部分

 extension=php_memcache.dll
    [Memcache]
    memcache.allow_failover = 1
    memcache.max_failover_attempts=20
    memcache.chunk_size =8192
    memcache.default_port = 11211

在评论这些行之后,我的 Windows 10 中安装了 composer

【讨论】:

【参考方案7】:

从 PHP 5.5 升级到 PHP 5.6 后,我遇到了类似的问题。用于编译 phalcon 扩展的 phpizephp-config 库仍然是 PHP 5.5 中的库。我必须运行以下命令:

sudo apt-get install php5.6-dev

会有很长的stacktrace,我看到的关键信息是这样的:

update-alternatives: using /usr/bin/php-config5.6 to provide /usr/bin/php-config (php-config) in auto mode
update-alternatives: using /usr/bin/phpize5.6 to provide /usr/bin/phpize (phpize) in auto mode

我希望这对某人有所帮助。

【讨论】:

【参考方案8】:

在您进行 phpize 之前,请确保更新您的路径 ($PS1) 以指向新的 PHP! phpize 使用你的环境,如果你的路径或环境的其他部分仍然有旧 PHP 的痕迹,事情会变得很糟糕!

【讨论】:

【参考方案9】:

即使在重新编译模块后,我也会遇到同样的错误。

但我解决了你只需要指定你的 phpize 的绝对路径。

【讨论】:

【参考方案10】:

这是适用于 php 5.5 的版本。从here下载xampp 1.8.3,从here下载memcache dll

【讨论】:

【参考方案11】:

在我的例子中 php.ini

[CLDbg]
extension=php_cl_dbg_5_3_VC9.dll
clport=6000

我删除了支持不同PHP版本的Codelobster,所以需要更新到:

[CLDbg]
;extension=php_cl_dbg_5_3_VC9.dll
;clport=6000

【讨论】:

【参考方案12】:

这个问题刚刚发生在我身上,只需增加 memory_limit 从 32 M 到 64 M 您可以调整 php.ini 所在文件的值

找到 php.ini 然后选择正确的文件并搜索 memory_limit 并在修改后 你必须重新启动apache /etc/init.d/httpd 重启

一切顺利。

【讨论】:

【参考方案13】:

就我而言,我使用 lnmp 安装 php 版本为 5.4.45。但可能是因为我在 lnmp 之后安装了 php5-dev(如果你安装了 lnmp,我猜这不是必需的),我的 phpize 和 php-config 都指向比 php 更旧的版本工具。 我通过将/etc/alternatives/phpize/etc/alternatives/php-config的软链接更改为/usr/local/php/bin/phpize/usr/local/php/bin/php-config解决了这个问题。 希望这会有所帮助。

【讨论】:

【参考方案14】:

对我有用的只是执行以下操作:

打开 php.ini 文件。

在 DYNAMIC EXTENSIONS 标题下,将以下行注释为

;extension=php_java.dll

重启 Apache 一切正常

【讨论】:

这只是禁用扩展,阻止任何加载它的尝试。问题是关于获得扩展以重新开始工作。

以上是关于Apache 是“无法初始化模块”,因为更改 PHP 配置后模块和 PHP 的 API 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

PHP 启动:无法初始化模块

PHP 警告:PHP 启动:杂音:无法初始化模块,使用错误的 API 模块编译

当我启动 apache MySQL 服务器时,我收到错误“(HY000/2002):无法建立连接,因为目标机器主动拒绝它。”

PHP 警告:PHP 启动:pdf:无法初始化模块

lnmp安装php

ubuntu搭配lamp