AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte PHP Inspection Unit
Thema durchsuchen
Ansicht
Themen-Optionen

PHP Inspection Unit

Ein Thema von mirage228 · begonnen am 1. Nov 2004 · letzter Beitrag vom 19. Aug 2007
Antwort Antwort
Seite 1 von 14  1 2311     Letzte »    
Benutzerbild von mirage228
mirage228
Registriert seit: 23. Mär 2003
Hallo,

ich habe mich die letzter Zeit ein wenig mit regulären Ausdrücken beschäftigt. Daraus ist die folgende Unit entstanden.

Mit ihr ist es möglich eine PHP Datei zu analysieren. Dabei werden Klassen und Interfaces mit deren Methoden und Variablen aufgelistet, sowie Methoden ohne Klassenbezug und eingebundene Dateien (über include, require, etc.).
Ab Version 1.9 gibt es auch eine vollständige Unterstützung für Konstanten jeglicher Art (define oder PHP5-Klassenkonstanten).

Das ganze wird hierarchisch in einer Klassenstruktur zusammengefasst. Die für Benutzer relevante Klasse sollte die Klasse TPHPSource in der Unit uPHPInspector.pas sein. Ihr wird beim Konstruktor der PHP Quelltext übergeben und daraus werden die Klassen etc. herausgeparsed. Die anderen Klassen in der Unit sollten nicht direkt instanziert werden.
Die Verwendung der Eigenschaften der einzelnen Klassen sollte relativ einfach sein. Bei Rückfragen, bitte hier in den Thread schreiben.

Zum Parsen verwende ich, wie gesagt, reguläre Ausdrücke. Da die native Delphi Bibliothek Hier im Forum suchenTRegExpr in einem für mich wichtigem Punkt nicht ganz vollständig war, bin ich auf die Wrapperklasse von http://www.renatomancuso.com umgestiegen. Der einzige Nachteile daraus ist der größere overhead, da Anwendungen die PCRE.dll mitliefern müssen, die mit knapp 200 KB zu Buche schlägt.

Neu ab Version 1.2:
Es lässt sich nun eine Syntaxprüfung durchführen. Dazu muss man die Funktion SyntaxCheck der Klasse TPHPSource aufrufen. Dabei kann man zwischen reiner Syntaxprüfung und einer vollständigen Ausführung der Datei wählen. Bei der Syntaxprüfung werden nur rein syntaktische Fehler erkannt. Nicht vorhandene Include-Dateien oder undefinierte Funktionen werden nicht erkannt. Dazu muss der erste Parameter auf TRUE gesetzt werden.
Im Zweiten Parameter "FileName" kann noch eine Datei zur Syntaxprüfung übergeben werden (Die Datei wird nicht automatisch von TPHPSource geparsed!)
Wichtig beim Testen eurer Sources ist, dass ihr die <? und ?> nicht vergessen dürft, da die Syntaxprüfung ansonsten immer = TRUE ergibt (der Text wird dann einfach ausgegeben ohne geparsed zu werden). Zudem wird euer Source dann nicht vom PHP Inspector geparsed, wenn die PHP-Tags (<? .. ?>) fehlen (ab Version 1.6).
Das Verhalten kann durch die StrictPHPTagCheck Eigenschaft beeinflusst werden.

Im Anhang befinden sich nun:
  • PHPInspector.zip Der "PHP Inspector" in der Version 2.6 (PCRE.dll und Wrapper Units included; Version 5.0 vom 26. Oktober 2004)
  • sample_application.zip Eine Beispielanwendung, samt Source.
  • php_source_analyzer.jpg Ein Screenshot der Beispielanwendung.

Freue mich auf euer Feedback

mfG
mirage228
Miniaturansicht angehängter Grafiken
php_source_analyzer_685.jpg  
Angehängte Dateien
Dateityp: zip phpinspector_160.zip (130,1 KB, 272x aufgerufen)
Dateityp: zip sample_application_661.zip (334,9 KB, 300x aufgerufen)

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
 
Benutzerbild von jfheins
jfheins
 
#2
  Alt 1. Nov 2004, 18:59
Es wäre cool, wenn das ding gleich noch die syntax checken würde ...
(Mit der php.exe und den parametern müsste das doch irgendwie gehe, oder ?)
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#3
  Alt 1. Nov 2004, 19:01
Zitat von jfheins:
Es wäre cool, wenn das ding gleich noch die syntax checken würde ...
(Mit der php.exe und den parametern müsste das doch irgendwie gehe, oder ?)
Hi,

ja das wäre mit der php.exe möglich. Ich muss mich da aber erstmal reinarbeiten, dann sehe ich, was sich da machen lässt...

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins
 
#4
  Alt 1. Nov 2004, 19:12
Zur Anregung:
http://de3.php.net/features.commandline
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#5
  Alt 1. Nov 2004, 19:16
Zitat von jfheins:
Ah, danke, das sieht doch schonmal ganz gut aus

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#6
  Alt 2. Nov 2004, 14:31
Hi,

heute gibts schon das erste Update auf die Version 1.1

Mir ist ein Fehler in der Funktion CheckIsComment(), die prüft, ob ein angegebener Ausdruck von einem Kommentar umschlossen ist, aufgefallen. Der Fehler trat auf, wenn ein // - Kommentar vorlag. Ich habe den Fehler beheben können und die neue Version 1.1 steht im oberen Beitrag zum Download bereit.

