PHPDump: depuración en la consola Google Chrome e interacción con CMS MODX

Directo al grano


Hay un producto patentado que me ayuda con éxito en la depuración y lo llamó PhpDump .


En un momento, CMS MODX me pidió que escribiera mi depurador. Por supuesto, hay var_dump, phpConsole, xDebug en PHP. Pero aquí estoy con mi PhpDump .


Diré que la solución no es perfecta, pero sí muy práctica.


Cu√°nto te gusta depende de ti.


Aquí hay algunas capturas de pantalla de cómo se ve esto.




En el artículo te diré cómo instalarlo y usarlo en CMS MODX Revo


Requisitos


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


Descargar e instalar


  • Compositor

Cree un directorio para PhpDump por separado de sus proyectos. Dado que es posible que desee usarlo en un servidor local en diferentes proyectos. Para hacer esto, no es necesario instalarlo en todas partes.


En el directorio, cree un archivo composer.json con los siguientes datos:


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

En la terminal, escribe $ composer install


Al instalar a través de Composer, el proyecto se ubicará en la [directory install]/vendor/PhpDump


  • Instalaci√≥n a trav√©s de GIT
    Comando para terminal
    $ git clone https://github.com/ALexeyP0708/PhpDump.git

O descomprima el archivo zip.


se puede descargar aquí GitHub


Instalar PhpDumpConsole


En Google Chrome, vaya a la sección Extensiones , active el modo desarrollador (en la esquina superior derecha), luego .


Especifique el directorio [directory PhpDump]/ChromeExtension/PhpDumpConsole_v1.1 .


Aparecerá un ícono de cruz roja en el panel: un engranaje en un círculo. Si el engranaje no se vuelve azul cuando hace clic, entonces el servidor no es compatible con PhpDump o el cliente no pasa la autorización.


Control de salud


echa un vistazo al archivo [dirictory Php Dump]/tests/test_debugManager.php


Si se instala a través del compositor, debe especificar la ruta correcta al archivo del cargador automático.


Para hacer esto, reemplace la línea


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

en


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

El directorio donde est√° instalado PhpDump debe tener acceso web y enrutamiento libre a los scripts.


Suponga que configura PhpDump en /sites/www/mysite/TestPhpDump y accede al sitio web http://mysite/ luego para ejecutar el script de prueba
http://mysite/TestPhpDump/tests/test_debugManager.php


Se iniciará la página con los errores generados. Inicie la consola Google Chrome y haga clic en el engranaje en el panel de aplicaciones. La página se volverá a cargar, el engranaje se volverá azul. Toda la información se mostrará ahora en la consola.


Cómo ejecutar tu proyecto


En la parte superior de la p√°gina que ejecuta el script para su proyecto, debe especificar:


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

Debe comprender que PhpDump se ejecuta en el escenario donde se declaran los datos de cadena.
También debe tener en cuenta el hecho de que PHPdumpConsole muestra un volcado no solo para la página principal, sino también para las solicitudes ajax y para los scripts de front-end generados dinámicamente por el servidor.


Si su proyecto accede aleatoriamente a diferentes escenarios (por ejemplo, la página se cargó a través de Index.php, y la solicitud ajax se realizó a través de other.php o el navegador carga un script dinámico generado por js desde script.js.php), pueden ocurrir situaciones imprevistas.


En este caso, es necesario que todo el enrutamiento pase por un solo archivo de secuencias de comandos. Por ejemplo, a través de /index.php. O aplique soluciones adicionales, como se hizo con MODX (descrito a continuación).


Lanzamiento en un sitio de prueba con CMS MODX


Hay varias soluciones para ejecutar PhpDump en CMS MODX.


La primera solución: de acuerdo con las instrucciones anteriores, escriba el código en el archivo index.php de su sitio:


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

En este caso, PhpDump funcionará en modo de depuración y detectará errores.


Pero todo lo que aparecerá en los registros MODX, así como los errores que el sistema suprime,
no se mostrar√° en PhpDumpConsole


La segunda opción: Oficial - sin hacer personalización. Esta es una extensión de la clase ErrorHandler y la configuración de las variables correspondientes en los parámetros MODX.


Esta solución tiene un inconveniente. Si los datos se ingresan incorrectamente en la configuración, el sitio se bloquea. Y la situación solo se puede corregir a través de la base de datos.


Por lo tanto, se omite la descripción de esta opción.


En esta opción, puede ver todos los errores PHP generados. Pero no verá los registros generados, en los que aparece una parte significativa de los errores MODX.


La tercera opción, en la que me he ocupado personalmente, es configurar el enrutamiento completo de las llamadas de script a través del archivo 'dev_route.php';
Usando .htaccess, todas las llamadas no est√°ticas se dirigen al archivo dev_route.php.


ATENCI√ďN: Hasta el final, el comportamiento no ha sido investigado. Quiz√°s algunas aplicaciones puedan ofrecer una l√≥gica diferente de solicitudes al sitio, cuyo enrutamiento no se describe en dev_route.php.


ATENCI√ďN: .htaccess no se completa por completo. No todos los recursos est√°ticos est√°n definidos en √©l. Por lo tanto, se procesar√°n en dev_route.php
Hacemos una copia de seguridad del archivo .htaccess de la .htaccess anterior.
Cree un nuevo .htaccess en la raíz del directorio del sitio e ingrese el código:


 # 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] #--------------------------------------- 

Creamos el archivo dev_route.php en la raíz del directorio del sitio e dev_route.php código en él:


 <?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; 

A continuación, en el archivo core\xpdo\xpdo.class.php (para MODX revo 2.7), formatee el método de registro de la siguiente manera:


  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); } 

Y eso es todo. Todo debería funcionar correctamente para usted.
Pruebas en el panel de administración. si el panel de administración se carga bien, entonces todo se hace como debería.


Cómo utilizar:


 //    .        \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(); 

Configuraciones de seguridad


Actualmente, PhpDump no est√° dise√Īado para trabajos profesionales, por lo que las condiciones de seguridad son m√≠nimas.


Si decide adjuntar PhpDump a un sitio existente en Internet, en el archivo [directorio phpdump] /src/include_file_in_index.php, cambie la siguiente configuración para la autorización:


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

En el lado del cliente en la consola, en la lista desplegable 'Contexto de Java Scripts', seleccione PhpDumpConsole e ingrese el código en la consola


 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'               . 

Otros bollos


A través de la consola, puede controlar el seguimiento de encendido / apagado, filtrar la salida.
Puede encontrar todo esto en las instrucciones en la p√°gina de GitHub
PhpDump puede usarse no solo para MODX, sino también en otros proyectos. Lo principal para saber cómo abrocharse.


PD: Si eres fanático de MODX, pronto encontrarás nuevos bollos: una forma de dividir y conquistar fragmentos. Los fragmentos lógicos y los fragmentos de plantilla pueden autoorganizarse y agruparse entre sí, combinando así fragmentos 2x-3x para expandir el comportamiento.


Hay flexibilidad en la escritura de fragmentos. Los programadores no necesitarán describir el ciclo completo de escritura de un fragmento, sino solo una parte separada, describiendo su API para una mayor interacción con otros fragmentos.


Gracias a todos.

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


All Articles