由于模块和PHP的API在更改PHPconfiguration后不匹配,因此Apache“无法初始化模块”

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。 在这之前一切正常。

当你更新PHP的版本(特别是从版本XY到版本XZ)时你也必须更新PHP扩展

这是因为PHP扩展是用C语言开发的,并且与PHP的内部“接近” – 这意味着,如果这些内部的API改变了,那么必须重新编译扩展来使用新的版本。

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

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

如果你在Windows上,你可以在这里find一些扩展名为.dll的文件: http : //downloads.php.net/pierre/
有关不同版本的更多信息,可以查看windows.php.net左侧的内容。

如果你在Linux上,你必须:

  • 检查您的分配提供了什么
  • 或者使用pecl命令,重新下载相关扩展的来源,然后重新编译它们。

只是

 pecl uninstall module_name 

然后

 pecl install module_name 

你的问题在php5-dev包中。 我想你从一个较旧的Linux版本的php5.2到php5.3。 我做了同样的事情,当我设法安装PHP 5.3时,与php5-dev有冲突。 出于某种原因,它不会升级到新版本。 不知道为什么,我不在乎,但是这使得你的扩展与旧的API版本编译,而PHP的C是与较新的API版本。 我做了什么来解决这个问题是:

我用sudo apt-get remove php5-devsudo 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版本,所以我马上知道我已经解决了这个问题:)

希望能帮助到你。

模块可能已安装,但是你的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。 这应该可以解决问题。

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

就我而言,是的

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

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

希望这有助于未来的人。

PS。 我的默认php-config被设置为20090926,这是PHP 5.3。 我手动input./configure was的参数./configure was PHP 5.4(2010 …)

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

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

评论这些行composer php安装在我的Windows 10

从PHP 5.5升级到PHP 5.6后,我遇到了类似的问题。 用于编译phalcon扩展的phpizephp-config库仍然来自PHP 5.5。 我不得不运行下面的命令:

 sudo apt-get install php5.6-dev 

会有一个很长的堆栈跟踪,我看到的关键信息是:

 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 

我希望这可以帮助别人。

在你phpize之前,请确保更新你的path($ PS1)指向新的PHP! phpize使用你的环境,如果你的path或环境的其他部分仍然有旧的PHP的痕迹,事情会变得毛茸茸的!

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

但我解决了它,你只需要指定你的phpize的绝对path。

这是一个与PHP 5.5的作品。 从这里下载xampp 1.8.3并从这里下载memcache dll

在我的情况下在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 

这个问题刚刚发生在我身上,并且已经通过将memory_limit从32 M增加到64 M来解决。您可以调整php.ini存在的文件的值

findphp.ini,然后select正确的文件,并searchmemory_limit和修改后,您必须重新启动apache /etc/init.d/httpd重新启动

祝一切顺利。

在我的情况下,我用lnmp安装版本5.4.45的PHP。 但也许是因为我在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
希望这是有帮助的。

对我而言,只是简单地做到以下几点:

打开php.ini文件。

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

 ;extension=php_java.dll 

重新启动的Apache,一切都很好