Símbolo Indefinido do PHP 5.3.1: Erro OnUpdateLong na inicialização do Apache

9

Estou executando o Ubuntu 8.04 neste servidor. Eu tinha o PHP 5.2 instalado através do gerenciador de pacotes. Eu o removi para instalar o PHP 5.3.1 manualmente. Eu construí os pacotes assim

./configure --prefix=/opt/php --with-mysql --with-curl=/usr/bin --with-apxs2=/usr/bin/apxs2
make
make install

Isso instalou o PHP 5.3.1 em / opt / php /

$ php -v
PHP 5.3.1 (cli) (built: Dec  7 2009 10:51:14) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

No entanto, quando tento iniciar o Apache, recebo isso.

 # /etc/init.d/apache2 restart
 * Restarting web server apache2       
  apache2: Syntax error on line 185 of /etc/apache2/apache2.conf: 
  Syntax error on line 1 of /etc/apache2/mods-enabled/php5.load: 
  Cannot load /usr/lib/apache2/modules/libphp5.so into server: 
  /usr/lib/apache2/modules/libphp5.so: undefined symbol: OnUpdateLong
                                                                     [fail]

Alguma idéia do que está causando esse erro? Todas as referências que posso ver têm a ver com a criação de pacotes php5 para php4 ou similares. O PHP4 nunca foi instalado nesta máquina.

baudtack
fonte

Respostas:

11

na verdade, o que James Hackett disse foi mais ou menos o que funcionou para mim.

Meu problema foi que eu construí o PHP antes de instalar o Apache (construí o PHP a partir do último tronco e instalei o Apache2 via APT).

Então, quando eu encontrei o erro que o apache encontrou um símbolo indefinido (o módulo que não foi encontrado é arbitrário entre btw.), Fiz o seguinte:

  1. make distclean na fonte php
  2. ./configure --prefix=/usr/local/php-5.3-svn --with-apxs2=/usr/bin/apxs2
  3. make && make install

e tudo funcionou bem.

O capitão óbvio estava se escondendo de mim, é claro, se você apenas refazer sem make distclean && configure, make compila apenas os novos símbolos que obviamente não são suficientes ;-)

Structed
fonte
3

Eu tive esse mesmo problema e o que fiz foi excluir meu diretório de origem php, extrair novamente o tarball e compilar novamente e tudo funcionou bem.

Eu já havia instalado o php neste sistema sem o apache e tentei reinstalar o php do mesmo diretório de origem com diferentes configurações.

James Hackett
fonte
1

Você criou o php5, mas não reconstruiu a cola entre o apache e o php5. Como você está usando o mod_php5, ele falha (lógico).

Você pode executar o script php graças ao fastcgi (suponho que o php 5.3.1 construído à mão esteja ok), mas mesmo assim eu recomendo que você aja de outra maneira.

É muito desagradável criar um software manualmente em um servidor de produção. Além disso, o PHP5 é um grande software, você realmente não deve fazer isso para fins de manutenção e segurança.

A maneira correta de conseguir isso, se você realmente precisa dessa versão, é fazer o backport do pacote. (sim, embalagem!)

Requer um pouco de conhecimento e tempo de embalagem. Você pode obter as fontes de empacotamento com apt-get source php5:, desde que você tenha uma fonte deb-src em /etc/apt/sources.list

zecrazytux
fonte
Não é um servidor de produção. É apenas o nosso servidor de desenvolvimento e estou tentando descobrir o que, se algo acontecer, o php 5.3 quebrará em nosso sistema.
21009 baudtack
1
"É muito desagradável criar um software manualmente em um servidor de produção. Além disso, o PHP5 é um grande pedaço de software, você realmente não deve fazer isso por questões de manutenção e segurança". Na maioria das distribuições, é a única maneira de manter-se atualizado. O Ubuntu, por exemplo, só possui 5.2.10 como estável em seus repositórios, lançado em junho de 2009. Pessoalmente, acho mais um risco de segurança usar pré-pacotes porque eles têm um monte de coisas extras embutidas que você pode não ter. precisa e pode retirar se você mesmo construí-los. Além disso, você pode manter-se atualizado.
Andy Shellam
1

para aqueles que experimentam o erro zend_parse_paramater do apache2, enquanto carregam libphp5.so:

/apache2.conf: Erro de sintaxe na linha 1 de /etc/apache2/mods-enabled/php5.load: Não é possível carregar /usr/lib/apache2/modules/libphp5.so no servidor: / usr / lib / apache2 / modules / libphp5.so: símbolo indefinido: zend_parse_parameters

dê uma olhada na saída ./configure. se você receber uma mensagem dizendo algo semelhante a:

configure: warning: versões bison suportadas para regeneração dos analisadores Zend / PHP: 1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 (encontrado: nenhum).

tente instalar o bison: sudo apt-get install bison

então faça distclean então ./configure ... então faça então faça -i install

http://www.linuxforums.org/forum/redhat-fedora-linux-help/87975-configuring-php-work-apache.html


fonte
Só deve ser necessário reconstruir os analisadores zend se você modificou o código-fonte PHP de alguma forma. Nunca instalei o bisonte em nenhum servidor de produção e nunca tive um problema.
Andy Shellam
0

Como o @zecrazytux indicou, você instalou os pacotes apache-dev apropriados? O PHP poderia ter sido construído sem eles, mesmo que você tenha dito onde eles estavam. Você precisa olhar para a saída ./configure.

staticsan
fonte