Mathias Brodala: Automagisch Quelltext beim Aufruf von *.phps anzeigen

Hallo.

Da es hin und wieder überaus nützlich wäre, sich den Quelltext von PHP-Scripten anzeigen zu lassen und nicht immer und ohne großen Aufwand entsprechende Symlinks angelegt werden können, suchte ich nach einer Möglichkeit, dies zu vereinfachen.

Das Mittel der Wahl sollte hierbei natürlich mod_rewrite sein.

Doch weder das Beispiel zur RewriteRule-Direktive noch Martins Erweiterung nützen bei mir etwas. Es wird immer die Ausgabe des verarbeiteten PHP-Scriptes an Stelle des erwarteten Quelltextes angezeigt. Lege ich jedoch einen Symlink an, funktioniert es wie erwartet.

Lässt sich das ganze überhaupt bewerkstelligen?

Gruß, Mathias

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
debian/rules
  1. Hi,

    Doch weder das Beispiel zur RewriteRule-Direktive noch Martins Erweiterung nützen bei mir etwas.

    bist Du sicher, dass Du mod_rewrite überhaupt (auf die Weise) verwenden kannst? Prüfe, ob die Konfigurationsdatei angezogen wird (z.B. durch Forcierung eines Internal Server Errors ;-)) und ob ein einfaches Rewriting durchgeführt wird.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah.

      Doch weder das Beispiel zur RewriteRule-Direktive noch Martins Erweiterung nützen bei mir etwas.

      bist Du sicher, dass Du mod_rewrite überhaupt (auf die Weise) verwenden kannst?

      Ja, absolut.

      Prüfe, ob die Konfigurationsdatei angezogen wird (z.B. durch Forcierung eines Internal Server Errors ;-))

      Funktioniert.

      und ob ein einfaches Rewriting durchgeführt wird.

      Funktioniert ebenfalls anstandslos.

      Einen schönen Dienstag noch.

      Gruß, Mathias

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      debian/rules
  2. Hi,

    Da es hin und wieder überaus nützlich wäre, sich den Quelltext von PHP-Scripten anzeigen zu lassen und nicht immer und ohne großen Aufwand entsprechende Symlinks angelegt werden können, suchte ich nach einer Möglichkeit, dies zu vereinfachen.

    Ist PHP als Modul installiert oder nicht?

    Was passiert, wenn Du z.B. mal für .php per ForceType das application/x-httpd-php-source angibst?

    Was sagt das Rewrite-Log?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo MudGuard.

      Ist PHP als Modul installiert oder nicht?

      Ja.

      Was passiert, wenn Du z.B. mal für .php per ForceType das application/x-httpd-php-source angibst?

      Dann wird mir der Quelltext angezeigt.

      Was sagt das Rewrite-Log?

      Folgendes:

      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (3) [per-dir /www/dev.noctus.net/php/addmark/] strip per-dir prefix: /www/dev.noctus.net/php/addmark/addmark.phps -> addmark.phps
      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (3) [per-dir /www/dev.noctus.net/php/addmark/] applying pattern '^(.+.php)s$' to uri 'addmark.phps'
      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (2) [per-dir /www/dev.noctus.net/php/addmark/] rewrite addmark.phps -> addmark.php
      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (3) [per-dir /www/dev.noctus.net/php/addmark/] add per-dir prefix: addmark.php -> /www/dev.noctus.net/php/addmark/addmark.php
      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (2) [per-dir /www/dev.noctus.net/php/addmark/] remember /www/dev.noctus.net/php/addmark/addmark.php to have MIME-type 'application/x-httpd-php-source'
      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (2) [per-dir /www/dev.noctus.net/php/addmark/] strip document_root prefix: /www/dev.noctus.net/php/addmark/addmark.php -> /php/addmark/addmark.php
      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (1) [per-dir /www/dev.noctus.net/php/addmark/] internal redirect with /php/addmark/addmark.php [INTERNAL REDIRECT]
      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8352a18/initial/redir#1] (3) [per-dir /www/dev.noctus.net/php/addmark/] strip per-dir prefix: /www/dev.noctus.net/php/addmark/addmark.php -> addmark.php
      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8352a18/initial/redir#1] (3) [per-dir /www/dev.noctus.net/php/addmark/] applying pattern '^(.+.php)s$' to uri 'addmark.php'
      127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8352a18/initial/redir#1] (1) [per-dir /www/dev.noctus.net/php/addmark/] pass through /www/dev.noctus.net/php/addmark/addmark.php

      Einen schönen Dienstag noch.

      Gruß, Mathias

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      debian/rules
      1. Hi,

        Hallo MudGuard.

        Ist PHP als Modul installiert oder nicht?
        Ja.
        Was passiert, wenn Du z.B. mal für .php per ForceType das application/x-httpd-php-source angibst?
        Dann wird mir der Quelltext angezeigt.

        Ok, grundsätzlich funktioniert also die Quelltextanzeige, das ist schon mal nicht schlecht.

        Was sagt das Rewrite-Log?
        Folgendes:
        127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (3) [per-dir /www/dev.noctus.net/php/addmark/] strip per-dir prefix: /www/dev.noctus.net/php/addmark/addmark.phps -> addmark.phps
        127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (3) [per-dir /www/dev.noctus.net/php/addmark/] applying pattern '^(.+.php)s$' to uri 'addmark.phps'
        127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (2) [per-dir /www/dev.noctus.net/php/addmark/] rewrite addmark.phps -> addmark.php
        127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (3) [per-dir /www/dev.noctus.net/php/addmark/] add per-dir prefix: addmark.php -> /www/dev.noctus.net/php/addmark/addmark.php
        127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (2) [per-dir /www/dev.noctus.net/php/addmark/] remember /www/dev.noctus.net/php/addmark/addmark.php to have MIME-type 'application/x-httpd-php-source'
        127.0.0.1 - - [12/Sep/2006:14:22:12 +0200] [dev/sid#816c2a8][rid#8348460/initial] (2) [per-dir /www/dev.noctus.net/php/addmark/] strip document_root prefix: /www/dev.noctus.net/php/addmark/addmark.php -> /php/addmark/addmark.php

        Der macht also nach dem phps -> php rewrite noch weiter.
        Hast Du mal probiert, das L-Flag zu setzen?

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hallo MudGuard.

          Hast Du mal probiert, das L-Flag zu setzen?

          Ja; ob mit oder ohne, das Resultat (die Rewrite-Vorgänge im RewriteLog) ist immer identisch.

          Einen schönen Dienstag noch.

          Gruß, Mathias

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          debian/rules
          1. hi,

            Hast Du mal probiert, das L-Flag zu setzen?

            Ja; ob mit oder ohne, das Resultat (die Rewrite-Vorgänge im RewriteLog) ist immer identisch.

            Und wenn du mal NS - not for internal subrequests - zusätzlich setzt?

            http://www.faqts.com/knowledge_base/view.phtml/aid/1698
            Hier wird auch noch das Flag PT - pass through to next handler - zusätzlich benutzt, klappt es vielleicht damit?

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hallo wahsaga.

              Hast Du mal probiert, das L-Flag zu setzen?

              Ja; ob mit oder ohne, das Resultat (die Rewrite-Vorgänge im RewriteLog) ist immer identisch.

              Und wenn du mal NS - not for internal subrequests - zusätzlich setzt?

              http://www.faqts.com/knowledge_base/view.phtml/aid/1698
              Hier wird auch noch das Flag PT - pass through to next handler - zusätzlich benutzt, klappt es vielleicht damit?

              Diese Seite hatte ich auch schon gefunden, aber keines der zusätzlichen Flags zeigt eine Wirkung.

              (PHP als CGI laufen zu lassen ändert übrigens auch nichts.)

              Einen schönen Dienstag noch.

              Gruß, Mathias

              --
              sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
              debian/rules
              1. hi,

                Diese Seite hatte ich auch schon gefunden, aber keines der zusätzlichen Flags zeigt eine Wirkung.

                (PHP als CGI laufen zu lassen ändert übrigens auch nichts.)

                Hm, dann wäre es als Workaround vielleicht erst mal praktikabel, .phps-Anfragen auf ein Script zu leiten, welches dann die Datei ohne s am Ende einzulesen versucht, und mit highlight_string() ausgibt.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Hallo wahsaga.

                  Diese Seite hatte ich auch schon gefunden, aber keines der zusätzlichen Flags zeigt eine Wirkung.

                  (PHP als CGI laufen zu lassen ändert übrigens auch nichts.)

                  Hm, dann wäre es als Workaround vielleicht erst mal praktikabel, .phps-Anfragen auf ein Script zu leiten, welches dann die Datei ohne s am Ende einzulesen versucht, und mit highlight_string() ausgibt.

                  Ja, das ist wohl momentan die einige Lösung.

                  Hier das Script, falls es irgendwann einmal jemand brauchen sollte:

                  error_reporting(E_ALL);  
                  header('content-type: text/html; charset=utf-8');  
                    
                  $str_phps = getenv('REDIRECT_URL');  
                  $str_php = $_SERVER['DOCUMENT_ROOT'] . substr($str_phps, 0, -1); # phps → php  
                    
                  if (is_file($str_php)) {  
                    
                    highlight_file($str_php);  
                    
                  }
                  

                  Anwendung:

                  RewriteRule ^(.+\.php)s$ /pfad/zu/obigem/script.php

                  Einen schönen Dienstag noch.

                  Gruß, Mathias

                  --
                  sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                  debian/rules
                  1. Hallo nochmal.

                    Anwendung:

                    RewriteRule ^(.+\.php)s$ /pfad/zu/obigem/script.php

                    Da ich die Backreference sowieso nicht verwende, besser so:

                    RewriteEngine On  
                    RewriteCond %{REQUEST_FILENAME} !-f # Nichts machen, falls *.phps doch als Datei vorliegt  
                    RewriteRule ^.+\.phps$ /pfad/zu/besagtem/script.php
                    

                    Einen schönen Dienstag noch.

                    Gruß, Mathias

                    --
                    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                    debian/rules
      2. Tach.

        Was sagt das Rewrite-Log?

        Folgendes: [...]

        So sieht das bei mir auch aus. Auch die zusätzlichen Flags ändern nichts daran, daß im zweiten Durchlauf der MIME-Type anscheinend wieder vergessen und letztlich die Datei doch wieder als PHP-Skript verarbeitet wird.

        Allerdings habe ich festgestellt, daß die ganze Geschichte funktioniert, wenn man die rewrite rule direkt in die httpd.conf einträgt (im Gegensatz zu einer .htaccess für das entsprechende Verzeichnis). Mit dieser Erkenntnis fand ich dann Bug #36590 im Apache Bugtracker...

        --
        Once is a mistake, twice is jazz.
        1. Hallo Blaubart.

          Allerdings habe ich festgestellt, daß die ganze Geschichte funktioniert, wenn man die rewrite rule direkt in die httpd.conf einträgt (im Gegensatz zu einer .htaccess für das entsprechende Verzeichnis).

          Bei mir zeigt auch dies keine Wirkung. Das RewriteLog ist identisch und das verarbeitete PHP-Script wird ausgeliefert.

          Einen schönen Dienstag noch.

          Gruß, Mathias

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          debian/rules
          1. Hallo nochmal.

            Allerdings habe ich festgestellt, daß die ganze Geschichte funktioniert, wenn man die rewrite rule direkt in die httpd.conf einträgt (im Gegensatz zu einer .htaccess für das entsprechende Verzeichnis).

            Bei mir zeigt auch dies keine Wirkung.

            Kommando zurück, es funktioniert. Allerdings nur im VirtualHost-Container selbst, nicht in einem Directory- und auch nicht in einem Location-Container.

            Einen schönen Dienstag noch.

            Gruß, Mathias

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            debian/rules
  3. Hi Mathias,

    Das Mittel der Wahl sollte hierbei natürlich mod_rewrite sein.

    Warum? Wenn PHP als Modul läuft setze für den entsprechenden Ordner doch mal ein

    AddType application/x-httpd-php-source .php

    und schaue ob es was wirkt ;-)

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Patch zur Verwendung von PATHINFO in JLog
    Was ich genau weiß, ist, dass es keinen Sinn hat darüber nachzudenken. Male dir neunundneunzig Variationen aus und du stolperst in Szenario Nummer hundert. (Andreas Steinhöffel, Die Mitte der Welt)
    1. Hallo Dennis.

      Das Mittel der Wahl sollte hierbei natürlich mod_rewrite sein.

      Warum? Wenn PHP als Modul läuft setze für den entsprechenden Ordner doch mal ein

      AddType application/x-httpd-php-source .php

      und schaue ob es was wirkt ;-)

      Dann sind die PHP-Scripte aber nicht mehr normal aufrufbar …

      Einen schönen Dienstag noch.

      Gruß, Mathias

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      debian/rules
      1. Hi Mathias,

        Dann sind die PHP-Scripte aber nicht mehr normal aufrufbar …

        Ah, ok - mir war nicht klar, dass dies als Bedingung gefordert war.

        Ich würde dem aber eh mit etwas Respekt gegenüber stehen - aktuell auf dem Server laufende und aufrufbare Scripte würde ich nicht spaßeshalber veröffentlichen, zumindest nicht in einem öffentlich zugänglichen Bereich. Zumal Scripte ja auch sensible Informationen enthalten können.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Patch zur Verwendung von PATHINFO in JLog
        Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher. (Albert Einstein)
        1. Hallo Dennis.

          Ich würde dem aber eh mit etwas Respekt gegenüber stehen - aktuell auf dem Server laufende und aufrufbare Scripte würde ich nicht spaßeshalber veröffentlichen, zumindest nicht in einem öffentlich zugänglichen Bereich. Zumal Scripte ja auch sensible Informationen enthalten können.

          Ja, habe ich alles bedacht. Diese Möglichkeit soll lediglich einen einfachen Weg darstellen, Quelltexte einzusehen. Sensible Daten und werden hier nirgends abgesichert.

          Einen schönen Mittwoch noch.

          Gruß, Mathias

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          debian/rules