PHPDump - Debuggen in der Google Chrome-Konsole und Interaktion mit CMS MODX

Auf den Punkt gebracht


Es gibt ein proprietäres Produkt, das mir beim Debuggen erfolgreich hilft und es PhpDump nennt .


Einmal forderte mich CMS MODX auf, meinen Debugger zu schreiben. Natürlich gibt es var_dump, phpConsole, xDebug in PHP. Aber hier bin ich mit meinem PhpDump .


Ich werde sagen, dass die Lösung nicht perfekt, aber sehr praktisch ist.


Wie sehr du es magst, liegt bei dir.


Hier sind einige Screenshots, wie das aussieht.




In diesem Artikel werde ich Ihnen erklären, wie Sie es in CMS MODX Revo installieren und verwenden


Anforderungen


Apache + PHP 7, CMS MODX Revo 2.7
Git + Komponist


Herunterladen und installieren


  • Komponist

Erstellen Sie ein Verzeichnis für PhpDump getrennt von Ihren Projekten. Da möchten Sie es möglicherweise auf einem lokalen Server in verschiedenen Projekten verwenden. Dazu muss es nicht überall installiert werden.


Erstellen Sie im Verzeichnis eine composer.json Datei mit den folgenden Daten:


 { "require":{ "Alpa/PhpDump":"1.*" }, "repositories": [ { "type": "git", "url": "https://github.com/ALexeyP0708/PhpDump.git" }, { "type": "git", "url": "https://github.com/ALexeyP0708/EntityDetails" } ] } 

Geben Sie im Terminal $ composer install


Bei der Installation über Composer befindet sich das Projekt im [directory install]/vendor/PhpDump


  • Installation über GIT
    Befehl für Terminal
    $ git clone https://github.com/ALexeyP0708/PhpDump.git

Oder entpacken Sie das Zip-Archiv.


kann hier heruntergeladen werden GitHub


Installieren Sie PhpDumpConsole


Wechseln Sie in Google Chrome zum Abschnitt " Erweiterungen ", aktivieren Sie den Entwicklermodus (in der oberen rechten Ecke) und .


Geben Sie das Verzeichnis [directory PhpDump]/ChromeExtension/PhpDumpConsole_v1.1 .


Im Bedienfeld wird ein rotes Fadenkreuz angezeigt - ein Zahnrad im Kreis. Wenn das Zahnrad beim Klicken nicht blau wird, unterstützt entweder der Server PhpDump nicht oder der Client übergibt keine Autorisierung.


Gesundheitscheck


Überprüfen Sie die Datei [dirictory Php Dump]/tests/test_debugManager.php


Bei der Installation über den Composer müssen Sie die richtige Route zur Autoloader-Datei angeben.


Ersetzen Sie dazu die Leitung


  include_once __DIR__.'/../vendor/autoload.php'; 

auf


  //include_once __DIR__.'/../vendor/autoload.php'; include_once __DIR__.'/../../../autoload.php'; 

Das Verzeichnis, in dem PhpDump installiert ist, muss über Webzugriff und kostenloses Routing zu Skripten verfügen.


Angenommen, Sie setzen PhpDump auf /sites/www/mysite/TestPhpDump und greifen auf die Website http://mysite/ zu, um das http://mysite/ auszuführen
http://mysite/TestPhpDump/tests/test_debugManager.php


Die Seite mit den generierten Fehlern wird gestartet. Starten Sie die Google Chrome-Konsole und klicken Sie im Anwendungsbereich auf das Zahnrad. Die Seite wird neu geladen, das Zahnrad wird blau. Alle Informationen werden jetzt in der Konsole angezeigt.


So führen Sie Ihr Projekt aus


Am oberen Rand der Seite, auf der das Skript für Ihr Projekt ausgeführt wird, müssen Sie Folgendes angeben:


  include_once '[directory phpdump]/vendor/autoload.php';//   phpdump   . new PhpDump\InitDump(); 

Sie müssen verstehen, dass PhpDump in dem Szenario ausgeführt wird, in dem die Zeichenfolgendaten deklariert sind.
Sie sollten auch berücksichtigen, dass PHPdumpConsole nicht nur für die Hauptseite, sondern auch für Ajax-Anforderungen und für vom Server dynamisch generierte Front-End-Skripte einen Speicherauszug anzeigt.


