mfromh
Goto Top

PHP Sourcecode incl. Code aus includes ausgeben?

include()- / require()-Statements durch deren Code ersetzen

Hallo Forum,

kann ich mir PHP-Code so anzeigen lassen, dass statt include() oder require() der Sourcecode angezeigt wird, der an dieser Stelle inkludiert wird? M.a.W. möchte ich die vom Precompiler zusammengesetzte Datei ausgeben, bevor sie durch den Compiler interpretiert wird.

Kennt jemand von Euch einen Weg?

Danke im voraus.

--
BFN
MFromH

Content-Key: 145791

Url: https://administrator.de/contentid/145791

Printed on: May 6, 2024 at 05:05 o'clock

Member: maretz
maretz Jun 28, 2010 at 12:22:01 (UTC)
Goto Top
Moin,

das wird so nicht gehen - da PHP ne Script-Sprache ist die nicht durch nen (Pre-)Compiler sondern nur durch einen Interpreter läuft...

Da wäre mir höchstens der manuelle Weg bekannt... aber ganz ehrlich: Alles andere wäre auch Sinnfrei. Denn du hast ja immer nen paar (unsichtbare) Includes - nämlich deine PHP.ini die ausgewertet wird usw. (sonst wüsste dein Script ja nicht worauf es basiert). Und dann kommt da noch der Teil vom Webserver zu der das ganze PHP erstmal lädt (ohne das wüsste dein Webserver ja nicht was er z.B. mit dem Befehl "phpinfo();" anfangen soll...)
Member: dog
dog Jun 28, 2010 at 12:28:06 (UTC)
Goto Top
readfile() face-wink

Nein, so etwas gibt es nicht.
Das tiefste an das man aus PHP selbst rankommt ist __halt_compiler()

Vielleicht reicht dir aber schon ein Xdebug oder APD und das Setzen von Breakpoints und Überwachen mit gdb?

Oder inclued http://www.php.net/manual/de/intro.inclued.php ?
Member: mfromh
mfromh Jun 28, 2010 at 14:32:03 (UTC)
Goto Top
Danke für Eure Antworten.

Mich wundert eigentlich, dass mein Wunsch so exotisch ist, denn die Fragestellung, an welcher Stelle welche Variable / Function definiert bzw. verändert wird, ist ja bei einem PHP mit einigen incudes() doch gar nicht mal so leicht zu beantworten. Und letztlich kann ja auch ein entsprechendes Utility nicht sooo schwer zu coden sein ...

--
BFN
Michael
Member: Arano
Arano Jun 28, 2010 at 22:22:26 (UTC)
Goto Top
Nabend

Entsprechende Funktionen gibt es doch:
Damit sollte es möglich sein es in Erfahrung zu bringen

~Arano


EDIT:
Ähm ja.... hätte richtig lesen sollen, da helfen die ja auch nicht... sorry !
Member: dog
dog Jun 28, 2010 at 22:44:49 (UTC)
Goto Top
Wie gesagt, für sowas setzt man Breakpoints und überwacht die Ausführung mit einem Debugger
Member: maretz
maretz Jun 29, 2010 at 22:02:35 (UTC)
Goto Top
Moin,

naja, die frage ist: Warum sollte man das tun? Was bringt es mir das ich z.B. beim Include ITX.php dann erstmal zig Zeilen Code rausgeballert bekomme die mich gar nicht intressieren?

Was intressiert dich denn beim Debuggen deines Codes? Normal ja nur DEINE Variablen und der Zustand DEINES Programmes. Und nicht alles was du so ggf. inkludiert hast. Und den Zustand deines Programmes kannst du dir ja relativ simpel anzeigen lassen...

Nur mal zum Verständnis: Nehmen wir an du würdest ein Programm bauen welches den Code an der Stelle komplett einbindet.

In deinem Code steht
include itx.php
-> wird ersetzt durch den Code der in der itx.php steht. Soweit so gut.
Leider findest du in der itx.php dann sowas wie
require class.db.inc
require localFunctions.inc
require sonderfunktion.php

ok - also rein mit dem ganzen kram.
In der sonderfunktion.php findest du aber wieder ein
require class.db.inc
-> da man hier die DB-Funktionen in einer Klasse ausgelagert hat (nur mal angenommen!).

Na - merkst du wie lang der Code jetzt werden würde (denn die class.db.inc könnte ja ggf. 1000ende Zeilen enthalten - du willst aber in der sonderfunktionen.php nur ganz bestimmte funktionen davon nutzen!). Das wäre schonmal kontraproduktiv -> du hast keine Chance mehr den Code zu lesen...

Noch schlimmer wird es wenn du im Bereich Objektorientierung bist. Hier hast du z.B. eine Klasse "Auto" (das übliche halt). Du hast jetzt ein Programm welches dir die Anzahl der Türen zurückgibt - enthält logischerweise ein "include auto.inc". Ein anderer Programmteil gibt dir zurück wieviele Reifen das Auto hat - somit enthält auch der Teil ein "include auto.inc". Innerhalb der Auto.inc hättest du aber z.B. noch eine DB-Funktion - also wird hier schonmal die "db.class.inc" immer inkludiert... Du hättest also ein relativ simples Programm in kurzer Zeit extrem aufgepustet wenn du dir statt des include immer den Programm-Text reinlädst. Und ein Debuggen wäre nicht mehr möglich -> du hättest ja immer den kompletten Text statt des Includes. Aber was dein Programmteil "Anzahl der Türen" mit dem Programmcode zur Rückgabe der Reifenanzahl soll kannst du vermutlich nicht sagen - trotzdem würde der auch in dem Programmteil stehen und eher verwirren...

Also -> hat nen guten Grund das man das include so belässt wie es ist... ;)
Member: mfromh
mfromh Jun 30, 2010 at 04:50:00 (UTC)
Goto Top
OK, Ihr habt mich überzeugt face-wink

Danke.

--
BFN
Michael