Apache und PHP4 und 5 als Modul gleichzeitig
dedlfix
- webserver
echo $begrüßung;
Wenn man PHP 4 und PHP 5 gleichzeitig auf einem Apachen laufen lassen möchte, geht das ja nicht so einfach. Das sagen zumindest alle Dokumente, die ich dazu fand.
Es gibt zwar einige Lösungen, wie es "halbwegs" geht:
Aber um diese Lösungen geht es mir nicht. Ich suche die Gründe dafür, dass es nicht mit beiden Modul-Versionen in _einer_ Apache-Instanz geht. Oder vielleicht geht es ja doch? [2]
Ich setzte ja große Hoffnung in das in Gentoo umgesetzte Konzept, dessen Ankündigung ich irgendwann einmal las. In einem der neuesten Newsletter fand ich nun Hinweise zu diesem Gentoo-Konzept [3] dessen Freigabe ja auch nur noch ein paar Tage entfernt sein soll.
Doch leider wurde meine Hoffnung enttäuscht. Neben den üblichen Lösungsvorschlägen findet sich unter Mixed PHP4/PHP5 configuration - How to configure Apache to handle PHP4 and PHP5 noch eine Umschaltmöglichkeit [4] (wie auch schon aus Xampp bekannt).
Und auch dieser Satz findet sich dort: "Warning: It's not possible to run PHP4 and PHP5 module together in one Apache server, because both export the same symbols!" Und im Teil nach dem Komma scheint dann wohl auch der Hase im Pfeffer zu liegen.
Doch wie umfangreich sind diese "same symbols". Es kann sich ja wohl nicht nur um den Content-Type-Namen "application/x-httpd-php" handeln? Den zu patchen dürft ja nicht das Problem sein.
Vielleicht gibt es ja ein Dokument, das über diese "symbols" im Apachen ein paar Worte mehr verliert...
echo "$verabschiedung $name";
[1] meine derzeitige Lösung
[2] Was ich mir aber nicht vorstellen kann, sonst hätte sicher jemand diese Lösung schon publiziert.
[3] Hätte ich sicher auch schon früher finden können, bei entsprechend intensiverer Suche. :-)
[4] genau genommen irgendwo im PHP Upgrading Guide
Hi dedlfix,
Aber um diese Lösungen geht es mir nicht. Ich suche die Gründe dafür, dass es nicht mit beiden Modul-Versionen in _einer_ Apache-Instanz geht. Oder vielleicht geht es ja doch?
Ohne es zu wissen, glaube ich folgendes - so wird PHP ja als Modul geladen:
LoadModule php4_module "C:/Server/xampp/php/php4/php4apache2.dll"
AddType application/x-httpd-php .php
Und so über CGI:
ScriptAlias /php4/ "C:/Server/xampp/php/php4/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php4/php.exe"
(in diesem Beispiel jetzt unter Windows mit XAMPP, aber das macht ja keinen großen Unterschied)
Im zweiten Fall (über CGI) kannst du statt application/x-httpd-php auch irgend/etwas verwenden, weil du es durch AddType ja selber festlegst - wenn du hier zwei verschiedene Mime-Types verwendest kannst du ja eben auch zwei PHP Versionen über CGI realisieren.
Im ersten Fall (als Modul) wird die Action für application/x-httpd-php nirgendwo von mir festgelegt - es scheint, als würde das Modul das so zur Verfügung stellen bzw. festlegen. Und es legt eben sowohl das PHP4, als auch das PHP5 Modul so fest, weshalb du hier keine zwei Versionen parallel laufen lassen kannst ohne das diese in Konflikt miteinander geraten. Vermutlich würde aber es mit einer leichten Modifizierung des Quellcodes aber gehen...
Soweit zumindest meine Gedanken zu diesem Thema ;-)
MfG, Dennis.
echo $begrüßung;
Im zweiten Fall (über CGI) kannst du statt application/x-httpd-php auch irgend/etwas verwenden, weil du es durch AddType ja selber festlegst - wenn du hier zwei verschiedene Mime-Types verwendest kannst du ja eben auch zwei PHP Versionen über CGI realisieren.
Ja, so machen es die Versionen, die ein oder beide PHP-CGIs in den Apachen einbinden.
Im ersten Fall (als Modul) wird die Action für application/x-httpd-php nirgendwo von mir festgelegt - es scheint, als würde das Modul das so zur Verfügung stellen bzw. festlegen.
Diese Stelle fand ich schon mal in den PHP-Quelltexten. (Ich nehme an, dass es die richtige war.) Da steht in PHP4 und 5 das selbe drin.
Vermutlich würde aber es mit einer leichten Modifizierung des Quellcodes aber gehen...
Soweit war das ja mein Gedankengang. Doch ich denke, dass diese Lösung viel zu simpel ist als dass da nicht auch schon Gentoos PHP-Betreuer oder andere draufgekommen wären, die mehr von der Materie des Zusammenspiels zwischen PHP-Modul und dem Apachen wissen als ich.
echo "$verabschiedung $name";
Hallo,
Vermutlich würde aber es mit einer leichten Modifizierung des Quellcodes aber gehen...
Soweit war das ja mein Gedankengang. Doch ich denke, dass diese Lösung viel zu simpel ist als dass da nicht auch schon Gentoos PHP-Betreuer oder andere draufgekommen wären, die mehr von der Materie des Zusammenspiels zwischen PHP-Modul und dem Apachen wissen als ich.
Hast du auch schon mal daran gedacht, dass die einfach "betriebsblind" sind und gar nicht auf die Idee kommen, mit eingefahrenen Konventionen zu brechen?
Ich denke nämlich auch, dass application/x-httpd-php ein MIME-Typ ist, der im Apachen nur intern verwendet wird, und den man deswegen auch problemlos anders nennen könnte - aber vielleicht sind die Apache/PHP-Programmierer zu sehr in ihren eigenen Konventionen gefangen, um das ernsthaft in Betracht zu ziehen.
So long,
Martin
echo $begrüßung;
Hast du auch schon mal daran gedacht, dass die einfach "betriebsblind" sind und gar nicht auf die Idee kommen, mit eingefahrenen Konventionen zu brechen?
Ja, aber den Gedanken verwarf ich wieder. So viele können nicht einfach betriebsblind sein, oder?
Ich werd mal noch ein bisschen auf Antworten warten und ansonsten mal einen Selbst-(Patch&Compile)-Versuch starten.
echo "$verabschiedung $name";
echo $begrüßung;
Ich werd mal noch ein bisschen auf Antworten warten und ansonsten mal einen Selbst-(Patch&Compile)-Versuch starten.
Also... der erste Versuch ist misslungen.
System ist immer noch Gentoo¹⁾ mit diesem Apache-Paket: net-www/apache-2.0.54-r30
ebuild {php-4.3.11/php-5.0.4.ebuild} unpack
jeweils an alle "application/x-httpd-php" eine 4 oder 5 angehängt.
ebuild ... compile
ebuild ... install
ebuild ... qmerge
Konfigurationsdateien angepasst (/etc/conf.d/apache2 und die unter /etc/apache2/modules.d)
/etc/init.d/apache2 start
Die Requests wurden einfach nicht beantwortet. Der Browser wartete ewig. Fehlermeldungen und interessante Logfile-Einträge gabs auch keine.
echo "$verabschiedung $name";
¹⁾ extra ein neues in einer VM installiert
Hi dedlfix,
Also... der erste Versuch ist misslungen.
jeweils an alle "application/x-httpd-php" eine 4 oder 5 angehängt.
Hm, das wundert mich jetzt ehrlich gesagt schon etwas ... woran könnte es denn sonst noch liegen? Mir fiel gerade so spontan der Apache ein, wäre es möglich, dass da bereits x-httpd-php irgendwo hinterlegt ist?
Die Requests wurden einfach nicht beantwortet. Der Browser wartete ewig. Fehlermeldungen und interessante Logfile-Einträge gabs auch keine.
Hast du das Logging Level auch mal ganz hoch gesetzt? Und den Timeout vielleicht noch runter, damits schneller geht?
MfG, Dennis.
echo $begrüßung;
Also... der erste Versuch ist misslungen.
jeweils an alle "application/x-httpd-php" eine 4 oder 5 angehängt.Hm, das wundert mich jetzt ehrlich gesagt schon etwas ... woran könnte es denn sonst noch liegen? Mir fiel gerade so spontan der Apache ein, wäre es möglich, dass da bereits x-httpd-php irgendwo hinterlegt ist?
Wie ich ja bereits vermutete liegt der Hund doch tiefer begraben. Bei meinem nächster Versuch habe ich noch die Bezeichner, die mod_info zu den PHP-Modulen ausgab, eindeutig umbenannt. Es handelte sich dabei um php_value, php_flag, php_admin_value, php_admin_flag und PHPINIDir. Die bekamen alle ein 5 hinter das 'php'. Das PHP4-Modul hab ich so gelassen. Die Namen der Module waren bereits unterschiedlich. Das PHP4-Modul heißt sapi_apache2.c und das 5er mod_php5.c.
Genützt hat das nichts. Das einzelne Einbinden der Module lief ohne Probleme. Mit beiden gleichzeitig konnte ich zwar mod_status und mod_info zu einer Ausgabe bewegen - das ging bei Versuch 1 auch schon nicht. Mir fiel aber auf, dass o.g. Bezeichner im PHP5-Modul wieder den "Ohne-5-Namen" trugen. Und außerdem gab es diesmal Segmentation faults beim Aufruf von PHP-Scripten.
Damit beende ich diese Versuche und widme mich dem Sammeln von Erfahrung beim Umsetzen der bisher bekannten Lösungsvorschläge, vorwiegend einer "ordentlichen" Zwei-Instanzen-Variante. Bisher war meine zweite Instanz ein Xampp ohne m und f (=FTP).
echo "$verabschiedung $name";
Hi Martin,
Ich denke nämlich auch, dass application/x-httpd-php ein MIME-Typ ist, der im Apachen nur intern verwendet wird, und den man deswegen auch problemlos anders nennen könnte.
Richtig, du kannst das (bei der CGI-Version auch ohne Modifikation des Quellcodes) problemlos tolle/sache oder script/php-parsed nennen - ganz nach belieben.
MfG, Dennis.
Hi dedlfix,
Im ersten Fall (als Modul) wird die Action für application/x-httpd-php nirgendwo von mir festgelegt - es scheint, als würde das Modul das so zur Verfügung stellen bzw. festlegen.
Diese Stelle fand ich schon mal in den PHP-Quelltexten. (Ich nehme an, dass es die richtige war.) Da steht in PHP4 und 5 das selbe drin.
Darf ich fragen wo? (Bin zu faul zum Suchen *fg*)
Wenn man da das eine abändert, z.B. auf application/x-httpd-php5 und dann
AddType application/x-httpd-php5 .php5
in der httpd.conf verwendet kann ich mir gut vorstellen, dass das funktioniert.
Soweit war das ja mein Gedankengang. Doch ich denke, dass diese Lösung viel zu simpel ist als dass da nicht auch schon Gentoos PHP-Betreuer oder andere draufgekommen wären, die mehr von der Materie des Zusammenspiels zwischen PHP-Modul und dem Apachen wissen als ich.
Wie Martin dir ja bereits gesagt hat - außerdem, warum sollte man zwei PHP Versionen als Modul haben? Was spricht gegen zwei PHP Versionen über CGI? Ich habe mir eh mal sagen lassen, dass die CGI-PHP-Version sicherheitstechnisch für den Mehrbenutzter-Betrieb vorteilhafter, besser bzw. leichter zu handhaben sei.
MfG, Dennis.
echo $begrüßung;
Diese Stelle fand ich schon mal in den PHP-Quelltexten. (Ich nehme an, dass es die richtige war.) Da steht in PHP4 und 5 das selbe drin.
Darf ich fragen wo? (Bin zu faul zum Suchen *fg*)
So schwer ist das mit dem Suchen nicht. Auspacken und suchen lassen. Der Midnight Commander fand in PHP 4.4.0 und 5.0.5 für "application/x-httpd-php" folgende Dateien (Readmes ausgelassen):
/sapi/apache2handler/sapi_apache2.c (Zeilen 60 und 61 bzw. 62 und 63)
/sapi/apache2filter/sapi_apache2.c (Zeilen 510, 641 und 643 bzw. 507, 647 und 649)
/sapi/apache/mod_php4.c (Zeilen 912 und 913 bzw. mod_php5.c Zeilen 921 und 922)
/main/php.h (Zeile 244 bzw. 235)
/sapi/apache_hooks/mod_php5.c (nur 5.0.5, Zeilen 1392 und 1393)
warum sollte man zwei PHP Versionen als Modul haben?
Es gibt schon einige Gründe, auch wenn sie für der meisten kaum von Bedeutung sind.
echo "$verabschiedung $name";