Назад | Перейти на главную страницу

Как установить версию PHP Api для phpize

Я обновляю php на своем сервере, но у меня проблема с phpize и компиляцией внешних модулей. phpize -v сообщает:

Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20090115
Zend Extension Api No:   220090115

Но на моем тестовом сервере (который я пытаюсь воспроизвести) я получаю следующее:

Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626

Я запускаю debian squeeze, извлекая пакеты php 5.3.0-2 из экспериментального репозитория. Разница между двумя серверами заключается в том, что на первом сервере были старые версии php, а на тестовом сервере с самого начала был установлен php 5.3.0-2.

Я попытался удалить все пакеты PHP с первого сервера (используя --purge, чтобы избавиться от всех файлов конфигурации) и заново установить 5.3, но у меня все еще возникла та же проблема. Помогите!

Я решил это самостоятельно - установка php5-dev 5.3 дает вам файл phpize И файл phpize5. phpize5 имеет все новейшие API. Я все еще хотел бы знать, как сделать так, чтобы phpize по умолчанию имел это, по крайней мере, без символических ссылок.

Как:

phpize это простой сценарий оболочки, и вы можете вглядываться в то, что он делает. При звонке с --version он делает это. Я немного вырезал для краткости.

prefix='/usr/lib/php5'
includedir="`eval echo ${prefix}/include`/php"
SED="/bin/sed"
..
PHP_API_VERSION=`grep '#define PHP_API_VERSION' $includedir/main/php.h|$SED 's/#define PHP_API_VERSION//'`
ZEND_MODULE_API_NO=`grep '#define ZEND_MODULE_API_NO' $includedir/Zend/zend_modules.h|$SED 's/#define ZEND_MODULE_API_NO//'`
ZEND_EXTENSION_API_NO=`grep '#define ZEND_EXTENSION_API_NO' $includedir/Zend/zend_extensions.h|$SED 's/#define ZEND_EXTENSION_API_NO//'`
..
echo "PHP Api Version:        "$PHP_API_VERSION
echo "Zend Module Api No:     "$ZEND_MODULE_API_NO
echo "Zend Extension Api No:  "$ZEND_EXTENSION_API_NO

В prefix Переменная вверху устанавливается при компиляции PHP. /usr/lib/php5 это где моя установка для этой машины. Все phpize делает, это смотреть файлы заголовков для установки с этим префиксом. Я полагаю, что ваш phpize5 имеет совершенно другой путь к phpize.

Зачем:

Возможно, ваша установка хочет различать старую и новую версии, поэтому переименовала одну из них. Это могло быть результатом того, что на том же компьютере ранее была установлена ​​версия 4.x.

Это должен быть комментарий, но я не могу найти ссылку на комментарий. На самом деле это ответ на предыдущий ответ.

Итак, должен ли я считать, что файл phpize специально создан для вашей системы как побочный эффект компиляции PHP? Возможно, процедура портов Mac, которую я использовал, вытащила предварительно скомпилированный двоичный файл, и поэтому у меня нет phpize5. Я действительно не знаю, как это работает. Но вы имеете в виду, что если вы взломаете свой phpize и заставите его указывать на более новую установку PHP, он вытащит правильный API # для соответствия? Да, там есть что изменить! Я бы предпочел, чтобы это делала программа, которая задавала бы вам вопросы о том, где что находится, чтобы вы были уверены и изменили все, что нужно изменить.