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.4
,php5-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 扩展的 phpize
和 php-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 启动:杂音:无法初始化模块,使用错误的 API 模块编译
当我启动 apache MySQL 服务器时,我收到错误“(HY000/2002):无法建立连接,因为目标机器主动拒绝它。”