Symbole PHP 5.3.1 non défini: erreur OnUpdateLong au démarrage d'Apache

9

J'utilise Ubuntu 8.04 sur ce serveur. J'ai fait installer PHP 5.2 via le gestionnaire de paquets. Je l'ai supprimé pour installer PHP 5.3.1 à la main. J'ai construit les paquets comme ça

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

Cela a installé PHP 5.3.1 dans / 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

Cependant, lorsque j'essaie de démarrer Apache, j'obtiens ceci.

 # /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]

Des idées à l'origine de cette erreur? Toutes les références que je peux voir ont à voir avec la construction de paquets php5 pour php4 ou similaires. PHP4 n'a jamais été installé sur cette machine.

baudtack
la source

Réponses:

11

en fait, ce que James Hackett a dit était plus ou moins ce qui fonctionnait pour moi.

Mon problème était que j'ai construit PHP avant d' installer Apache (j'ai construit PHP à partir du dernier tronc et installé Apache2 via APT).

Donc, quand j'ai rencontré l'erreur qui a rencontré un symbole indéfini (le module qui n'est pas trouvé est arbitraire btw.), J'ai fait ce qui suit:

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

et tout fonctionnait très bien.

Le capitaine évident se cachait de moi, bien sûr car si vous refaites juste sans faire distclean && configure, make compile juste les nouveaux symboles ce qui n'est évidemment pas suffisant ;-)

Structuré
la source
3

J'ai eu ce même problème et ce que j'ai fait a été de supprimer mon répertoire source php, de ré-extraire l'archive tar puis de recompiler et tout a bien fonctionné.

J'avais précédemment installé php sur ce système sans apache, puis j'avais essayé de réinstaller php à partir du même répertoire source avec des paramètres de configuration différents.

James Hackett
la source
1

Vous avez construit php5 mais vous n'avez pas reconstruit la colle entre apache et php5. Puisque vous utilisez mod_php5, il échoue (logique).

Vous pouvez peut-être exécuter le script php grâce à fastcgi (je suppose que votre php 5.3.1 intégré est correct), mais de toute façon je vous recommande d'agir d'une autre manière.

C'est assez méchant de construire un logiciel à la main sur un serveur de production. De plus, PHP5 est un gros logiciel, vous ne devriez vraiment pas le faire à des fins de maintenance et de sécurité.

La bonne façon d'y parvenir, si vous avez vraiment besoin de cette version, est de rétroporter le package. (oui, emballage!)

Cela demande un peu de connaissances et de temps en matière d'emballage. Vous pouvez obtenir les sources d'empaquetage avec:, à apt-get source php5condition d'avoir une source deb-src dans /etc/apt/sources.list

zecrazytux
la source
Ce n'est pas un serveur de production. C'est juste notre serveur de développement et j'essaie de comprendre quoi, si quoi que ce soit php 5.3 se cassera dans notre système.
baudtack
1
"C'est assez désagréable de construire un logiciel à la main sur un serveur de production. De plus, PHP5 est un gros logiciel, vous ne devriez vraiment pas le faire à des fins de maintenance et de sécurité." Sur la plupart des distributions, c'est le seul moyen de rester à jour. Ubuntu par exemple, n'a que 5.2.10 aussi stable dans ses référentiels qui ont été publiés en juin 2009. Personnellement, je trouve plus dangereux pour la sécurité d'utiliser des pré-packages car ils ont beaucoup de choses supplémentaires intégrées que vous ne pouvez pas besoin et peut dépouiller si vous les construisez vous-même. De plus, vous pouvez rester à jour.
Andy Shellam
1

pour ceux d'entre vous rencontrant l'erreur zend_parse_paramater de apache2, lors du chargement de libphp5.so:

/apache2.conf: erreur de syntaxe sur la ligne 1 de /etc/apache2/mods-enabled/php5.load: impossible de charger /usr/lib/apache2/modules/libphp5.so dans le serveur: / usr / lib / apache2 / modules / libphp5.so: symbole non défini: zend_parse_parameters

jetez un oeil à la sortie ./configure. si vous recevez un message disant quelque chose de similaire à:

configure: avertissement: versions de bison prises en charge pour la régénération des analyseurs Zend / PHP: 1,28 1,35 1,75 1,875 2,0 2,1 2,2 2,3 2,4 2,4,1 (trouvé: aucun).

essayez d'installer bison: sudo apt-get install bison

puis faites distclean puis ./configure ... puis faites ensuite make -i install

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


la source
Il ne devrait être nécessaire de reconstruire les analyseurs zend que si vous avez modifié le code source PHP d'une manière ou d'une autre. Je n'ai jamais installé de bison sur aucun serveur de production et je n'ai jamais eu de problème.
Andy Shellam
0

Comme @zecrazytux l'a indiqué, avez-vous installé les packages apache-dev appropriés? PHP aurait bien pu construire sans eux, même si vous lui avez dit où ils étaient. Vous devez regarder la sortie ./configure.

staticsan
la source