h-o: PHP5 auf lokalem und auf Webserver mit .htaccess erzwingen

hi,

sowohl auf dem Webserver als auch auf meinem lokalen Testserver (letzterer unter Windows, beide unter Apache 2.2.8) sollen PHP- und normale HTM-Dateien mit PHP5 interpretiert werden.

Mein Provider empfiehlt, hierzu die nachfolgende Anweisung in die .htaccess zu übernehmen, was auch anstandslos funktioniert:

AddHandler application/x-httpd-php5 .php .htm

Auf meinem lokalen Webserver haut das aber nicht hin. Dort wird zwar in der httpd.conf mit der Anweisung

LoadModule php5_module e:/programme/php/php5apache2_2.dll

das PHP5-Modul geladen (CGI klappt nicht), doch die obige AddHandler-Anweisung in der .htaccess bewirkt auf dem lokalen Server nicht die erhoffte Wirkung (PHP-Dateien werden zum "Download" angeboten, HTM-Dateien ausgeführt aber ohne Interpretation des PHP-Codes).

Stattdessen lässt die Anweisung

AddHandler application/x-httpd-php .php .htm

(also x-httpd-php statt x-httpd-php5) auf dem lokalen Testserver die PHP- und HTM-Dateien mit PHP5 interpretieren. Wenn ich diese .htaccess-Datei mit der zweiten AddHandler-Anweisung auf den echten Webserver übertrage, laufen dort die PHP- und HTM-Dateien jedoch mit PHP4 statt PHP5.

Kann ich den Handler-Namen application/x-httpd-php bzw. application/x-httpd-php5 nicht vereinheitlichen? Die .htaccess sollte ja auf beiden Servern identisch sein.

Oder gibt es für die .htaccess die Möglichkeit einer bedingten Anweisung in Form von

if 'HTTP_HOST' == 'localhost'
 AddHandler application/x-httpd-php .php .htm  # lokaler Server
else
 AddHandler application/x-httpd-php5 .php .htm  # Webserver
end-if

AddHandler durch die ähnliche AddType-Anweisung zu ergänzen oder zu ersetzen bringt übrigens auch nichts.