Wenn Ihr Projekt zufällig auf verschiedene Szenarien zugreift (z. B. wurde die Seite über Index.php geladen und die Ajax-Anforderung über other.php gestellt oder der Browser ein dynamisches js-generiertes Skript aus script.js.php lädt), können unvorhergesehene Situationen auftreten.


In diesem Fall muss das gesamte Routing eine einzige Skriptdatei durchlaufen. Zum Beispiel über /index.php. Oder wenden Sie zusätzliche Lösungen an, wie dies mit MODX (unten beschrieben) geschehen ist.


Starten Sie auf einer Test-Site mit CMS MODX


Es gibt verschiedene Lösungen zum Ausführen von PhpDump unter CMS MODX.


Die erste Lösung - Schreiben Sie gemäß den obigen Anweisungen den Code in die Datei index.php Ihrer Site:


  include_once '[directory phpdump]/vendor/autoload.php'; new PhpDump\InitDump(); 

In diesem Fall arbeitet PhpDump im Debug-Modus und fängt Fehler ab.


Aber alles, was in den MODX-Protokollen angezeigt wird, sowie Fehler, die vom System unterdrückt werden,
wird in PhpDumpConsole nicht angezeigt


Die zweite Option: Offiziell - ohne Anpassung. Dies ist eine Erweiterung der ErrorHandler-Klasse und die Einstellung der entsprechenden Variablen in den MODX-Parametern.


Diese Lösung hat einen Nachteil. Wenn die Daten falsch in die Einstellungen eingegeben werden, stürzt die Site ab. Und die Situation kann nur über die Datenbank korrigiert werden.


Daher wird die Beschreibung dieser Option weggelassen.


In dieser Option können Sie alle generierten PHP-Fehler sehen. Die generierten Protokolle, in denen ein erheblicher Teil der MODX-Fehler auftritt, werden jedoch nicht angezeigt.


Die dritte Option, auf die ich persönlich eingegangen bin, besteht darin, das vollständige Routing von Skriptaufrufen über die Datei 'dev_route.php' einzurichten.
Mit .htaccess werden alle nicht statischen Aufrufe an die Datei dev_route.php geleitet.


ACHTUNG: Bis zum Ende wurde das Verhalten nicht untersucht. Möglicherweise bieten einige Anwendungen eine andere Logik für Anforderungen an die Site, deren Routing in dev_route.php nicht beschrieben ist.


ACHTUNG: .htaccess ist nicht vollständig abgeschlossen. Nicht alle statischen Ressourcen sind darin definiert. Daher werden sie in dev_route.php verarbeitet
Wir machen ein Backup der .htaccess Datei der alten.
Erstellen Sie einen neuen .htaccess im Stammverzeichnis des Site-Verzeichnisses und geben Sie den folgenden Code ein:


 # file .htaccess #---------------------------------------- #         . -        . RewriteCond %{REQUEST_URI} /manager/min/assets/.* RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_URI} /manager/assets/.* RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_URI} /assets/.* RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ - [R=404,L] #--------------------------------------- #--------------------------------------- #      RewriteCond %{REQUEST_URI} /manager/min/assets/.* RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_URI} /manager/assets/.* RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_URI} /assets/.* RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteRule ^(.*)$ $1 [L] #--------------------------------------- #--------------------------------------- #      c   . RewriteCond %{REQUEST_FILENAME} .*\.js$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.html$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.css$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.gif$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.jpg$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.jpeg$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.png$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.svg$ [OR] RewriteCond %{REQUEST_FILENAME} .*\.woff$ RewriteRule ^(.*)$ $1 [L] #--------------------------------------- #--------------------------------------- #   . RewriteCond %{REQUEST_URI} /manager(?:|/.*) RewriteRule ^(.*)$ dev_route.php [L] RewriteCond %{REQUEST_URI} /connectors(?:|/.*) RewriteRule ^(.*)$ dev_route.php [L] #--------------------------------------- #--------------------------------------- #    . RewriteCond %{REQUEST_URI} .* RewriteRule ^(.*)$ dev_route.php?q=$1 [L,QSA] #--------------------------------------- 