@jfheins: Den Syntaxcheck habe ich leider noch nicht einbauen können. Kommt aber bald

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#7
  Alt 7. Nov 2004, 17:25
Abend!


Heute gibt es wieder eine neue Version -> Version 1.2

Hier ist die Liste der Änderungen:
  • (fix): Mehrere Fehler bei der Kommentarverarbeitung in Funktion "CheckIsCommented" behoben.
  • (fix): Falsche Indexierung von Einträgen innerhalb von Klassen (Eigenschaft TextPos war nicht ganz korrekt)
  • (add): Möglichkeit mit PHP die Syntax überprüfen zu lassen (lokale PHP Installation, mind. 4.3.0, vorrausgesetzt)

Die Verwendung der Syntax Prüfung ist optional. Die Dateien können auch ohne untersucht. Jedoch ist dann nicht sichergestellt, ob alle Ergebnisse korrekt sind.
Nach dem Erstellen TPHPSource Klasse kann die Eigenschaft PHPExe gesetzt werden. Die sollte den vollständigen Pfad + Dateinamen der PHP.exe enthalten.
Fehler in der Verarbeitung werden in der Eigenschaft SyntaxErrors dargestellt, die fertige Ausgabe von PHP (falls keine Fehler vorliegen), findet sich in der Eigenschaft OutPut.

Man kann einmal nur die Syntax an sich testen (Parameter "CheckForRuntimeErros" = False; Standard) und einmal auch das Laufzeitverhalten (Parameter "CheckForRuntimeErros" = True). Nur bei letzterem kriegt man Meldungen von nicht gefunden Include-Dateien, nicht definierten Funktionen etc.
Optional lässt sich auch ein Dateiname angeben, der dann überprüft wird. (Diese wird nicht automatisch vom PHP Inspector geparsed!).

Ein ausführliches Beispiel findet sich in der Beispielanwendung
Die Downloads im ersten Beitrag sind auch schon aktualisiert.

Über Feedback würde ich mich freuen

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#8
  Alt 10. Nov 2004, 18:16
Abend,

heute gibt es wieder eine neue Version vom PHP Inspector. Es ist die Version 1.3.

Neue Features sind unter Anderem:
  • Unterstützung für Interfaces (TPHPInterface Klasse, verwendet Interfaces[] und InterfaceCount von TPHPSource; ImplementedInterface von TPHPClass)
  • Unterstützung für abgeleitete Klassen (Feld ExtendsClass in TPHPClass)
  • Unterstützung für abstrakte Klassen / Methoden (Feld IsAbstractClass in TPHPClass und IsAbstract in TPHPMethod)
  • Unterstützung für finale Methoden (IsFinal in TPHPMethod)
  • Unterstützung für Methoden mit private / protected Sichtbarkeit (Visibility von TPHPMethod)
  • Neue Methoden FindClass, FindInterface und FindMethod

Zudem habe ich noch einige Fehler in der Bestimmung der Index-Positionen behoben.

Downloads findet ihr, wie gehabt, im ersten Beitrag.

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
DSeven
 
#9
  Alt 14. Nov 2004, 01:01
Guten Tag,

Mich würde jetzt interessieren wie schnell das ganze ist.
Da ich selbst einen Parser geschrieben habe freut mich das projekt, nur zur Zeit schaut es so aus das dein Parser etwas langsam ist. Was dadran liegt das du immer den gesammten quelltext parst und dann das treeview immer wieder komplett neu erstelst.

Was ich noch begrüßen würde ist das du den Parser so umprogrammierst das er beim neu parsen nur die neuen elemente hinzufügt und gegenfür nicht mehr vorhande entfern anstatt jedes mal das ganze neu zu erstellen. Das spart Zeit und zwar sehr viel.
Habe es mal mit meinem Parser probiert.

Ah und um noch mehr Zeit rauszuholen solltest du statt dem Treeview in der Beispielanwendung eine VirtualTree verwenden. Bringt wieder sehr viel Zeit.

Könnte eventuel bei der umsetzung helfen.
Wenn das alles erfüllt ist würde ich deinen Parser auch in meinem Projekt benutzen.

Ansonsten ist das Teil hammer!!! Echt finde es klasse der funtkionsumfang ist sehr groß nur eben das mit dem speed stört mich.

mfg,
DSeven
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

 
Delphi 7 Personal
 
#10
  Alt 14. Nov 2004, 02:08
Hallo,

das Projekt ist sehr interessant und ich habe mir das Beispielprogramm mal heruntergeladen und mit ein paar größeren PHP Datein des phpBB2 Forensystems getestet. Bei der Datei "search.php" ~40Kb wurde die Datei zwar geladen, jedoch kam eine Fehlermeldung "Stack-Überlauf." und die Klassenstruktur blieb leer. Bei erneutem laden, kam die Meldung dann nicht mehr, jedoch bliebt die Klassenstruktur nun wieder, bis auf die Hauptpunkte leer. Bei der Datei "viewforum.php" ~20Kb wurde das Programm einfach ohne eine Meldung beendet. Vielleicht helfen dir die Infos bei der Fehlersuche.

DSeven: Du lebts auch noch, von dir und deinem Editor habe ich schon länger nichts aktuelles mehr gehört

MfG Pr0g
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 14  1 2311     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz