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 6 von 14   « Erste     456 78     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, 273x aufgerufen)
Dateityp: zip sample_application_661.zip (334,9 KB, 301x aufgerufen)

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
 
DSeven
 
#51
  Alt 30. Nov 2004, 12:17
Guten Tag,

Komisch warum das nur bei funktionen so ist. Klassen werden ja auch normal erkannt.

mfg,
DSeven
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#52
  Alt 30. Nov 2004, 13:40
Zitat von DSeven:
Guten Tag,

Komisch warum das nur bei funktionen so ist. Klassen werden ja auch normal erkannt.

mfg,
DSeven
Hi,

Klassen und Funktionen, die nicht zu einer Klasse gehören werden bei mir auch korrekt erkannt.

Der Haken ist aber bei Variablen und Funktionen in einer Klasse. Dort matched PCRE teils, wie gesagt, vom Anfang der Zeile an oder zumindest ein paar Zeichen davor. Ich nehme an, dass das irgendwas mit dem Zeilenumbruch an, der nicht als 2 Zeichen erkannt wird (also "class name{#13#10...}"), aber sicher kann ich das noch nicht sagen. Aber ich bin dabei und hoffe, dass sich das möglichst schnell (und einfach ) beheben lässt.

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
DSeven
 
#53
  Alt 4. Dez 2004, 23:21
Guten Tag,

Funktionen haben ja eine Variable Name wo nur der Name der funktion gespeichert ist, fände es super wenn es das gleiche für includes geben würde, wo nur die Datei gespeichert wird.

mfg,
DSeven
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#54
  Alt 5. Dez 2004, 07:33
Zitat von DSeven:
Guten Tag,

Funktionen haben ja eine Variable Name wo nur der Name der funktion gespeichert ist, fände es super wenn es das gleiche für includes geben würde, wo nur die Datei gespeichert wird.

mfg,
DSeven
Hi,

meinst du sowas, wie eine "Filename" Eigenschaft für den eingebundenen Dateinamen?
Wenn ja, dann würde sich das eigentlich machen lassen - obwohl es ja zig Wege gibt so einen Include zu deklarieren...

Ach ja, den Fehler mit dem falschen Index konnte ich beheben - das lag daran, dass ich 2 Matches zusammenkopiere und evtl. zwischen den 2 Matches noch zusätzliche Zeichen sind (#13#10 oder so). Das ist jetzt behoben.
Konstanten funktionieren jetzt auch

Neue Version gibt es hoffentlich noch heute *g*

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
DSeven
 
#55
  Alt 5. Dez 2004, 11:30
Zitat von mirage228:
Zitat von DSeven:
Guten Tag,

Funktionen haben ja eine Variable Name wo nur der Name der funktion gespeichert ist, fände es super wenn es das gleiche für includes geben würde, wo nur die Datei gespeichert wird.

mfg,
DSeven
Hi,

meinst du sowas, wie eine "Filename" Eigenschaft für den eingebundenen Dateinamen?
Wenn ja, dann würde sich das eigentlich machen lassen - obwohl es ja zig Wege gibt so einen Include zu deklarieren...
Ja genau das meine ich. Ich weis da gibt es sehr viele wege .
Wow freue mich das du die anderen probleme beheben konntest.
Freue mich auf den neuen release.

mfg,
DSeven
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#56
  Alt 5. Dez 2004, 11:46
Hi,

so die neue Version ist fertig - es ist die Version 1.8

Folgende Änderungen gibt es:
  • TPHPClass wurde in TPHPCustomClass umbenannt und einige properties wurden entfernt. TPHPClass ist nun von TPHPCustomClass abgeleitet und führt die benötigten properties ein. Das ist nötig, damit jeder Nachfahre von TPHPCustomClass entscheiden kann, welcher properties veröffentlicht werden sollen.
  • TPHPIncludeFile wurde um die Eigenschaften IncludeKind, IncludeKindStr und IncludeFileName ergänzt.
  • Neue Klasse TPHPContant für Kontanten in PHP5
  • Fehler bei Entity-Positionen innerhalb von Klasse behoben
  • Fehler beim Herausfinden des Textes zwischen den PHP-Tags (Durch einen "greedy" Operator wurde zuviel Text gemachted)

Die Beispielanwendung habe ich auch etwas verbessert

Die Downloads finden sich, wie gehabt, im ersten Beitrag

mfG
mirage228

P.S.: Zum PHPDoc Support bin ich leider noch nicht gekommen
Edit: Schlechtschreibung und BB-Code-Tags
David F.
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

 
Delphi 7 Personal
 
#57
  Alt 5. Dez 2004, 15:39
Endlich habe ich auch mal was Zeit gefunden, die Unit zu Testen und Nutzen. Dabei ist mir folgender Fehler aufgefallen. Wenn eine Variable den Begriff "include" enthält, wird sie als Include-Datei aufgelistet, hier ein Code zum Test aus dem phpBB (template.php):
Code:
<?php
 $include_last_iterator = 'Hallo Welt!';
?>
MfG Pr0g
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#58
  Alt 5. Dez 2004, 15:46
Zitat von Pr0g:
Endlich habe ich auch mal was Zeit gefunden, die Unit zu Testen und Nutzen. Dabei ist mir folgender Fehler aufgefallen. Wenn eine Variable den Begriff "include" enthält, wird sie als Include-Datei aufgelistet, hier ein Code zum Test aus dem phpBB (template.php):
Code:
<?php
 $include_last_iterator = 'Hallo Welt!';
?>
MfG Pr0g
Hi,

Danke erstmal fürs testen.

Da hast natürlich recht - Da ist der RegEx anscheinend nicht konsequent genug, der matched alles, vom include (etc.) bis zu einem ;. Ich werde das beheben.

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
moritz
 
#59
  Alt 5. Dez 2004, 15:55
Tipp: Schalte das Match für Variablen vor das für includes.

Die Unit schau ich mir heute Abend genauer an.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#60
  Alt 5. Dez 2004, 15:57
Hi,

lol, habe die Lösung schon gefunden.

Im initialization beim Erstellen des Includes-RegEx einfach am Anfang des Strings ergänzen:
Code:
[^$]
Damit darf kein $ vor dem include (etc.) auftauchen, damit es erkannt wird.

Die neuen Archive lade ich gleich hoch - sie sind sofort ab sofort verfügbar

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 14   « Erste     456 78     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 14:07 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