Como definir a versão PHP Api para phpize

4

Estou atualizando o php no meu servidor, mas estou tendo problemas com o phpize e com a compilação de módulos externos. phpize -v reports:

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

Mas no meu servidor de teste (que estou tentando replicar), recebo isso:

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

Eu estou executando o debian squeeze, puxando os pacotes 5.3.0-2 do repositório experimental. A diferença entre os dois servidores é que o primeiro servidor teve verificações antigas de php e o servidor de teste foi instalado com o php 5.3.0-2 desde o início.

Eu tentei desinstalar todos os pacotes PHP do primeiro servidor (usando --purge para me livrar de todos os arquivos de configuração) e reinstalar o 5.3 fresh, mas ainda estou tendo o mesmo problema. Socorro!

    
por Tom Frost 23.07.2009 / 17:22

3 respostas

9

Resolvi isso sozinho - instalar o php5-dev 5.3 fornece um phpize AND a phpize5. O phpize5 tem todas as APIs mais recentes. Eu ainda adoraria saber como fazer com que o phpize padrão tenha isso - pelo menos, sem o symlinking.

    
por 23.07.2009 / 17:36
2

Como:

phpize é um script de shell simples e você pode ver o que está fazendo. Quando chamado com --version , ele faz isso. Eu recortei um pouco por brevidade.

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

A variável prefix no topo é difícil quando o PHP é compilado. /usr/lib/php5 é onde minha instalação para essa máquina é. Tudo que o phpize faz é olhar os arquivos de cabeçalho para a instalação naquele prefixo. Eu imagino que seu phpize5 tenha um caminho completamente diferente para phpize .

Por que:

Talvez sua instalação queira diferenciar as versões mais antigas e mais recentes, por isso renomeou uma delas. Pode ser o resultado de ter uma versão 4.x instalada anteriormente na mesma máquina.

    
por 23.07.2009 / 17:50
0

Isso deve ser um comentário, mas não consigo encontrar o link do comentário. Na verdade, é uma resposta à resposta anterior.

Então, devo considerar que o arquivo phpize é feito sob medida para o seu sistema como um efeito colateral da compilação do PHP? Talvez o procedimento mac ports tenha usado um binário pré-compilado e é por isso que não tenho o phpize5. Eu realmente não sei como isso funciona. Mas o que você está querendo dizer é que, se você hackear seu phpize e apontar para uma nova instalação do PHP, ele vai puxar os números corretos da API para combinar? Ack tem muita coisa pra mudar aí! Eu prefiro ter um programa que faça perguntas sobre onde as coisas estão, para ter certeza e mudar tudo o que precisa mudar.

    
por 17.04.2010 / 00:19

Tags