Entwickler-Ecke

Open Source Units - PHP Inspection Unit


mirage228 - So 20.03.05 14:14
Titel: PHP Inspection Unit
Hallo,

Ich möchte an dieser Stelle meine "PHP Inspection Unit" vorstellen.
Sie ist entstanden, als ich mich etwas mit regulären Ausdrücken auseinandergesetzt habe.

Mit ihr ist es möglich eine PHP Datei zu analysieren. Dabei werden Klassen mit deren Methoden und Variablen aufgelistet, sowie Methoden ohne Klassenbezug und eingebundene Dateien (über include, require, etc.) - Eine komplette Featureliste gibt es weiter unten.

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 Suche in: Delphi-Forum, Delphi-Library TREGEXPR 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.

Es lässt sich auch 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. Das Verhalten kann durch die StrictPHPTagCheck Eigenschaft beeinflusst werden.

Eine Liste aller Features:


Zum Download gibt es nun:

PHPInspector.zip [http://www.mirage228.net/download/PHPInspector.zip] (125 KB) - Der "PHP Inspector" in der Version 2.3 (PCRE.dll und Wrapper Units included; aktuelle Version vom 26. Oktober 2004)

sample_application.zip [http://www.mirage228.net/download/sample_application.zip] (350 KB) - Eine Beispielanwendung, samt Source.

php_source_analyzer.jpg [http://www.mirage228.net/projects/projectdata/php_source_analyzer.jpg] (100 KB) - Ein Screenshot der Beispielanwendung.


Freue mich auf euer Feedback

mfG
mirage228


chrisdrury - Mo 21.03.05 09:00

Scheint eine sehr interessante Sache zu sein.
Nur leider habe ich nur D5, und der Compiler stolpert immer an dieser Stelle:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TRegex.RetrieveNames;

var
  NameCount     : Integer;
  NameEntrySize : Integer;
  Ptr           : PByte;    //hier hält der Compiler an!!
  Idx           : Word;
  i             : Integer;

begin
  FNames := TNameIndexLookup.Create();


mit der Fehlermeldung:
Undefinierter Bezeichner: 'PByte'

Leider sagt mir PByte nun auch überhaupt nichts, gibt's da vielleicht ne Möglichkeit, das in D5 lauffähig zu kriegen?


KidPaddle - Mo 21.03.05 09:23

PByte entspricht einem Pointer auf einem Byte also, PByte = ^Byte. Was auch der Delphi typischen Typenbenennung entspricht.

Gruß
KidPaddle


chrisdrury - Mo 21.03.05 10:49

@ KidPaddle:
Vielen Dank für die Hilfe.
Hab's entsprechend geändert, Demo läuft jetzt.


mirage228 - Fr 25.03.05 20:45

Hallo,

heute gibts eine neue Version - 2.2

Neue Features gibts diesmal nicht, dafür habe ich einige Fehler behoben :)

Liste aller Änderungen:


Die Downloads auf dem Server habe ich bereits aktualisiert und die neue Version kann heruntergeladen werden :)

mfG
mirage228


mirage228 - So 27.03.05 16:06

Hi ho,

bereits heute gibts die neue Version 2.3 ist fertig. Sie behebt, wie die Version 2.2, hauptsächlich Fehler, neue Features gibts leider keine :-(

Die neue Version enthält insgesamt folgende Änderungen:


Der Download ist bereits aktualisiert und die Version 2.3 kann heruntergeladen werden.

mfG
mirage228


mirage228 - Mo 23.05.05 16:39

Hallo,

heute gibt es eine (kleine ;) ) neue Version - Version 2.4.

Es gab u.U. einen Fehler bei den Positionen eines Konstrukts.

Die gesamte Liste der Änderungen:


Die Downloadlinks gibts im ersten Beitrag :)

mfG
mirage228


mirage228 - Mo 03.10.05 10:40

Hallo,

nach einer kleinen Pause gibt es nun wieder eine neue Version. Es ist die Version 2.5. :)

Folgende Änderungen gibt es:


Den Download gibts im ersten Beitrag ;)

mfG
mirage228