Wir erstellen die Datei dev_route.php im Stammverzeichnis des Site-Verzeichnisses und dev_route.php Code ein:


 <?php include_once '[yor path php dump]/vendor/autoload.php';//        new \Alpa\PhpDump\InitDump(); $redirect_url=$_SERVER['REDIRECT_URL']; $manager_path='manager'; $manager_dir='manager'; $connectors_path='connectors'; $connectors_dir='connectors'; if(preg_match("~^/{$manager_path}(|/[\s\S]*)$~",$redirect_url,$match)){ if(trim($match[1])=='' || trim($match[1])=='/' || !is_file(__DIR__.'/'.$manager_dir.$match[1])){ $match[1]='/index.php'; } include_once __DIR__.'/'.$manager_dir.$match[1]; } else if(preg_match("~^/{$connectors_path}(|/[\s\S]*)$~",$redirect_url,$match)){ if(trim($match[1])=='' || trim($match[1])=='/' || !is_file(__DIR__.'/'.$connectors_dir.$match[1])){ $match[1]='/index.php'; } include_once __DIR__.'/'.$connectors_dir.$match[1]; } else if(empty($redirect_url) || $redirect_url=='/' || $redirect_url=='/index.php'){ include_once __DIR__.'/index.php'; } else { //header( 'Location: /index.php' ); exit; include_once __DIR__.'/index.php'; } //include_once __DIR__.$redirect_url; 

core\xpdo\xpdo.class.php Nächstes in der Datei core\xpdo\xpdo.class.php (für MODX revo 2.7) die Protokollmethode wie folgt:


  public function log($level, $msg, $target= '', $def= '', $file= '', $line= '') { \deb::print($msg."=>[$target][$def][$file][$line]",'LOG'); $this->_log($level, $msg, $target, $def, $file, $line); } 

Und alle. Alles sollte für Sie richtig funktionieren.
Testen im Admin-Bereich. Wenn das Admin-Panel gut geladen ist, wird alles so gemacht, wie es sollte.


Wie man benutzt:


 //    .        \deb::print($var,'point1'); //      . \deb::dump($object,'point2'); //  var_dump \deb::vdump($object,'point3'); // var_export \deb::vexport($object,'point4'); //    \deb::infoClass($name_class, 'point5'); //        .    . \deb::error($errno = false, $errstr, $errfile = false, $errline = false, $errcontext = false); //       trigger_error(); 

Sicherheitseinstellungen


PhpDump ist derzeit nicht für professionelle Arbeit konzipiert, daher sind die Sicherheitsbedingungen minimal.


Wenn Sie beschlossen haben, PhpDump an eine vorhandene Site im Internet anzuhängen, ändern Sie in der Datei [Verzeichnis phpdump] /src/include_file_in_index.php die folgenden Einstellungen für die Autorisierung:


 $settings=[ 'hashkeys'=>[ 'HashKey'=>[ //      ().    'key'=>'HashKey', //    'greeting_server'=>'greeting_server', //          'greeting_client'=>'greeting_client' //      . ] ] ]; 

Wählen Sie auf der Clientseite in der Konsole in der Dropdown-Liste "Java Scripts Context" die Option "PhpDumpConsole" aus und geben Sie den Code in die Konsole ein


 dm.setHashKey({ hashkey:'HashKey', greeting_server:'greeting_server', greeting_client:'greeting_client' }); //  hashkey , greeting_server, greeting_client       . dm.bindHashKeyDomain({hashkey:'HashKey',domain:'global'}); //  domain:'your_domain' // domain='global'               . 

Andere Brötchen


Über die Konsole können Sie die Ein / Aus-Rückverfolgung steuern und die Ausgabe filtern.
All dies finden Sie in den Anweisungen auf der GitHub- Seite
PhpDump kann nicht nur für MODX verwendet werden, sondern auch in anderen Projekten. Die Hauptsache zu wissen, wie man befestigt.


PS: Wenn Sie Fans von MODX sind, werden Sie bald neue Brötchen finden: Eine Möglichkeit, die Kluft zu bilden und Schnipsel zu erobern. Logik-Snippets und Vorlagen-Snippets können sich selbst organisieren und miteinander gruppieren. Durch die Kombination von 2x-3x-Snippets können Sie das Verhalten erweitern.


Das Schreiben von Snippets ist flexibel. Programmierer müssen nicht den gesamten Zyklus des Schreibens eines Snippets beschreiben, sondern nur einen separaten Teil, der die API für die weitere Interaktion mit anderen Snippets beschreibt.


Danke an alle.

Source: https://habr.com/ru/post/de438088/


All Articles