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 5 von 14   « Erste     345 67     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)
 
DSeven
 
#41
  Alt 24. Nov 2004, 13:44
Zitat von mirage228:
  • was bei gemischten (HTML/PHP) Dokumenten möglicherweise zu falschen Ergebnissen führt.
Guten Tag,

Werde deinen neuen Release mal teste, aber das mit den falschen ergebnissen freut mich ja nicht so sehr

mfg,
DSeven
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#42
  Alt 24. Nov 2004, 13:47
Zitat von DSeven:
Zitat von mirage228:
  • was bei gemischten (HTML/PHP) Dokumenten möglicherweise zu falschen Ergebnissen führt.
Guten Tag,

Werde deinen neuen Release mal teste, aber das mit den falschen ergebnissen freut mich ja nicht so sehr

mfg,
DSeven
Hi,

das ergibt sich aus der Sache selbst.

Wenn du ein gemischtes Dokument hast, z.B.
Code:
<html>
  <? include("abc.php");
<head>
  <title>Tolle Seite</title>
</head>
<body>
 

Dolle Seite :)</p>
</body>
</html>
wird alles ab dem <? geparsed, da der PHP Tag nicht korrekt geschlossen ist.
Das könnte im schlimmsten Falle zu falschen Parsing ergebnissen führen.

Wenn es ein reines PHP Dokument ist, gibt es damit natürlich keine Probleme

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
DSeven
 
#43
  Alt 24. Nov 2004, 14:19
Guten Tag,

Hab ich auch gerade gesehen. ich habe was anderes gedacht. Das ist natürlich normal
Finde den release sehr gut vor allem schneller alls der alte.

mfg,
DSeven
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#44
  Alt 24. Nov 2004, 15:43
Hi

Zitat von DSeven:
Finde den release sehr gut vor allem schneller alls der alte.
Freucht mich

Als nächstes versuche ich mal das mit dem PHP Doc zu realisieren. Das sollte sich (hoffentlich) machen lassen

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

 
Delphi 10.2 Tokyo Starter
 
#45
  Alt 24. Nov 2004, 18:24
Zitat von mirage228:
Als nächstes versuche ich mal das mit dem PHP Doc zu realisieren.
Kann mir mal jemand erklären, was PHPDoc egentlich is und wozu man das nutzen kann?

mfg, mh166
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#46
  Alt 24. Nov 2004, 18:30
Zitat von mh166:
Zitat von mirage228:
Als nächstes versuche ich mal das mit dem PHP Doc zu realisieren.
Kann mir mal jemand erklären, was PHPDoc egentlich is und wozu man das nutzen kann?

mfg, mh166
Hi,

schau mal hier: http://www.phpdoc.de/

mfG
mriage228
David F.
  Mit Zitat antworten Zitat
DSeven
 
#47
  Alt 27. Nov 2004, 23:30
Guten Tag,

also ich finde die Funktion FindEntityAt ziemlich gut. Nur leider weis ich nicht was ich der funktionen übergeben muss? Wenn ich der funktion SelStar übergebe funktioniert es nicht.

Was muss man der funktion übergeben?

mfg,
DSeven
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#48
  Alt 28. Nov 2004, 07:47
Zitat von DSeven:
Guten Tag,

also ich finde die Funktion FindEntityAt ziemlich gut. Nur leider weis ich nicht was ich der funktionen übergeben muss? Wenn ich der funktion SelStar übergebe funktioniert es nicht.

Was muss man der funktion übergeben?

mfg,
DSeven
Hi,

eigentlich muss der Funktion schon SelStart übergeben werden

Bei Methoden in Klassen ist mir aufgefallen, dass PCRE den Index manchmal ein paar Zeichen davor bzw. am Anfang der Zeile anfangen lässt und daher TPHPEntity.TextPos da möglicherweise etwas ungenau ist

Da werde ich noch einmal nach schauen müssen.

mfG
mirage228

Edit: FindEntityAt funktioniert natürlich nur korrekt, wenn der Text bereits geparsed wurde und nicht verändert wurde (da ansonsten die gespeicherten Positionen nicht mehr stimmen)!
David F.
  Mit Zitat antworten Zitat
DSeven
 
#49
  Alt 28. Nov 2004, 21:58
Guten Tag,

Gut und ich dachte schon ich mache was Falsch. Ich schicke der funktion also SelStart.
Nur das problem es funktioniert nicht immer.

Wenn der Cursor sich in einer Klassen Funktion befindet, bekomme ich bei einigen Funktionen die Klasse statt der funktion zurück.

Warum?

Edit: Ah und ich vermisse noch ein feature, währe nett wenn du es einbauen könntest undzwar das dein parser auch nach konstanten sucht. Danke

mfg,
DSeven
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#50
  Alt 29. Nov 2004, 05:56
Zitat von DSeven:
Nur das problem es funktioniert nicht immer.

Wenn der Cursor sich in einer Klassen Funktion befindet, bekomme ich bei einigen Funktionen die Klasse statt der funktion zurück.

Warum?
Hi,

PCRE beginnt den Match für Entities in einer Klasse aus irgendeinem Grund immer manchmal ein paar Zeichen vor dem eigentlichen Eintrag.
Daher kann es am Ende von Funktionen vorkommen, dass diese nicht erkannt werden
Da werde ich mir was überlegen müssen, aber ich weiss derzeit noch nicht, woran es liegt.

Zitat:
Edit: Ah und ich vermisse noch ein feature, währe nett wenn du es einbauen könntest undzwar das dein parser auch nach konstanten sucht. Danke
Ah, ok - hatte ich ganz vergessen. Kommt ins nächste Release

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 14   « Erste     345 67     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:30 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