PHP 5.3.1 Undefiniertes Symbol: OnUpdateLong-Fehler beim Apache-Start

9

Ich verwende Ubuntu 8.04 auf diesem Server. Ich hatte PHP 5.2 über den Paketmanager installiert. Ich habe es entfernt, um PHP 5.3.1 von Hand zu installieren. Ich habe die Pakete so gebaut

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

Dies installierte PHP 5.3.1 in / 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

Wenn ich jedoch versuche, Apache zu starten, erhalte ich dies.

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

Irgendwelche Ideen, was diesen Fehler verursacht? Alle Referenzen, die ich sehen kann, haben mit dem Erstellen von PHP5-Paketen für PHP4 oder dergleichen zu tun. PHP4 wurde noch nie auf diesem Computer installiert.

Baudtack
quelle

Antworten:

11

Eigentlich war das, was James Hackett sagte, mehr oder weniger das, was für mich funktionierte.

Mein Problem war, dass ich PHP erstellt habe, bevor ich Apache installiert habe (ich habe PHP aus dem neuesten Trunk erstellt und Apache2 über APT installiert).

Als ich auf den Fehler stieß, dass Apache auf ein undefiniertes Symbol stieß (das Modul, das nicht gefunden wird, ist übrigens willkürlich), habe ich Folgendes getan:

  1. make distclean auf der PHP-Quelle
  2. ./configure --prefix=/usr/local/php-5.3-svn --with-apxs2=/usr/bin/apxs2
  3. make && make install

und alles hat gut funktioniert.

Captain offensichtlich hat sich vor mir versteckt, denn wenn Sie nur neu machen, ohne distclean && configure zu machen, kompilieren Sie einfach die neuen Symbole, was offensichtlich nicht ausreicht ;-)

Strukturiert
quelle
3

Ich hatte das gleiche Problem und löschte mein PHP-Quellverzeichnis, extrahierte den Tarball erneut und kompilierte dann erneut und alles funktionierte einwandfrei.

Ich hatte zuvor PHP ohne Apache auf diesem System installiert und dann versucht, PHP aus demselben Quellverzeichnis mit unterschiedlichen Konfigurationseinstellungen neu zu installieren.

James Hackett
quelle
1

Sie haben php5 erstellt, aber den Kleber zwischen Apache und php5 nicht neu erstellt. Da Sie mod_php5 verwenden, schlägt dies fehl (logisch).

Möglicherweise können Sie dank fastcgi ein PHP-Skript ausführen (ich gehe davon aus, dass Ihr von Hand erstelltes PHP 5.3.1 in Ordnung ist), aber ich empfehle Ihnen trotzdem, auf andere Weise zu handeln.

Es ist ziemlich unangenehm, eine Software von Hand auf einem Produktionsserver zu erstellen. Darüber hinaus ist PHP5 eine große Software, die Sie aus Wartungs- und Sicherheitsgründen wirklich nicht tun sollten .

Der richtige Weg, dies zu erreichen, wenn Sie diese Version wirklich benötigen, besteht darin, das Paket zurück zu portieren. (Ja, Verpackung!)

Es erfordert ein wenig Verpackungswissen und Zeit. Sie können die Verpackungsquellen mit: apt-get source php5abrufen, vorausgesetzt, Sie haben eine deb-src-Quelle in /etc/apt/sources.list

zecrazytux
quelle
Es ist kein Produktionsserver. Es ist nur unser Entwicklungsserver und ich versuche herauszufinden, was, wenn irgendetwas in unserem System durch PHP 5.3 kaputt geht.
Baudtack
1
"Es ist ziemlich unangenehm, eine Software von Hand auf einem Produktionsserver zu erstellen. Außerdem ist PHP5 eine große Software, die Sie aus Wartungs- und Sicherheitsgründen wirklich nicht tun sollten." Bei den meisten Distributionen ist dies die einzige Möglichkeit, auf dem neuesten Stand zu bleiben. Ubuntu zum Beispiel hat nur 5.2.10 als stabil in seinen Repositorys, die bereits im Juni 2009 veröffentlicht wurden. Ich persönlich finde es eher ein Sicherheitsrisiko, Pre-Pakete zu verwenden, da dort viele zusätzliche Dinge eingebaut sind, die Sie möglicherweise nicht haben brauchen und können ausziehen, wenn Sie sie selbst bauen. Außerdem können Sie auf dem Laufenden bleiben.
Andy Shellam
1

für diejenigen unter Ihnen, bei denen der Fehler zend_parse_paramater von apache2 beim Laden von libphp5.so auftritt:

/apache2.conf: Syntaxfehler in Zeile 1 von /etc/apache2/mods-enabled/php5.load: /usr/lib/apache2/modules/libphp5.so kann nicht auf den Server geladen werden: / usr / lib / apache2 / modules / libphp5.so: undefiniertes Symbol: zend_parse_parameters

Schauen Sie sich die Ausgabe ./configure an. Wenn Sie eine Nachricht erhalten, die etwas Ähnliches sagt wie:

configure: warning: Bison-Versionen, die für die Regeneration der Zend / PHP-Parser unterstützt werden: 1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 (gefunden: keine).

Versuchen Sie, Bison zu installieren: sudo apt-get install bison

dann mache distclean dann ./configure ... dann mache dann -i install

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


quelle
Es sollte nur notwendig sein, die Zend-Parser neu zu erstellen, wenn Sie den PHP-Quellcode auf irgendeine Weise geändert haben. Ich habe Bison noch nie auf Produktionsservern installiert und hatte nie ein Problem.
Andy Shellam
0

Haben Sie, wie @zecrazytux angedeutet hat, die entsprechenden Apache-Dev-Pakete installiert? PHP hätte ohne sie gut bauen können, obwohl Sie ihm gesagt haben, wo sie sind. Sie müssen sich die Ausgabe ./configure ansehen.

staticsan
quelle