AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte PHP Inspection Unit

PHP Inspection Unit

Ein Thema von mirage228 · begonnen am 1. Nov 2004 · letzter Beitrag vom 19. Aug 2007
Antwort Antwort
Seite 13 von 14   « Erste     3111213 14   
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 hincapie
hincapie

 
Delphi 5 Professional
 
#121
  Alt 18. Jul 2007, 07:28
Hallo,
wollte auf die neueste Version updaten, beim Kompilieren des Packages kam folgende Fehlermeldung:
[Fehler] uPHPInspector.pas(1664): Es gibt keine überladene Version von 'Create', die man mit diesen Argumenten aufrufen kann

siehe Bild im Anhang

P.S.: Verwende D5 Prof
Miniaturansicht angehängter Grafiken
fehler_670.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#122
  Alt 19. Jul 2007, 12:35
Hi,

Hast Du etwas an den Compilerschaltern umgestellt? Im Normalzustand (also mit den Schaltern in der Standard-Stellung) habe ich diesen Fehler nicht (D7 Professional).

Edit:
Also der dort aufgerufene Konstruktor ist ein überladener Konstruktor, der im protected Bereich von TPHPMethod ist (und an TPHPInterfaceMethod vererebt wird). Der Public Konstruktor überschreibt den Original-Konstruktor von TPHPEntity.
Kommt D5 mit dieser Konstelation evtl. nicht zu recht? Die beiden anderen Warnungen konnte ich bei mir auch nicht beobachten...

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

 
Delphi 5 Professional
 
#123
  Alt 20. Jul 2007, 06:59
Nö, nichts an den Schaltern herumgestellt.

Hab jetzt mal den ganzen Abschnitt auskommentiert, danach funktioniert's.
Mal sehen, was für Auswirkungen das in der Praxis hat.
Miniaturansicht angehängter Grafiken
comment_187.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#124
  Alt 20. Jul 2007, 08:37
Hi,

Zitat von hincapie:
Mal sehen, was für Auswirkungen das in der Praxis hat.
Die Auswirkungen werden sein, dass keine Methoden innerhalb von Interfaces mehr erkannt werden...

Eventuell kannst Du ja den Konstruktor im protected-Abschnitt von TPHPInteraceMethod umbennen, dann von den beiden
Konstruktoren der Klasse das "overload" entfernen und dann das TPHPInterfaceMethod.Create() in den umbenannten Konstruktor
umbennen...

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Tommy1988
 
#125
  Alt 19. Aug 2007, 11:33
Eine Frage: Was macht das Programm?

Erkennt es Fehler in der Syntax einer PHP-Datei?

Weil ich hab mal in einer PHP-Datei Fehler eingebaut und dann checken lassen, keine Reaktion.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#126
  Alt 19. Aug 2007, 11:34
Zitat von mirage228:
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).
Steht doch im ersten Post vom David.

[edit]Und wegen SyntaxCheck steht noch da:

Zitat von mirage228:
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.
Manuel
  Mit Zitat antworten Zitat
Tommy1988
 
#127
  Alt 19. Aug 2007, 12:43
Zitat:
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.
Genau das ist bei mir aber nicht der Fall.

Wenn ich mal ganz blöd aus $_POST einfach $-/POST mache wird nix erkannt.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#128
  Alt 19. Aug 2007, 12:57
Zitat von Tommy1988:
Genau das ist bei mir aber nicht der Fall.
Wenn ich mal ganz blöd aus $_POST einfach $-/POST mache wird nix erkannt.
Das ist auch aus syntaktischer Hinsicht richtig. PHP kann ja nicht wissen, dass Du $_POST und nicht deine eigene Variable $POST meinst.

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

 
Delphi 2009 Professional
 
#129
  Alt 19. Aug 2007, 13:02
Hi,

aber der Bezeichner $-/POST für eine Variable ist nicht korrekt und da müsste ein Fehler kommen.
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#130
  Alt 19. Aug 2007, 13:08
Zitat von Die Muhkuh:
aber der Bezeichner $-/POST für eine Variable ist nicht korrekt und da müsste ein Fehler kommen.
Dann ist der Fehler aber nicht bei mir zu suchen, weil ich den Aufruf der PHP.exe konform zur Dokumentation selbiger mache. Die Syntax- und Fehlerprüfung ist aber auch nicht das Hauptfeature der Unit, ist eher als zusätzliches Gimmick gedacht

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf