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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 145791
Url: https://administrator.de/contentid/145791
Ausgedruckt am: 17.11.2024 um 14:11 Uhr
7 Kommentare
Neuester Kommentar
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...)
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...)
readfile()
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 ?
Nabend
Entsprechende Funktionen gibt es doch:
~Arano
EDIT:
Ähm ja.... hätte richtig lesen sollen, da helfen die ja auch nicht... sorry !
Entsprechende Funktionen gibt es doch:
- PHP-Manual - get_defined_functions()
- PHP-Manual - get_defined_vars()
- PHP-Manual - get_defined_constants
- PHP-Manual - get_declared_classes()
- PHP-Manual - function_exists()
~Arano
EDIT:
Ähm ja.... hätte richtig lesen sollen, da helfen die ja auch nicht... sorry !
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... ;)
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... ;)