Apache не может инициализировать модуль из-за того, что API модуля и PHP не совпадают после изменения конфигурации PHP

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/

пс. Я обновился с php 5.2 до 5.3. до этого все нормально работало.


person soshial    schedule 06.03.2010    source источник


Ответы (14)


При обновлении версии 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 для повторной загрузки исходных кодов рассматриваемых расширений и их повторной компиляции.
person Pascal MARTIN    schedule 06.03.2010
comment
это то, что я на самом деле думал, что я должен сделать. У меня openSUSE 11.2, к сожалению, мой дистрибутив. ничего не дает, что мне делать, чтобы перекомпилировать php или его расширения - Google дает много разрозненной информации... спасибо. - person soshial; 07.03.2010
comment
Вам, вероятно, не нужно перекомпилировать сам PHP: вы уже обновили его ;; для переустановки/компиляции расширений самым простым способом (по крайней мере, для memcache) будет команда pecl ;; что-то вроде pecl upgrade memcache, я полагаю, может помочь (вам понадобится то, что требуется для сборки/компиляции) ;;; для получения дополнительной информации вы можете взглянуть на php.net/manual/en/ install.pecl.php - person Pascal MARTIN; 07.03.2010
comment
я пытался перекомпилировать php и весь мой модуль, и ничего не получилось, но каким-то образом pear install -f pecl/memcache помог мне :) в любом случае, спасибо) - person soshial; 07.03.2010
comment
Что ж, рад, что вы нашли решение :-) - person Pascal MARTIN; 07.03.2010
comment
У меня была та же проблема, и я попробовал pecl upgrade <modulename>, но получил ошибку ОШИБКА: make не удалось, я также попробовал pear install -f pecl/<modulename> и получил ту же ошибку :( помогите, пожалуйста - person Reem; 02.03.2011
comment
Есть ли другой источник/репозиторий для файлов dll? Я проверил downloads.php.net/pierre, но не смог найти. Мне нужны два файла dll php_pdo.dll и php_mcrypt.dll. У меня есть предварительно скомпилированный экземпляр PHP в моей системе, и я даже не могу запустить PHP в командной строке. Пожалуйста, проверьте заголовок serverfault.com/questions/397885/, если вы можете помочь. Меня там проголосовали, и я не уверен, могу ли я спросить об этом в SO. - person Sandeepan Nath; 12.06.2012

только что

pecl uninstall module_name

тогда

pecl install module_name
person Bảo Nam    schedule 20.02.2012
comment
Спасибо - это сработало для меня! Я пробовал pecl upgrade-all, но полагаю, что более новой версии моего модуля нет, поэтому перекомпиляция не произошла. - person Nic Cottrell; 30.01.2013

Ваша проблема связана с пакетом php5-dev. Я думаю, вы перешли с php5.2 в более старой версии Linux на 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, поэтому я сразу понял, что проблема решена :)

Надеюсь, поможет.

person Vladimir Lazarevski    schedule 11.02.2012
comment
Это действительно помогло мне установить расширение pecl/zmq. Недавно я обновился с php5.3 до php5.4, а php5-dev тоже не обновился. - person kachar; 30.11.2013

Возможно, модули установлены, но ваш PHP.ini по-прежнему указывает на старый каталог.

Проверьте содержимое /usr/lib/php/extensions. В моем было два каталога: no-debug-non-zts-20060613 и no-debug-non-zts-20060613. Вокруг строки 428 вашего php.ini измените:

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

to

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

Затем перезапустите апач. Это должно решить проблему.

person apkostka    schedule 26.12.2012

Я долго боролся с этой проблемой и обнаружил, что когда вы запускаете configure, просто передайте ему путь к правильному инструменту php-config.

В моем случае это было

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

... Если вы не уверены, запустите locate php-config на своем компьютере и найдите нужную среди различных установленных версий.

Надеюсь, это поможет кому-то в будущем.

PS. Мой php-config по умолчанию был установлен на 20090926, что соответствует PHP 5.3. Тот, который я вручную ввел как параметр для ./configure was для PHP 5.4 (2010...)

person Andrew    schedule 05.05.2013
comment
В моем случае мне пришлось сначала выполнить /usr/local/zend/bin/phpize, а затем ./configure --with-php-config=/usr/local/zend/bin/php-config - person velcrow; 28.10.2013

У меня была включена эта часть в моем 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

person vicky shrestha    schedule 27.09.2016

У меня была аналогичная проблема после обновления с PHP 5.5 до PHP 5.6. Библиотеки phpize и php-config, используемые для компиляции расширения phalcon, по-прежнему использовались в 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

Я надеюсь, что это поможет кому-то.

person Goke Obasa    schedule 28.09.2016

Перед phpize обязательно обновите свой путь ($PS1), чтобы он указывал на новый PHP! phpize использует вашу среду, и если у вас все еще есть остатки вашего старого PHP на вашем пути или в других частях среды, все станет волосатым!

person Dmitry Minkovsky    schedule 11.05.2012

У меня была такая же ошибка даже после перекомпиляции модулей.

Но я решил, что вам просто нужно указать абсолютный путь к вашему phpize.

person Hugo Bulthé    schedule 03.02.2012

Вот тот, который работает с php 5.5. Загрузите xampp 1.8.3 с здесь и загрузите dll memcache из здесь

person user2289259    schedule 04.11.2013

В моем случае в php.ini

[CLDbg]
extension=php_cl_dbg_5_3_VC9.dll
clport=6000

Я удалил Codelobster, который поддерживает другую версию PHP, поэтому необходимо обновить до:

[CLDbg]
;extension=php_cl_dbg_5_3_VC9.dll
;clport=6000
person xsor    schedule 05.09.2014

Эта проблема только что возникла у меня и была решена простым увеличением memory_limit с 32 МБ до 64 МБ. Вы можете настроить значение в файле, где существует php.ini.

найдите php.ini, затем выберите правильный файл и найдите memory_limit, и после его изменения вы должны перезагрузить apache /etc/init.d/httpd restart

Всего наилучшего.

person Moustafa Mohamed    schedule 26.12.2014

В моем случае я использовал lnmp для установки php версии 5.4.45. Но, возможно, из-за того, что я установил php5-dev после lnmp (что, я думаю, не обязательно, если вы установили lnmp), мои phpize и php-config указывают на инструменты более старой версии, чем php.
Я решил эту проблему, изменив программную ссылку /etc/alternatives/phpize и /etc/alternatives/php-config до /usr/local/php/bin/phpize и /usr/local/php/bin/php-config.
Надеюсь, это будет полезно.

person YouCL    schedule 20.09.2017

Что сработало для меня, так это просто сделать следующее:

откройте файл php.ini.

Под заголовком ДИНАМИЧЕСКИЕ РАСШИРЕНИЯ закомментируйте следующую строку как

;extension=php_java.dll

Перезапустил Apache и все стало нормально

person Hello    schedule 11.10.2012
comment
Это просто отключает расширение, предотвращая любые попытки его загрузки. Вопрос в том, чтобы заставить расширение снова начать работать. - person Josh; 24.10.2014