Apache /PHP4+PHP5 als cgi

Zephyrus

Debian und FreeBSD
Beim Aufruf von http://server/phpinfo.php5 erscheint:

The requested URL /usr/local/php5/bin/php/phpinfo.php5 was not found on this server.

Habe bestimmt irgendwas mit den Pfaden falsch gemacht, oder?

Als Anleitung hatte ich:
http://wiki.bsdforen.de/index.php/Apache_mit_PHP4_und_PHP5_als_CGI_installieren

httpd.conf:
DocumentRoot "/usr/local/www/apache22/data"

<Directory "/usr/local/www/apache22/data/cgi-bin/">
AllowOverride None
Options None
Order deny,allow
Allow from localhost
</Directory>

<IfModule dir_module>
DirectoryIndex index.html index.php index.php5 index.php4
</IfModule>

ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin/"
ScriptAlias /cgi/ "/usr/local/www/apache22/data/cgi-bin/"

Action php4-script "/usr/local/php4/bin/php"
AddHandler php4-script .php .php4
Action php5-script "/usr/local/php5/bin/php"
AddHandler php5-script .php5
 
Wolltest Du vielleicht http://server/cgi-bin/phpinfo.php5 bzw. http://server/cgi/phpinfo.php5 aufrufen?

Wo liegt den die Datei phpinfo.php5 ?

Grüße paefchen
 
Code:
Action php4-script "/usr/local/php4/bin/php"
AddHandler php4-script .php .php4
Action php5-script "/usr/local/php5/bin/php"
AddHandler php5-script .php5
Das Action ist nicht korrekt (hat eine URI als Parameter und kein Dateisystempfad). Also brauchst du erst einmal die Aliase dafür und Berechtigungen für die Alias-Dirs:

Code:
ScriptAlias /php4/ "/usr/local/php4/bin/"
<Directory "/usr/local/php4/bin">
    Options FollowSymLinks
    Order allow,deny
    Allow from all
    AllowOverride None
</Directory>
AddType application/x-httpd-phpcgi-4 .php .php4
Action application/x-httpd-phpcgi-4 "/php4/php"

ScriptAlias /php5/ "/usr/local/php5/bin/"
<Directory "/usr/local/php5/bin">
    Options FollowSymLinks
    Order allow,deny
    Allow from all
    AllowOverride None
</Directory>
AddType application/x-httpd-phpcgi-5 .php5
Action application/x-httpd-phpcgi-5 "/php5/php"

In "/usr/local/php4/bin/" bzw. "/usr/local/php5/bin/" liegt dann jeweils das CGI-Binary mit dem Namen "php". (Der Apache-User hat dort Rechte?)

Der Directory-Block und ScriptAliase von deinem Code ist hier uninteressant. Einen Directory-Block für dein Document-Root wirst ja wo anders stehen haben.

Lässt sich natürlich auch mit Handlern machen. Ist halt pers. Gewohnheit es so zu machen.

Nebenbei: Als CGI musst du nur eines laufen lassen. Das andere kann auch als Modul eingebunden sein.

Deine 2 Testdateien legst dann einfach ins Verzeichnis "/usr/local/www/apache22/data" und rufst sie über localhost auf.
 
Hallo,

das klingt ja interessant. Ich hätte dazu ne dumme Frage. Hast Du php4-cgi und php5-cgi über die Ports installiert? Wenn ja, wie hast Du es hinbekommen, daß die extensions (also php-Module) von php4-cgi nicht in /usr/local/include/php/ nach php.h suchen, sondern in /usr/local/php4/include/php/ und umgekehrt mit den php5-extensions genauso? Dann gibts Versionskonflikte mit einigen Modulen wie ming. php5 arbeitet mit der aktuellen Version, php4 nicht. D.h. hier müßte die Extension auch in nem anderen Verzeichnis nach Ming suchen. Wie löst man das?

Gruß
Sirko
 
Hi.

Wie ich weiter oben beschrieb, bin ich nach der Anleitung von BSDForen.de Wiki vorgegangen, d.h. sowohl PHP4 als auch PHP5 von Hand kompiliert. Das kann ich generell nur empfehlen, da man ja meist seine eigene Vorstellungen umsetzen möchte, was alles mit einkompiliert sein soll bei PHP.

Alternativ versuch doch PHP4 als Modul und PHP5 als CGI mit den Ports.
 
Ich kann es nicht empfehlen, da man dann z.B. nicht sauber deinstallieren kann und auch portaudit die Installation dann nicht mit in die Prüfung einbezieht.

Die PHP Ports sind mittlerweile sowas von flexibel, das ist wirklich ganz gut gelöst. Gerade wenn man kompiliert, aber sogar als Package geht es sauber Erweiterungen nachzuinstallieren.
 
Also ich sehe da kein Problem drin, ein selber kompiliertes php zu deinstallieren. Man muss nur wissen, wie es geht. Und sobald eine neue Version erscheint, erfährt man das als gut informierter Admin sowieso und kann dann entscheiden, ob ein "update" sinnvoll ist oder sich noch nicht lohnt.
 
Na ja die Frage ist eher was man an Mehrwert hat einen Bogen um den Port-Tree zu machen.
Und da sehe ich keinen, ich sehe auch kein Mehrwert 2 PHP-Versionen nebeneinander Installieren zu wollen.
Wenn man es zum Testen braucht, dann nimmt man 2 jail, mountet via mount_null das webroot in beide jails. Das ist Komfortabler, leichter zu Administrieren und ist nicht son »Hirnfick« ;-)
Auch hat man die Wahl ob Mod oder CGI etc...
Wenn es aber nur um die machbarkeit geht, dann macht euch lieber eine echte Aufgabe, 4 und 5 parallel als Mod nutzen, auch das geht mit einigen Eingriffen ;-)
 
Okay, ich frage mal anders. Es ist ja kein Problem, beim build von php4/5-cgi einen unterschiedlichen PREFIX anzugeben. Wenn man dann allerdings noch über die Meta-Ports php4/5-extensions installieren will, klappt das nicht, weil diese z.B. php.h in /usr/local/include/php/main/ suchen und nicht in /usr/local/php4/include/php/main/ . Wie bringe ich den Ports bei, woanders zu suchen?
 
gar nicht ;-)
zumindest nicht ohne wild in Makefiles zu wurschteln die dann beim nächsten update vom Port-Tree wieder weg sind.
 
Wild in Makefiles zur wurschteln wäre ok. Wenn ich nur wüßte, wo...
Beim Bauen des Meta-Ports kann man an der Kommandozeile kann keine Optionen angeben?
 
Zurück
Oben