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

sos*_*ial 36 php apache memcached

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/
Run Code Online (Sandbox Code Playgroud)

PS.我从php 5.2升级到5.3.在此之前一切正常.

Pas*_*TIN 34

当您更新PHP的版本(特别是从版本XY到版本XZ)时,您还必须更新PHP扩展.


这是因为PHP扩展是用C开发的,并且与PHP的内部结构"接近" - 这意味着,如果这些内部的API发生变化,则必须重新编译扩展,以使用新版本.

而且,在PHP 5.2和PHP 5.3之间,我记得,PHP引擎使用的内部数据结构有一些修改 - 这意味着必须重新编译扩展,以匹配那些新版本的数据结构.


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

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

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

  • 检查您的发行版提供的内容
  • 或者使用该pecl命令重新下载相关扩展的源代码,然后重新编译它们.

  • 我试图重新编译PHP和我的所有模块,没有任何工作,但不知何故"梨安装-f pecl/memcache"为我做了诀窍:)无论如何,谢谢你) (2认同)

Bảo*_*Nam 7

只是

pecl uninstall module_name
Run Code Online (Sandbox Code Playgroud)

然后

pecl install module_name
Run Code Online (Sandbox Code Playgroud)

  • 谢谢 - 这对我有用!我试过`pecl upgrade-all`但我想我的模块没有更新的版本所以它没有触发重新编译. (2认同)

Vla*_*ski 6

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

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

完成后,我删除了我的memcache sudo pecl uninstall memcache并再次安装它sudo pecl install memcache.现在模块和php都有相同的api版本所以我立刻知道我已经解决了问题:)

希望能帮助到你.