Finden, wo eine variable definiert ist in PHP (Und/oder SMARTY)?
Zur Zeit arbeite ich an einem sehr großen Projekt, und bin unter einer Menge Druck, es zu beenden bald, und ich habe ein ernstes problem. Der Programmierer, der dies schrieb zuletzt definierten Variablen in eine sehr seltsame Art und Weise - die config-Variablen werden nicht alle in die gleiche Datei, Sie sind verteilt über das gesamte Projekt mit über 500 Dateien und 100k Zeilen code, und ich habe eine Hölle von einer Zeit, herauszufinden, wo eine bestimmte variable ist, so kann ich ein Problem zu beheben.
Gibt es einen Weg, um diese variable nach unten? Ich glaube, er ist mit SMARTY (Die ich nicht ausstehen kann, aufgrund von Problemen wie diesem), und die variable ist eine template-Variablen. Ich bin ziemlich sicher, dass die variable, die ich Suche, wurde zunächst definiert als eine PHP-variable ist, dann ist die variable übergeben, SMARTY, also würde ich gerne auf die Spur von PHP ein, aber wenn es das ist unmöglich - wie kann ich den Pfad nach unten, wo er definiert die Variablen für SMARTY?
P. S. ich bin in Vista und nicht über ssh Zugriff auf den server, also 'grep' ist aus der Frage.
- +1 für nicht zu mögen Smarty. Während Sie nicht mit Ihnen, ich denke, dass php-debugger und xdebug kann sowohl backtrack Variablen/Inhalte in der äußeren Bereiche oder alle vorhandenen Variablen mindestens. Auf jeden Fall hab ich zündete eine Kerze an Mitgefühl für Ihre Vista-und debugging-situation.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Art der Sache ist der #1 Grund, warum ich installieren Cygwin auf allen meinen windows-Rechnern.
Kann ich mir nicht vorstellen-Programmierung ohne arbeiten
grep
.ack '^\s*\$image\s*='
grep
Paket. Vergleiche auch ag den silver searcher. Viel Glück.ack
.Brute-force-Weg, weil manchmal smarty-Variablen sind nicht direkt zugeordnet, aber Ihre Namen können gespeichert werden in der Variablen, verkettete aus vielen strings oder sein Ergebnis zu einigen Funktionen, dass macht es möglich, in Dateien suchen, indem Sie einfach auf der Suche /greping.
Erstens schreiben Sie Ihre eigene Funktion zum drucken lesbar backtrace, ie:
Open main smarty-Datei (
Smarty.class.php
standardmäßig) und um die Zeile 580 es ist die Funktion, die aufgerufen wird zuweisen. Ändern Sie es zu beobachten, für die gewünschten Variablen-name:Die gleiche änderung kann erforderlich sein, für die zweite Funktion - die assign_by_ref. Jetzt nach dem ausführen des Skripts sollte man die Ausgabe so:
Zweite Zeile zeigt auf die Stelle, wo die variable erstmals zugewiesen wurde.
Gibt es eine interessante weitere option, hässlich wie die Hölle, aber hilfreich, wenn Sie wirklich verloren.
Wenn Sie wissen möchten, wo
THE_NAME
definiert wurde, schreiben Zeilen wie diese an einem Ort sind Sie sicher, wird zuerst ausgeführt:Später, wenn PHP ausgeführt wird die definition, die Sie suchen, schreibt er eine Nachricht wie diese:
Dann wissen Sie, dass die definition, die Sie suchen, ist in der Datei
SomeConfiguration.php
auf der Linie 89.Haben diese funktioniert, müssen Sie berücksichtigen,
Also manchmal hilft es fügen Sie einige
exit('here')
um nicht zu verwischen, der die Ausgabe. Vielleicht haben Sie zu schmal, ein wenig nach unten oder setzen Sieerror_reporting
früher, aber du wirst es finden.Es ist keine perfekte Lösung, aber ich finde agent ransack nützlich für die Suche in großen Verzeichnissen und Dateien. Könnte Ihnen helfen, Dinge eingrenzen. Die Ergebnisse der Suche werden Ihnen ermöglichen, Lesen Sie die genauen Linie findet eine Entsprechung in den Ergebnisbereich.
Wenn Sie die netbeans-editor nur "Rechtsklick" -> "gehe zu Definition"
Oder
ctrl + click
auf die variable.Wenn der editor es kann nicht herausfinden, könnten Sie den fallback auf die "Suchen in Dateien" - option.
Verwenden Sie einfach eine der verfügbaren PHP-IDEs (oder einem einfachen text-editor wie Notepad, wenn Sie wirklich verzweifelt) und Suche für die Namen der Variablen, in der alle Quell-Dateien (die meisten PHP-IDEs unterstützen auch die Suche nach Funktionen/vars definiert wurden, und ermöglichen es Ihnen, zu springen, um das entsprechende Stück code). Obwohl es scheint seltsam, dass Sie nicht wissen, was Stück code ruft die Vorlage (egal ob Smarty oder sonst was spielt eigentlich keine Rolle). Sie sollten in der Lage sein, um drill-down in der code ausgehend von dem URI (mit einer IDE, die unterstützt debugging), denn so sind Sie verpflichtet, zu sehen, wo Sprach-variable definiert ist.