HowTo -- Plesk, PHP5 als Standard, PHP4 als CGI – wer möchte PHP6 als CGI

xeiko78

Registered User
Hi... habe viel probiert und gebastelt, habe gegooglet und gelesen und diese hier für mich beste Lösung erarbeitet. Vielleicht kann diese Version noch jemand gebrauchen. Oder es hat jemand noch Verbesserungsvorschläge.

Grund der Lösung, war einfach der Wunsch nach der Möglichkeit. :D


Los gehts --- In diesem Beispiel PHP4 als CGI

Download der Wunschversionen von

PHP: Hypertext Preprocessor oder
PHP Snapshots

Kompiliert euch Suexec z.B. nach

wie beschrieben, allerdings mit den Anpassungen in suexec.h (nach neutron):

Code:
#ifndef AP_HTTPD_USER
#define AP_HTTPD_USER "www-data"
#endif
Code:
#ifndef AP_LOG_EXEC
#define AP_LOG_EXEC "/var/log/apache2/suexec.log" /* Need me? */
#endif
Code:
#ifndef AP_DOC_ROOT
#define AP_DOC_ROOT "/var/www/vhosts"
#endif

besonders die letzte Änderung hier bewirkt, dass hinterher das php Binary im Pfad der jeweiligen Domain "/var/www/vhosts/domain.tld/bin" ausgeführt werden kann, ohne das das File dem FTP-Benutzer gehören muss und trotzdem immernoch eine eigene "php.ini" pro Domain verwendet werden kann. (macht bei mir noch paar Probleme)

Änderungen an der suexec.c (von Freel@ncer14):
Code:
/*
* Error out if the target name/group is different from
* the name/group of the cwd or the program.
*/
if ((uid != dir_info.st_uid) ||
(gid != dir_info.st_gid) ||
(uid != prg_info.st_uid) ||
(gid != prg_info.st_gid)) {
log_err("target uid/gid (%ld/%ld) mismatch "
"with directory (%ld/%ld) or program (%ld/%ld)\n",
uid, gid,
dir_info.st_uid, dir_info.st_gid,
prg_info.st_uid, prg_info.st_gid);
exit(120);
}

ändern in:
Code:
/*
* Error out if the target name/group is different from
* the name/group of the cwd or the program.
*/
[COLOR="red"]/* Disabled[/COLOR]
if ((uid != dir_info.st_uid) ||
(gid != dir_info.st_gid) ||
(uid != prg_info.st_uid) ||
(gid != prg_info.st_gid)) {
log_err("target uid/gid (%ld/%ld) mismatch "
"with directory (%ld/%ld) or program (%ld/%ld)\n",
uid, gid,
dir_info.st_uid, dir_info.st_gid,
prg_info.st_uid, prg_info.st_gid);
exit(120);
}
[COLOR="Red"]*/[/COLOR]


Soweit OK... nun zum Binary


Führt in eurer gewünchten PHP-CGI Version ein ./configure durch.

Auf die Konfiguration von PHP mittels ./configure will ich nicht naeher eingehen, da wohl jeder selbst wissen sollte welche Optionen benoetigt werden.
Erwähnt sollte sein:
PHP nicht fuer den Apache kompilieren.
Also weder --with-apxs noch --with-apxs2 werden angegeben.
Denn wird dies angegeben, wird das CGI-Modul nicht kompiliert.
Es sollte PHP statisch kompiliert werden sollte, also auf Konstrukte wie --with-mysql=shared,/usr
verzichtet man besser und dafür besser --with-mysql=/usr nutzen um ein statisches Kompilat zu erreichen.

Weiter...

Nachdem das configure-Script seine Arbeit getan hat, mittels make kompilieren. Wichtig, kein make install ausfuehren falls schon eine Version von PHP installiert ist.

Nach erfolgreichem Kompilieren in den jeweiligen Quellverzeichnissen in sapi/cgi wechseln.

Die Binary unter /var/www/vhosts/domain.tld/bin ablegen und gleiche Rechte wie dem Domaininhalt zuweisen. (das Verzeichnis „bin“ muß angelegt werden und mit entsprechenden Rechten versehen werden)

Da nicht alle Versionen den gleichen Namen haben können ist zu empfehlen die Hauptversionsnummer
(4, bzw. 6) an den Dateinamen zu hängen.
Dadurch haben wir dann in /var/www/vhosts/domain.tld/bin die beiden Dateien php4 und z.B. php6.

Unter "/var/www/vhosts/domain.tld/conf/" oder "/var/www/vhosts/domain.tld/subdomain/name/conf" (falls Subdomain) eine vhost.conf mit folgendem Inhalt anlegen:
Code:
ScriptAlias /httpdocs /var/www/vhosts/domain.tld/bin
Action application/x-httpd-php4-custom "/httpdocs/php4"
AddType application/x-httpd-php4-custom .php4

##kann eben auch erweitert werden um
Action application/x-httpd-php6-custom "/httpdocs/php6
AddType application/x-httpd-php6-custom .php6
domain.tld ersetzen mit euren Daten.

Ich habe mir wie man oben sieht unter
"/var/www/vhosts/domain.tld/bin" die php4 binary abgelegt.

Wer noch eine php.ini Datei "pro User" verwenden möchte, kopiert in den gleichen Pfad noch die entsprechende php.ini

Damit das ganze für Plesk funktioniert einmal:
Code:
/opt/psa/admin/sbin/websrvmng -a -v
ausführen und die vhost.conf wird für die jeweilige Domain mit verwendet.

Um es zu testen einfach eine info.php in das entsprechende Domain-Verzeichnis. Je nach Version mit mit php, php3, php4, php5, php6
Code:
<?php
phpinfo();
?>

Have Fun...
 
Back
Top