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 9 von 14   « Erste     789 1011     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 mirage228
mirage228

 
Delphi 2010 Professional
 
#81
  Alt 5. Jan 2005, 19:27
Zitat von Pr0g:
Hm, stimmt. Delphi hatte es nicht in der Liste aufgeführt (die spinnt manchmal), daher dachte ich es geht net. Aber was anderes. Aus irgend einem Grund ist "ConstantCount" immer 0. Woran kann das liegen?
die ConstantCount von TPHPSource liefert die Anzahl per define deklarierten Konstanten.
Die von TPHPClass die neuen Klassen-Konstanten (ab PHP5).

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

 
Delphi 7 Personal
 
#82
  Alt 5. Jan 2005, 22:50
Ich nutze TPHPSource und die anderen Dinge wie Includes und so klappen ja auch, nur bei den Konstanten gehts net. Ich mach wohl irgendwas falsch. Könntest du nicht mal deine Demo updaten
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#83
  Alt 6. Jan 2005, 08:33
Zitat von Pr0g:
Ich nutze TPHPSource und die anderen Dinge wie Includes und so klappen ja auch, nur bei den Konstanten gehts net. Ich mach wohl irgendwas falsch. Könntest du nicht mal deine Demo updaten
Hi,

in der aktuellen Demo zu v.1.9 sollten Konstanten eigentlich bereits enthalten sein

Sonst einfach das hier in die TreeView-Prozedur schreiben (Ich hatte es direkt hinter die Includes gesetzt)
Delphi-Quellcode:
// Hinzufügen der globalen Konstanten (per define() definiert)
Node := twTree.Items.AddChild(nil, 'Konstanten');
for i := 0 to ConstantCount-1 do
begin
  SubNode := twTree.Items.AddChild(Node, Constants[i].Name + ' = ' +
    Constants[i].Value);
  SubNode.Data := TObject(Constants[i].TextPos);
end;
Falls ConstantCount nun immernoch 0 zurückgibt, käme da noch der übliche Verdächtige dran. Undzwar unvollständige oder fehlende PHP-Tags (liegen solche vor, wird der Source ja nicht geparsed).

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

 
Delphi 7 Personal
 
#84
  Alt 6. Jan 2005, 11:29
Ich dachte Vesion 1.8 ist die aktuellste, hab jetzt mal Update auf 1.9 gemacht und siehe da, die Konstanten gehen doch
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#85
  Alt 19. Jan 2005, 16:56
Hi ho,

ich wollte nur eben bescheidsagen, dass die Version 2.0 gerade in der Mache ist.

Ich habe schon einiges implementiert, wollte aber nochmal bei Gelegenheit nachfragen, ob es irgendwelche speziellen User Wünsche gibt, die ich in die neue Version implementieren soll.

Falls ihr eine Idee habt, was noch den Weg in die neue Version finden sollte, dann sagt mir hier bescheid.

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

 
Delphi 7 Personal
 
#86
  Alt 19. Jan 2005, 23:06
Bei mir im Forum wurde eine Sache angesprochen, wo ich noch nicht genau weiß, ob sowas Sinnvoll ist und ob es in die Unit mit rein soll, da man es eigentlich auch selber machen kann. Und zwar sollen per Include eingebundenen Dateien auch geöffnet und deren einzelnen Werte mit in dem Baum eingebunden werden. Natürlich nur bis zu einer bestimmten Tiefe wegen der Perfomance. Ich weiß nicht ob dies wirklich nötig ist. Wie denkst du darüber?
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#87
  Alt 20. Jan 2005, 06:18
Zitat von Pr0g:
Bei mir im Forum wurde eine Sache angesprochen, wo ich noch nicht genau weiß, ob sowas Sinnvoll ist und ob es in die Unit mit rein soll, da man es eigentlich auch selber machen kann. Und zwar sollen per Include eingebundenen Dateien auch geöffnet und deren einzelnen Werte mit in dem Baum eingebunden werden. Natürlich nur bis zu einer bestimmten Tiefe wegen der Perfomance. Ich weiß nicht ob dies wirklich nötig ist. Wie denkst du darüber?
Hi!

Das mit den Includes ist schwierig und wäre auch mit Einschränkungen verbunden, weil ja einige Includes variabel (und evtl. sogar von einer Nutzereingabe abhängig) sind und ich mich daher auch die Includes mit konkreter Pfadangabe beschränken müsste.
Auch dort wäre es mit einem gewissen Aufwand verbunden den richtigen Dateinamen erstmal rauszuparsen, die Linux Slashes in Windows Back-Slashes umzuwandeln und anschließend den Pfad der Datei anhängen (den der Benutzer der Unit übergeben müsste).
Naja, ich sehe mal, ob ich das mit einer "Zusatzprocedure" alá ParseIncludedFiles(const FilePath: string; MaxDepth: Byte = 2) oder so Ähnlich lösen kann

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
DSeven
 
#88
  Alt 21. Jan 2005, 22:22
Zitat von Pr0g:
Bei mir im Forum wurde eine Sache angesprochen, wo ich noch nicht genau weiß, ob sowas Sinnvoll ist und ob es in die Unit mit rein soll, da man es eigentlich auch selber machen kann. Und zwar sollen per Include eingebundenen Dateien auch geöffnet und deren einzelnen Werte mit in dem Baum eingebunden werden. Natürlich nur bis zu einer bestimmten Tiefe wegen der Perfomance. Ich weiß nicht ob dies wirklich nötig ist. Wie denkst du darüber?
Hallo,

Die Unit soll so bleiben wie sie ist sonst wird sie mal wie DirectX. DirectX beinhaltet z.B. sachen die eher in eine engine passen als in eine API. Deshalb sollte die Unit solche sachen nicht enthalten. Schließlich könntest du sowas auch selber erstellen.

mfg
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

 
Delphi 7 Personal
 
#89
  Alt 22. Jan 2005, 18:56
Ich hatte in dem von dir zitierten Post ja gesagt, dass ich mir nicht sicher bin, ob man sowas reinmachen sollte, oder ob es besser von jedem selber gemacht wird.

Btw: Machst du also doch noch weiter ;)
  Mit Zitat antworten Zitat
DSeven
 
#90
  Alt 23. Jan 2005, 20:36
Guten Tag,

Ich denke mal ich bleib bei meinem entschluss und mache nicht weiter. Aber ich dachte mir die Unit mal nach c# zu portieren oder nach Delphi.NET kommt drauf an. Gibt bestimmt einige die sowas brauchen eingeschlossen mir selbst falls ich mal eine C# Version von meiner IDE veröffentlichen möchte.

Ich weis weis nicht genau was diese mozilla Lizenz alles erlaubt deshalb wollte ich mal den autor fragen ob das in ordnung geht mit der C# portierung?

Aber mit dieser Portierung würde ich frühestens Ostern anfangen können.
Denke aber das es geht habe mir den code mal angeschaut und sollte leicht sein. Werde aber einige Sachen nicht übernehmen zum Beispiel das compilieren von PHP Code mittels php.exe. Das sollte jeder für sich machen.

Das ist auch das was mich an der jetzigen Delphi unit stört. Schließlich passt sowas nicht in eine Parser unit. Ist meine Meinung.

mfg
  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 02:53 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