Sanny: Mit php auf Code der eigenen Seite zugreifen

Hallo,

ich weiss, es ist eine blutige Anfängerfrage (und wahrscheinlich recht dumm, aber ich weiss mir gerade nicht mehr anders zu helfen- ich nehme auch gerne Hilfe zur Selbsthilfe an!), aber:

Mein Problem:
ich möchte eine php-Funktion erstellen, mit der ich den Code des php-Dokuments ab einer bestimmten Zeile zurückgeben kann.

Sprich, in Pseudo-Code:

function gib_den_Code_dieses_Dokuments_ab_Zeile_soundso_aus {
   return Code_dieses_Dokuments_ab_Zeile_soundso (als String);
}

Wie mache ich das? Bzw., wo lese ich nach, wie das geht?
Danke!!

LG, Sanny

  1. Hallo Sanny,

    ich möchte eine php-Funktion erstellen, mit der ich den Code des php-Dokuments ab einer bestimmten Zeile zurückgeben kann.

    das ist etwas komplexer, als es den Anschein hat. Wie immer führen verschiedene Wege nach Rom, so auch hier. Abhängig davon was Du genau beabsichtigst, können die folgenden Konzepte für Dich völlig unsinnig sein. Daher ist es immer besser, ein paar Zeilen mehr zu verschwenden, um auch Hintergründe fürs Ansinnen zu liefern und Auskunft über PHP Version/Module zu geben.

    PHP hat einen Ausgabepuffer, den Du dazu nutzen kannst. In Deinem Fall musst Du Dir eine Funktion schreiben, die den Ausgabepuffer nach Zeilenenden durchsucht, zählt und bearbeitet. Diese würde muss dann ob_stat() als Parameter bekannt gegeben werden.

    Ebenso kann man auch mittels Tokenizer das Script und eingebundene andere Scripte rekursiv zerlegen und alle Ausgaben (echo, print, etc.) überschreiben, um die Ausgabe in einen Stream umzulenken. Ist sie da, ist das Vorgehen das gleiche: Nach Zeilenenden durchsucht, zählt und ausgeben. (Das wäre dann aber der Weg Paris->Erkner->Moskau->Rom ;)

    Gruß aus Berlin!
    eddi

    --
    Ach übrigens: X für'n U verkürzt Strecken nur scheinbar!
    1. Hallo,

      Wie immer führen verschiedene Wege nach Rom
      Das wäre dann aber der Weg Paris->Erkner->Moskau->Rom ;)

      wenigstens liegt Erkner auf der Paris-Moskau-Etappe noch einigermaßen am Weg. ;-)
      Nettes Fleckchen Erde übrigens, Erkner. Schön am Dämeritzsee gelegen; dicht genug an der Großstadt, dass man sie noch schnell erreicht; aber weit genug raus aus der Stadt, dass man ebensogut ruhige Natur haben kann.

      Gute Reise,
       Martin

      --
      Wichtig ist, was hinten rauskommt.
        (Helmut Kohl, 16 Jahre deutsche Bundesbirne)
  2. Hello,

    ich möchte eine php-Funktion erstellen, mit der ich den Code des php-Dokuments ab einer bestimmten Zeile zurückgeben kann.

    Im Prinzip kannst Du jede Textdatei ausgeben lassen, auch erst ab einer bestimmten Zeile. Den Bytestrom von Textdateien unterteilt man anhand von Zeilenendezeichen in Zeilen. Das kann man bei PHP mit verschiedenen Funktionen automatisch tun.

    Dazu solltest Du beachten, wohin geschreiben wird, also ob auf die Konsole, in den Ausgabestrom zum Browser oder sonstwohin. Denn alle diese "Kontexte" benötigen ihre spezielle Vorbehandlung.

    Wie soll die Zeile erkannt werden, ab der ausgegeben werden soll?

    Hast Du (also Dein PHP) Zugriff auf die Datei?

    Wenn Du z.B. eine Datei ab der 7. Zeile (wir zählen hier mal ab 0) ausgeben willst, dann scheibst Du z.B.:

    $_lines = file('dateiname');

    foreach($_lines as $key => $singleline)
       {
           if ( $key < 7 ) continue;
           echo nl2br(htmlspecialchars($singleline));
       }

    Das führt dazu, dass die Datei in ein Array im Speicher eingelesen wird. PHP teilt automatisch immer am Zeilenende und schreibt so jeweils eine Zeile zusammen mit dem Zeilenendezeichen in ein Array-Element. das Array wird dann in der Foreach()-Schleife Element für Element durchgearbeitet. die ersten sieben Zeilen werden dabei einfach überlesen. Ab der Zeile 7 wird die Zeile für den Browser aufbereitet und ausgegeben.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    Den obligatorischen (Ab-)Satz mit Uschi und Wolle verkneife ich mir diesmal
  3. Moin.

    Edgar hat ja bereits erklärt, wie du an die Ausgabe des Skript kommst. Möchtest du auf den Quelltext des Skripts zeilenweise zugreifen, geht das z.B. so:

      
    $lines = file(__FILE__); // oder $_SERVER['SCRIPT_NAME']  
    
    

    Denk bei der Ausgabe an Maskierung der HTML-eigenen Sonderzeichen:

      
    foreach($lines as $line)  
        echo htmlspecialchars($line);  
    
    

    Ob du den Dateinamen aus \_\_FILE\_\_ oder $\_SERVER['SCRIPT\_NAME'] nimmst, hängt davon ab, ob du den Quelltext der Datei, in der die Zeile vorkommt, oder den Quelltext der Datei, in der sie ausgeführt wird, möchtest (dank include können sich diese Werte unterscheiden!).

    Christoph

  4. Hallo und vielen Dank an alle, die hier geantwortet haben!

    Ich denke, eure Antworten werden mir auf jeden Fall weiterhelfen.
    Worin ich mich, wie ich gerade merke, falsch ausgedrückt habe, ist aber noch Folgendes:

    Ich weiss nicht einmal, wie ich auf die umliegende Struktur des _eigenen_ files zugreifen kann. Ich brauche nichts a la
      lies_Code_ein("http://www.abc.de/");

    sondern eher etwas a la
      lies_Code_ein(this_file);

    , weil dieses Skript auf mehreren Seiten eingebunden wird. Oh man, ich weiss, das ist WIRKLICH Anfängersache- aber wie und wo kann ich solche Sachen überhaupt lernen? Danach auf dem wunderbaren php-online-Handbuch, auf das so viel verwiesen wird, zu suchen, bedeutet leider auch, dass man weiss, wonach man sucht.

    Vielen Dank!!
    Sanny

    ich weiss, es ist eine blutige Anfängerfrage (und wahrscheinlich recht dumm, aber ich weiss mir gerade nicht mehr anders zu helfen- ich nehme auch gerne Hilfe zur Selbsthilfe an!), aber:

    Mein Problem:
    ich möchte eine php-Funktion erstellen, mit der ich den Code des php-Dokuments ab einer bestimmten Zeile zurückgeben kann.

    Sprich, in Pseudo-Code:

    function gib_den_Code_dieses_Dokuments_ab_Zeile_soundso_aus {
       return Code_dieses_Dokuments_ab_Zeile_soundso (als String);
    }

    Wie mache ich das? Bzw., wo lese ich nach, wie das geht?
    Danke!!

    LG, Sanny

    1. sondern eher etwas a la
        lies_Code_ein(this_file);
      , weil dieses Skript auf mehreren Seiten eingebunden wird.

      Faxen dicke!

      - Warum reicht ein include() nicht?
       - Warum schreibst Du nicht, ob ein genannter Vorschlag Dir helfen konnte?

      Oh man, ich weiss, das ist WIRKLICH Anfängersache- aber wie und wo kann ich solche Sachen überhaupt lernen? Danach auf dem wunderbaren php-online-Handbuch, auf das so viel verwiesen wird, zu suchen, bedeutet leider auch, dass man weiss, wonach man sucht.

      Spielen wir gedanklich Schule: Du bekommst ein Buch und hast nach Ablauf einer Frist mit dessen Inhalt, einen Aufsatz zu schreiben. Ohne Lesen geht es also nicht, sonst weis man eben nicht, wenn man suchen muss, wonach man sucht. Warum drückst Du Dich dann bei PHP-Manual so darum?

      Gruß aus Berlin!
      eddi

      --
      Ach übrigens: X für'n U verkürzt Strecken nur scheinbar!
    2. Hello,

      Ich weiss nicht einmal, wie ich auf die umliegende Struktur des _eigenen_ files zugreifen kann. Ich brauche nichts a la
        lies_Code_ein("http://www.abc.de/");

      sondern eher etwas a la
        lies_Code_ein(this_file);

      Die erforderlichen Antworen hast Du bekommen. Wenn Du nun die dort vorgestellten Funktionen

      file()               http://de3.php.net/manual/en/function.file.php
        htmlspecialchars()   http://de3.php.net/manual/en/function.htmlspecialchars.php
        nl2r()               http://de3.php.net/manual/en/function.nl2br.php
        foreach()            http://de3.php.net/manual/en/control-structures.foreach.php

      ob_start()           http://de2.php.net/manual/de/function.ob-start.php
        ob_get_clean()       [http://de2.php.net/manual/de/function.ob-get-clean.php]

      und die Beschreibung zu den Konstanten und vordefinierten Variablen

      __FILE__             http://de3.php.net/manual/en/language.constants.predefined.php
        $_SERVER             http://de3.php.net/manual/en/reserved.constants.php

      im PHP-Handbuch studierst und dir auch die Beispiele und Userkommentare dazu anschaust, bist Du schon ein Stück weiter. Das ist, zugegeben, ein Stück Arbeit. Aber nur selber lernen macht schlau. Wir können Dir dabei aber ein Stück helfen. :-)

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      Den obligatorischen (Ab-)Satz mit Uschi und Wolle verkneife ich mir diesmal
        1. Hello,

          $_SERVER             http://de3.php.net/manual/en/reserved.constants.php

          Wohl eher http://www.php.net/manual/en/reserved.variables.server.php

          Ja, danke. Ich wollte  http://www.php.net/manual/en/reserved.variables.php verlinken.
          Da hat mir wohl der MITM einen Streich gespielt ;-)

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

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

      bitte zitiere sinnvoll!

      Ich weiss nicht einmal, wie ich auf die umliegende Struktur des _eigenen_ files zugreifen kann. Ich brauche nichts a la
        lies_Code_ein("http://www.abc.de/");

      sondern eher etwas a la
        lies_Code_ein(this_file);

      , weil dieses Skript auf mehreren Seiten eingebunden wird.

      Du solltest erst mal beschreiben, was du eigentlich *erreichen* willst.
      Dann kann man dir auch Wege zur Lösung aufzeigen - und ggf. auch darauf hinweisen, ob dein Ansatz schon fehlerhaft ist bzw. du dich in etwas verrannt hast, was anders viel einfacher zu realisieren wäre.

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.