Bjoern: php4 und php5 parallel installieren

Hallö miteinander,

hat jemand von euch eine Idee, wie ich php4 und php5 parallel zum laufen bekomme auf meinem Win-Apache-Server ? Ich möchte gerne nach und nach meine php4-Skripte in php5-Skripte umschreiben. Dazu hätte ich gerne, dass alle ".php5"-Dateien mit php5 interpretiert werden und ".php"-Dateien mit php4.

Ich habe dazu bereits beide php installiert und meine httpd.conf folgendermassen angepasst:

LoadFile "C:\Programme\Apache\Apache2\php4\php4ts.dll"
LoadModule php4_module "C:\Programme\Apache\Apache2\php4\sapi\php4apache2.dll"
AddType application/x-httpd-php .php

Action application/x-httpd-php5 "C:\Programme\Apache\Apache2\php5\php-cgi.exe"
AddType application/x-httpd-php5 .php5

Allerdings funktioniert das nicht. Die ".php"-Dateien werden mit php4 interpretiert. Bei den ".php5"-Dateien kommt aber immer eine Fehlermeldung ("Bad Request: Your browser sent a request that this server could not understand.")
Hat jemand eine Idee, wie man dieses Problem lösen kann ? Danke schon einmal.

Bjoern

  1. hallo,

    hat jemand von euch eine Idee, wie ich php4 und php5 parallel zum laufen bekomme auf meinem Win-Apache-Server ?

    Ja, aber ich halte es für Unsinn.

    Ich möchte gerne nach und nach meine php4-Skripte in php5-Skripte umschreiben

    Mach es dir einfacher. Schreib grundsätzlich PHP-Scripte, dann hat sich das. Die Versionsnummer hintendranzuschreiben ist völlig überflüssig.

    Dazu hätte ich gerne, dass alle ".php5"-Dateien mit php5 interpretiert werden und ".php"-Dateien mit php4.

    Welche Unterschiede bestehen denn zwischen solchen Scripts? Ist es wirklich _zwingend_ nötig, zwischen *.php4 und *.php5 zu unterscheiden? Ich meine, das ist nicht nötig.

    LoadFile "C:\Programme\Apache\Apache2\php4\php4ts.dll"

    Welchen Sinn soll das machen? Die php4ts.dll gehört in einen Windows-Pfad, aber nicht in den Apache. Streiche das bitte sofort.

    LoadModule php4_module "C:\Programme\Apache\Apache2\php4\sapi\php4apache2.dll"

    Und was hindert dich, auf demselben Weg auch die php5apache2.dll einzubinden?

    AddType application/x-httpd-php .php

    Na bitte. Dein Apache kennt keinen Unterschied von *.php4 und *.php5-Dateien.

    Action application/x-httpd-php5 "C:\Programme\Apache\Apache2\php5\php-cgi.exe"

    Wo nimmst du denn eine "php-cgi.exe" her und was soll die? Wenn du das Modul php5apache2.dll laden läßt, kann dir die CGI-Variante wurscht sein.

    AddType application/x-httpd-php5 .php5

    Entscheide dich doch bitte dazu, "AddType" alle Typen mitzugeben, die da so stehen sollen.

    Allerdings funktioniert das nicht.

    Was funktioniert nicht? Welche Fehlermeldungen hast du in php_error, und welche in deinen Aüpache-logs?

    "Bad Request: Your browser sent a request that this server could not understand."

    Ich würde dir, wenn ich dein Server wäre, genauso antworten ;-)

    Grüße aus Berlin

    Christoph S.

    1. Hallo Christoph,

      Deine Antwort ist leider nicht sehr hilfreich. Aber vielleicht hast du ja noch eine andere Idee. Oder auch jemand anders. Vorerst zu deinen Fragen:

      Man kann nicht 2 php-Module laden innerhalb einer Installation. Also ist die Folgerung entweder beide php-Versionen als cgi zu laden oder eine als Modul und eine als cgi. Nun habe ich also 2 verschiedene 'AddType' angefügt: einen für die php-Dateien und einen für die php5-Dateien.

      Da ich meine php-Skripte (welche auch die alten php4-xml-Funktionen verwenden) nun objektorientiert (und mit neuen xml-Funktionen) umbauen möchte, ist die Unterscheidung zwingend nötig.

      Bei php5 heisst die cgi-Engine übrigens 'php-cgi.exe'. Einen php-Fehler gibt es nicht. Es gibt einen Webserver-Fehler "Fehler 400: Bad Request".

      Bjoern

      1. hi,

        Deine Antwort ist leider nicht sehr hilfreich.

        ok. Andere nennen das auch arrogant.

        Man kann nicht 2 php-Module laden innerhalb einer Installation.

        Doch, das kann man. Mir ist das aus Versehen schon passiert, als ich vergessen hatte, vor einer Zeile das Kommentarzeichen anzubringen.

        Also ist die Folgerung entweder beide php-Versionen als cgi zu laden oder eine als Modul und eine als cgi.

        Diese Alternative erscheint mir nur vordergründig als reizvoll, weil ich nach wie vor nicht nachvollziehen kann, was du für Unterschiede zwischen *.php4 und *.php5 machst. Mir ist auch kein einziger Provider bekannt, der (ausgenommen *.php3) solche Versionsnummern für wichtig hält  -  aber meine Kenntnis ist selbstverständlich arg beschränkt.

        Nun habe ich also 2 verschiedene 'AddType' angefügt: einen für die php-Dateien und einen für die php5-Dateien.

        Was inkonsequent geschehen ist. Leichter machst du es dir sowieso, wenn du die neuen MIME-Typen gleich in "mime.types" einträgst, das erspart dir diese "AddType"-Zeile in der httpd.conf.

        Da ich meine php-Skripte (welche auch die alten php4-xml-Funktionen verwenden) nun objektorientiert (und mit neuen xml-Funktionen) umbauen möchte, ist die Unterscheidung zwingend nötig.

        Nein, das sehe ich absolut anders. Es ist sehr zu begrüßen, wenn du Prinzipien der OOP befolgen willst, aber das hat mit deiner "PHP-Version" überhaupt nichts zu tun.

        Bei php5 heisst die cgi-Engine übrigens 'php-cgi.exe'.

        Selbstverständlich habe ich eine "php-cgi.exe" auch hier herumliegen, das ist es also nicht. Es geht einfach ums Prinzip, und da vermag ich trotz deiner Argumentation nicht einzusehen, daß du auf den Extensionen *.php4 und *.php5 beharren mußt.

        Prinzipiell kannst du dir natürlich auch auf Windows mehrere Apaches einrichten resp. konfigurieren. Setze beispielsweise einen Apache auf port 12345 und einen anderen auf port 23456. Das geht. Dann kann einer eben *.php4 und der andere kann *.php5.

        Glücklich ist so etwas trotzdem nicht. Es hat doch Gründe, weshalb mit dem Wechsel von PHP3 zu PHP4 plötzlich von den Software-Entwicklern selbst die Extension *.php als verbindlich vorgeschlagen wurde. Schreib deine Scripts alle so, daß sie mit PHP5 objektorientiert laufen, dann hast du das Problem, das dich im Moment zu beschäftigen scheint, nicht mehr und wir können uns allenfalls darüber unterhalten, ob auf einer Windows-Kiste überhaupt die "Modulvariante" sinnvoll und effektiv eingesetzt werden kann. Meines Erachtens kann sie das nicht. Und übrigens: welche Apache-Version fährst du denn?

        Grüße aus Berlin

        Christoph S.

        1. Hi!

          Und übrigens: welche Apache-Version fährst du denn?

          So wie es aussieht verwendet er einen Apache 2 Server, und keinen 1.3.xxxxxx.
          Das hat man schon beim ersten Post von ihm gesehen... (Apache2 in der Adresszeile)

          cu later!

          Marc Reichelt || http://www.marcreichelt.de/

          --
          Linux is like a wigwam - no windows, no gates and an Apache inside!
          Frage: Wie wechselt Bill Gates eine Glühbirne?
          Antwort: Gar nicht - er erklärt Dunkelheit(tm) zum Standard.
          SELFCode: ss:| zu:) ls:< fo:# de:> va:} ch:? sh:) n4:( rl:? br:^ js:( ie:% fl:( mo:)
          http://emmanuel.dammerer.at/selfcode.html
          1. Und übrigens: welche Apache-Version fährst du denn?

            So wie es aussieht verwendet er einen Apache 2 Server, und keinen 1.3.xxxxxx.
            Das hat man schon beim ersten Post von ihm gesehen... (Apache2 in der Adresszeile)

            Hi,

            Genau so ist es. Ich benutze Apache 2.0.47 (Win32)
            Sehr aufmerksam :-)

            Bjoern

        2. Hallo!

          Man kann nicht 2 php-Module laden innerhalb einer Installation.

          Doch, das kann man. Mir ist das aus Versehen schon passiert, als ich vergessen hatte, vor einer Zeile das Kommentarzeichen anzubringen.

          Hm, ich dachte immer das sei nicht möglich, da beide Module intern denselben Typ verwenden:

          AddType application/x-httpd-php .php

          AFAIK lässt sich das nur mit PHP-CGI verändern.

          Also ist die Folgerung entweder beide php-Versionen als cgi zu laden oder eine als Modul und eine als cgi.

          Diese Alternative erscheint mir nur vordergründig als reizvoll, weil ich nach wie vor nicht nachvollziehen kann, was du für Unterschiede zwischen *.php4 und *.php5 machst.

          ich schon.

          Mir ist auch kein einziger Provider bekannt, der (ausgenommen *.php3) solche Versionsnummern für wichtig hält

          Ich kenne auch keinen Provider der überhaupt PHP5 unterstützt.

          Nun habe ich also 2 verschiedene 'AddType' angefügt: einen für die php-Dateien und einen für die php5-Dateien.

          Was inkonsequent geschehen ist. Leichter machst du es dir sowieso, wenn du die neuen MIME-Typen gleich in "mime.types" einträgst, das erspart dir diese "AddType"-Zeile in der httpd.conf.

          Ich persönlich finde das unübersichtlicher.

          Da ich meine php-Skripte (welche auch die alten php4-xml-Funktionen verwenden) nun objektorientiert (und mit neuen xml-Funktionen) umbauen möchte, ist die Unterscheidung zwingend nötig.

          Nein, das sehe ich absolut anders. Es ist sehr zu begrüßen, wenn du Prinzipien der OOP befolgen willst, aber das hat mit deiner "PHP-Version" überhaupt nichts zu tun.

          Hm? Zum einen gibt es Änderungen an bestehenden Funktionen die nicht abwärtskompatibel sind, darüber hinaus gibt es einige Module (z.B. dom, simplexml, sqlite, soap, spl...) die schlicht und ergreifend bei PHP4 nicht dabei sind, einige wenige davon gibt es in PECL auch für PHP4, sind aber nicht im Standardumfang vorhanden.
          Dazu kommen die Neuerungen der ZE2, die ohne Ende nicht kompatible Änderungen enthält, und teilweise das OOP-Verhalten verändert.

          Siehe: http://www.zend.com/php5/

          Es sollte mit recht wenig Aufwand möglich sein Scripte von PHP4 unter PHP5 laufen zu lassen, aber darum geht es Bjoern ja nicht wenn ich ihn richtig verstanden habe. Er will seine Scripte nach und nach so umschreiben, dass sie von den neuen, nicht PHP4-kompatiblen Features von PHP5 Gebrauch machen, was ich sehr gut verstehen und nur unterstützen kann.
          Und hierfür finde ich seine Umsetzungs-Idee auch geeignet.

          Prinzipiell kannst du dir natürlich auch auf Windows mehrere Apaches einrichten resp. konfigurieren. Setze beispielsweise einen Apache auf port 12345 und einen anderen auf port 23456. Das geht. Dann kann einer eben *.php4 und der andere kann *.php5.

          Ich hatte vor einigen Tagen ja folgendes Posting zu diesem Thema geschrieben: </archiv/2004/7/86012/#m507953>

          Das ist meiner Meinung aber eher dafür geeignet, größere Projekte auf PHP5-Tauglichkeit zu testen. Bjoern will aber einzelne Scripte mit Hilfe der neuen PHP5 Features "refactoren".

          Schreib deine Scripts alle so, daß sie mit PHP5 objektorientiert laufen, dann hast du das Problem, das dich im Moment zu beschäftigen scheint, nicht mehr

          Hm? Es gibt Scripte dessen OOP mit PHP4 aber nicht mit PHP5 funktioniert, und anders herum. Außerdem sind die Scripte ja bereits vorhanden.

          und wir können uns allenfalls darüber unterhalten, ob auf einer Windows-Kiste überhaupt die "Modulvariante" sinnvoll und effektiv eingesetzt werden kann. Meines Erachtens kann sie das nicht.

          Jepp. Genausowenig wie auf Linux mit dem Worker-MPM des Apache2.

          @Bjoern: siehe hier für ein paar Ideen: http://www.sitepoint.com/blog-post-view.php?id=159852

          Was steht denn genau in der Error-Log des Apachen? Auch neu gestartet...?

          Grüße
          Andreas

          --
          SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
          1. Hi Andreas,

            Vielen Dank erstmal für das Verständnis des Problems. Es ist genau so.

            @Bjoern: siehe hier für ein paar Ideen: http://www.sitepoint.com/blog-post-view.php?id=159852

            Leider finde ich da nicht genau das, was ich suche. Sie eröffnen einfach einen "php5-Port" oder ein solches Verzeichnis. Da ich aber die Scripts wirklich einzeln umbauen möchte, sollten immer php4- und php5-Skripte in einem Verzeichnis liegen. Und ausserdem habe ich bereits einige Ports mit meinem Webserver verbunden. Und die Anzahl noch verdoppeln, ist nicht ganz so elegant.

            Was steht denn genau in der Error-Log des Apachen? Auch neu gestartet...?

            Folgende Zeile steht in meinem Apache-Error-Log:
              [Tue Aug 03 19:14:23 2004] [error] [client 127.0.0.1] Invalid URI in request GET /phpinfo.php5 HTTP/1.1
            Die Datei gibt's aber. Wenn ich die "*.php5"-Dateien mit dem php4-Modul interpretieren lasse, funktioniert es auch.

            So nebenbei: Mein Provider (hostpoint.ch) unterstützt php5 bereits. Man muss ihm halt mitteilen, was man gerne haben möchte.

            Gruss,
             Bjoern

            1. Hi Bjoern!

              @Bjoern: siehe hier für ein paar Ideen: http://www.sitepoint.com/blog-post-view.php?id=159852
              Leider finde ich da nicht genau das, was ich suche. Sie eröffnen einfach einen "php5-Port" oder ein solches Verzeichnis.
              Da ich aber die Scripts wirklich einzeln umbauen möchte, sollten immer php4- und php5-Skripte in einem Verzeichnis liegen.

              Dann lass das mit dem Port und Verzeichnis und unterscheide lediglich anhand der Endung.

              Was steht denn genau in der Error-Log des Apachen? Auch neu gestartet...?
              Folgende Zeile steht in meinem Apache-Error-Log:
                [Tue Aug 03 19:14:23 2004] [error] [client 127.0.0.1] Invalid URI in request GET /phpinfo.php5 HTTP/1.1
              Die Datei gibt's aber. Wenn ich die "*.php5"-Dateien mit dem php4-Modul interpretieren lasse, funktioniert es auch.

              Seltsam. Hast Du mal php ein logfile erstellen lassen? Gibt es eine Einstellung in der php.ini. Was wird hier reingeschrieben?

              Hm, kann es sein dass Du viele Extensions lädst, so dass PHP evtl. Konflikte mit den DLLs von PHP4 und PHP5 bekommt?

              An Deiner Stelle würde ich erstmal alle Extension in der php.ini deaktivieren. Dann würde ich mal in das Verzeichnis wechseln, wo Deine php.exe bzw. php-cgi.exe liegt, und da mal "php-cgi -i" ausführen. Wenn eine Art phpinfo-Ausgabe erfolgt, dann läuft php5 grundsätzlich.

              Evtl. würde ich es auch mal mit der php.exe in der httpd.conf versuchen.

              die install.txt von PHP 5 schlägt folgendes vor:

              ScriptAlias /php/ "c:/php/"
                 AddType application/x-httpd-php .php
                 Action application/x-httpd-php "/php/php.exe"

              Vielleicht ganz stupide das PHP5 Archiv nach c:\php entpacken und obige Syntax verwenden, nur eben mit "php5" also sowas

              ScriptAlias /php/ "c:/php/"
                 AddType application/x-httpd-php5 .php5
                 Action application/x-httpd-php5 "/php/php.exe"

              Naja, unter Windows helfen solche Sachen manchmal ;-)

              Server neu starten nicht vergessen. Evtl. würde ich testweise auch mal die derzeitige php.ini temporär umbenennen, und die php.ini-dist als php.ini dahin kopieren, um wirklich nah an den Standard-Einstellungen zu sein. Nur das Loggen in PHP würde ich dann mal versuchen.

              Falls es an der php.ini, bzw. den DLLs liegt (was ich eigentlich nicht so richtig glauben kann), könntest Du mit http://de3.php.net/manual/de/configuration.changes.php ein alternatives Extension-Verzeichnis für PHP4-Scripte definieren - jedenfalls müsste das theoretisch funktionieren wenn PHP4 als Modul läuft. Du könntest vorübergehend das PHP4 Modul testweise auch mal komplett deaktivieren...

              Wenn Du für PHP5 allerdings andere Module laden willst, als für PHP4, wird es IMHO recht schwierig, das ging vermutlich nur über eine 2. Apache-Instanz, könntest Du per mod_proxy dazu bewegen dass beide auf einem Port erreichbar sind, und Requests an .php5-Scripte an einen anderen Apache, leiten. Hm, wenn Du Glück hast kann man dem PHP-Binary per CGI auch den Pfad zur Konfigurations-Datei übergeben, aber das weiß ich nicht.

              So nebenbei: Mein Provider (hostpoint.ch) unterstützt php5 bereits. Man muss ihm halt mitteilen, was man gerne haben möchte.

              Oh! Naja, ich denke es ist noch zu früh das produktiv einzusetzen, es gibt noch verschiedene Probleme, z.B. mit Basic Auth. Dieses und einige andere Probleme werden in 5.0.1 behoben sein, soll AFAIK in den nächsten Tagen rauskommen. Aber ich denke in wenigen Monaten kann man das nach ausgiebigen Tests durchaus riskieren.

              Grüße
              Andreas

              --
              SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
              1. Hi Andreas,

                Im php-Logfile wird nichts hereingeschrieben. Hab den Eintrag in einer neuen php.ini ausgewählt. Aber das liegt wohl dran, dass schon ein Apache-Seitenfehler kommt.
                Hab aber glaub ein allgemeines Problem mit dem php5-cgi. Das php4-Modul ist nun draussen und nur noch das php5-cgi drin. Doch nichts rührt sich :-( Als Modul läuft php5.
                Als cmd-Aufruf funktioniert die php-cgi witzigerweise. Mit "php-cgi.exe -f file.php" kann ich sogar meine files schön auf php5 testen. Aber so komfortabel ist das ja nicht grad.

                Ich glaub, ich werd php5 nochmal neu in ein verzeichnis schieben und auf ein neues testen...
                Danke schon einmal für die vielen Lösungsvorschläge.

                Gruss,
                 Bjoern

                1. Hi Bjoern!

                  Wenn Du es irgendwie hinbekommst würde mich mal interessieren woran es gelegen hat!

                  Grüße
                  Andreas

                  --
                  SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
  2. Hi,

    hat jemand von euch eine Idee, wie ich php4 und php5 parallel zum laufen bekomme auf meinem Win-Apache-Server ?

    Schau Dir mal die aktuelle XAMPP-Distribution der Apache-Friends an. Dort werden sowohl PHP 4 als auch 5 installiert. Über eine Batchdatei kann dann zw. den Versionen schnell gewechselt werden.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  3. Ab wann werden die Provider voraussichtlich denn dann php5 unterstützen?

    1. Hallo Teiger,

      Ab wann werden die Provider voraussichtlich denn dann php5
      unterstützen?

      Das haengt ganz von deren System-Administratoren ab und ist nicht
      vorhersagbar.

      Grüße,
       CK

      --
      Ihr wisst nicht, wie man den Menschen dient. Wie sollt ihr wissen, wie man den Goettern dienen soll?
      http://wwwtech.de/
      1. Moin!

        Ab wann werden die Provider voraussichtlich denn dann php5
        unterstützen?

        Das haengt ganz von deren System-Administratoren ab und ist nicht
        vorhersagbar.

        Angesichts der Tatsache, dass sich mit PHP5 doch so einiges ändert, was im Zweifel eine Überarbeitung der Skripte erforderlich macht, würde ich vermuten, dass die Provider allenfalls dann, wenn sie häufig genug danach gefragt werden, einzelne Kunden auf einem eigenen Server auf PHP5 umstellen, um damit Erfahrungen zu sammeln. Version 5.0.0 ist nicht unbedingt sonderlich vertrauenerweckend, auch wenn sie schon reichhaltig getestet wurde. Irgendwas ist ja immer, und die Probleme sollen dann lieber erstmal andere ausmärzen.

        Insofern werden wir vielleicht so nach und nach einzelne Angebote mit "PHP5 dabei" für die Freiwilligen Anwender sehen, aber auf breiter Front wird diese Version vermutlich noch nicht sehr schnell implementiert werden. Vor allem noch sehr lange nicht zwangsweise. Ein Kunde, dem seine Skripte versagen, weil der Provider auf PHP5 umgestellt hat, ist sehr bald ein Ex-Kunde.

        - Sven Rautenberg