Danke schon mal für alle Hinweise im voraus.

  1. Hallo,

    hi,

    sowohl auf dem Webserver als auch auf meinem lokalen Testserver (letzterer unter Windows, beide unter Apache 2.2.8) sollen PHP- und normale HTM-Dateien mit PHP5 interpretiert werden.

    Warum .htm(l)-Dateien? PHP-Code gehört in .php-Dateien. Wenn du verhindern willst (warum auch immer), dass jemand erkennt, dass die Seite durch PHP erzeugt wird, dann nimm mod_rewrite.

    das PHP5-Modul geladen (CGI klappt nicht)

    CGI hat eine schlechtere Performance als das Modul, weshalb dieses auch vorzuziehen ist.

    Auf meinem lokalen Server (XAMPP mit PHP5) wird application/x-httpd-php benutzt. Frage mal deinen Provider, ob er dir die Konfigurationsdatei zukommen lassen kann.

    Gruß

  2. hallo,

    Mein Provider empfiehlt, hierzu die nachfolgende Anweisung in die .htaccess zu übernehmen, was auch anstandslos funktioniert:
    AddHandler application/x-httpd-php5 .php .htm

    Eine Besonderheit deines Anbieters, der es sich damit "leicht" macht, unterschiedliche PHP-Versionen anzubieten. Das ".htm" solltest du da aber weglassen, PHP-Scripts bzw. alles, was PHP-Code enthält, sollte _immer_ die Endung .php erhalten.

    AddHandler application/x-httpd-php .php .htm

    Das ist die normale Vorgabe, und die wird auch von einem unter Windows eingesetzten Apache verstanden (aber auch hier wieder: laß das .htm da weg).

    Kann ich den Handler-Namen application/x-httpd-php bzw. application/x-httpd-php5 nicht vereinheitlichen?

    Solange dein lokaler Server unter Windows läuft, wird dir das kaum gelingen. Auf einem unixartigen System kannst du den Apache selber kompilieren.

    Die .htaccess sollte ja auf beiden Servern identisch sein.

    Warum?

    Oder gibt es für die .htaccess die Möglichkeit einer bedingten Anweisung in Form von
    if 'HTTP_HOST' == 'localhost'
    AddHandler application/x-httpd-php .php .htm  # lokaler Server

    So etwas gibt es, allerdings nicht in dieser Form. Sondern so:

      
       <IfModule php5_module>  
       SetHandler application/x-httpd-php5 .php  
       </IfModule>  
       <IfModule php4_module>  
       AddHandler application/x-httpd-php .php  
       </IfModule>
    

    Damit wird allerdings nur nach dem geladenen Modul unterschieden, nicht aber nach dem Servernamen. Du kannst über .htacces nun die LoadModule-Anweisung nicht beeinflussen, das kann nur dein Hoster. Aber lokal kannst du es mal testen und ebenfalls zwei unterschiedliche PHP-Versionen (Module) einbinden.

    Du könntest noch mit SetHandler oder mit ForceType probieren, ob du "application/x-httpd-php5" erzwingen kannst - habe ich aber selber noch nicht probiert, und das wäre auch nur für deinen lokalen Server relevant.

    Am besten aber stellst du die Frage nach "application/x-httpd-php5" deinem Hoster.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Erst mal danke für die Antworten.

      Nochmals ganz kurz: *.php-Dateien (das mit .htm betrifft nur ganz wenige Dateien und soll hier nicht im Vordergrund stehen) werden wie folgt interpretiert:

      • keine besondere Anweisung in .htaccess: PHP5 (lokal) bzw. PHP4 (Web)
      • AddHandler application/x-httpd-php5 .php: gar nicht (lokal) bzw. PHP5 (Web)

      Erst gestern ist mir aber folgendes aufgefallen. Wenn statt AddHandler (wie von meinem Provider empfohlen) folgende Angabe in der .htaccess mache...

      • AddType application/x-httpd-php .php

      ...dann wird nicht nur bei meinem Windows-Testserver, sondern auch auf dem Webserver meines Providers PHP5 ausgeführt (wie von mir gewünscht).

      Warum muss bei AddHandler hinten ...-httpd-php5 geschrieben werden für PHP5, bei AddType dagegen genügt ...-httpd-php (ohne -php5)?

      Die .htaccess sollte ja auf beiden Servern identisch sein.
      Warum?

      Weil ja alle (geänderten) Dateien regelmäßig mit dem Webserver abgeglichen werden.

      Wenn also in der .htaccess ein "AddHandler application/x-httpd-php" drinsteht (damit auf dem lokalen Testserver PHP5 läuft) und diese .htaccess auf den Webserver übertragen würde, dann würde dort nicht PHP5, sondern PHP4 laufen und es spätestens bei Funktionen wie stripos() ein paar Problemchen geben :-)

      Im Prinzip ist das Ganz ja jetzt (wenn auch mehr durch Zufall) gelöst, indem nicht die AddHandler, sondern die oben genannte Anweisung "AddType application/x-httpd-php .php" in den .htaccess geschrieben wird und hierdurch auf beiden Servern der gewünschte PHP-Interpreter geladen wird.

      Trotzdem kapier ich nicht, warum der Webserver bei AddType kein "-php5" benötigt, in der AddHandler-Anweisung dagegen schon.

      1. Hello,

        ich habe da noch eine nette kleine Beschreibung gefunden, die zumindestr etwas Überblick gibt:

        http://www.xinux.de/docs/skripte_pdf/apache.pdf

        Du müsstest also mit dem Modul mod_mime verhandeln, worum es geht.
        http://httpd.apache.org/docs/2.2/mod/mod_mime.html

        Ein harzliches Glückauf

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de