seth: apache 1.3.* mit php 4 und 5 unter windows

Beitrag lesen

gudn tach!

blabla
------
das im thema beschriebene stellte gestern fuer mich ein problem dar. per intensiver suchmaschinen-inanspruchnahme und parallelem ausprobieren konnte ich mir stueck fuer stueck eine loesung zusammenbasteln.
vielleicht nutzt es ja noch irgendwem oder mal mir selbst in ein paar monaten, wenn ich einen grossteil davon wieder vergessen habe.

aber vielleicht entdeckt ja auch Christoph Schn^W^Wjemand fehler oder hat verbesserungsvorschlaege, ergaenzende anmerkungen, ...

eingemachtes
------------
alles folgende bezieht sich auf windows (eigentlich sogar nur auf windows 2000 aber ich vermute, dass diesbezueglich zu windows xp kein wesentlicher unterschied besteht).

die pfade im folgenden seien:
<apache> z.b. c:\programme\apache group\apache
  <php4> z.b. c:\programme\php4
  <php5> z.b. c:\programme\php5
   <win> z.b. c:\winnt
<htdocs> z.b. c:\htdocs
(in der httpd.conf muessen die \ durch / ersetzt werden)

ein apache 1.3 mit einem php (entw. 4 oder 5) wahlweise als modul oder cgi-version ist kein problem, aber bereits tausendfach im internet beschrieben.
ein apache 1.3 mit php 4 und php 5 (gleichzeitig) jeweils als modul ist zwar lauffaehig, afais allerdings 1. nicht mit getrennten dateien php.ini und 2. nicht so, dass .php-files von php 4 und .php5-files von php 5 verwurstet werden.
ein apache 1.3 mit php 4 und php 5 jeweils als cgi-version ist moeglich, aber mir egal.
ein apache 1.3 mit php 4 als modul und php 5 als cgi-version ist moeglich und wird im folgenden behandelt.

apache 1.3 setze ich als installiert voraus, php 4 und php 5 seien zip-archiv-maessig entpackt worden und die fertigen dateien php.ini fuer beide php-versionen setze ich ebenfalls als gegeben voraus.

jetzt geht's also eigentlich bloss noch um die httpd.conf und die frage, wie man mit den verschiedenen dateien php.ini umgeht.
letzteres war naemlich mein groesstes problem. wie sage ich apache, dass er verschiedene dateien php.ini laden soll?

in welcher reihenfolge apache nach php.ini sucht, kann man im php-manual nachlesen. ergaenzend ist noch zu sagen, dass nicht nur nach php.ini, sondern auch nach php-apache.ini gesucht wird.

reihenfolge der gesuchten dateien:
<apache>\php-apache.ini
   <win>\php-apache.ini
<apache>\php.ini
   <win>\php.ini

die apache-umgebungsvariable PHPRC, die man in httpd.conf mit
  SetEnv PHPRC <php5>
setzen kann, hat nur auswirkungen auf die cgi-version und _nicht_ auf das modul. das wird auch durch den zweitaeltesten kommentar von php-manual - runtime configuration bestaetigt.
den kommentar darauf (also den drittaeltesten) kann ich jedoch nicht bestaetigen. ein setzen der system-umgebungsvariable PHPRC, z.b.
  set PHPRC=c:\ wurde bei mir von apache ignoriert.

dieses "SetEnv PHPRC <php5>" ist ja eigentlich schon die halbe loesung des problems. denn mithilfe dieser variable kann man ja apache einen pfad fuer php.ini fuer php 5 angeben.
hmm, nun ja, aber eben leider nicht pauschal.
wenn man naemlich in der registry den key
  HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath
angelgt und fuer php 4 mit <php4>\ befuellt, dann wird dieser pfad nicht nur fuers modul, sondern auch fuer die cgi-version uebernommen. grpmf!

mehr durch zufall probierte ich viel spaeter aber mal, die php.ini fuer php 4 ins <win> zu setzen. und tadaa: dann wird diese ini "ploetzlich" nur fuer php 4 uebernommen und fuer php 5 wird tatsaechlich die apache-umgebungsvariable benutzt.

die http.conf habe ich also um folgendes (nach den vielen "LoadModule") erweitert:

#php-kram
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php-source .phps
  LoadModule php4_module "<php4>/sapi/php4apache.dll"
  #specify the directory where php.ini is (only for cgi-version)
  SetEnv PHPRC <php5>

die apache-umgebungsvariable PHPRC habe ich wohlgemerkt _nicht_ mit dem pfad zu php 4, sondern mit dem zu php 5 gefuettert.

bei den vielen "AddModule" habe ich

AddModule mod_php4.c

ergaenzt. bei "DirectoryIndex" das sieht jetzt so aus:

<IfModule mod_dir.c>
    DirectoryIndex index.html index.htm index.php index.php4 index.php5
  </IfModule>

und bei den aliases habe ich noch folgende zeilen hinzugefuegt, um php 5 als cgi-version laufen zu lassen:

ScriptAlias /php5cgi/ "<php5>/"
  Action php5-script /php5cgi/php-cgi.exe
  AddHandler php5-script .php5

damit werden in zukunft alle dateien mit der endung .php5 mit php 5 bearbeitet. und alle dateien mit der endung .php oder .php4 werden mit php 4 bearbeitet.

was gibt's sonst noch zu sagen...
ach ja, entgegen vieler installations-beschreibungen habe ich keine php-datei ins verzeichnis <apache> kopieren muessen, allerdings habe ich die beiden php-verzeichnisse der system-umgebungsvariable path hinzugefuegt. die einzige datei, die ich verschieben/kopieren musste, war die php.ini von php 4.
so, keywords zur spaeteren suche habe ich jetzt auch noch untergebracht. dann sollte es das vorerst gewesen sein.

prost
seth