PHPDump - Depurando no console do Google Chrome e interagindo com o CMS MODX

Direto ao ponto


Existe um produto proprietário que me ajuda com êxito na depuração e o chamou de PhpDump .


Ao mesmo tempo, o CMS MODX solicitou que eu escrevesse meu depurador. Claro que existe var_dump, phpConsole, xDebug no PHP. Mas aqui estou eu com o meu PhpDump .


Eu direi que a solução não é perfeita, mas muito prática.


Quanto você gosta, você decide.


Aqui estão algumas capturas de tela de como isso se parece.




No artigo, mostrarei como instalar e usá-lo no CMS MODX Revo


Exigências


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


Baixe e instale


  • Compositor

Crie um diretório para o PhpDump separadamente de seus projetos. Como você pode usá-lo em um servidor local em diferentes projetos. Para fazer isso, não é necessário instalá-lo em qualquer lugar.


No diretório, crie um arquivo composer.json com os seguintes dados:


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

No terminal, digite $ composer install


Ao instalar através do compositor, o projeto estará localizado na [directory install]/vendor/PhpDump


  • Instalação via GIT
    Comando para terminal
    $ git clone https://github.com/ALexeyP0708/PhpDump.git

Ou descompacte o arquivo zip.


pode ser baixado aqui no GitHub


Instale o PhpDumpConsole


No Google Chrome, vá para a seção Extensões , ative o modo de desenvolvedor (no canto superior direito) e faça o .


Especifique o diretório [directory PhpDump]/ChromeExtension/PhpDumpConsole_v1.1 .


Um ícone de mira vermelho aparecerá no painel - uma engrenagem em um círculo. Se a engrenagem não ficar azul quando você clicar, o servidor não suportará o PhpDump ou o cliente não passará a autorização.


Verificação de integridade


confira o arquivo [dirictory Php Dump]/tests/test_debugManager.php


Se instalado através do compositor, você precisará especificar a rota correta para o arquivo do carregador automático.


Para fazer isso, substitua a linha


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

em


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

O diretório em que o PhpDump está instalado deve ter acesso à web e roteamento gratuito para scripts.


Suponha que você defina o PhpDump como /sites/www/mysite/TestPhpDump e acesse o site http://mysite/ para executar o script de teste
http://mysite/TestPhpDump/tests/test_debugManager.php


A página com os erros gerados será iniciada. Inicie o console do Google Chrome e clique na engrenagem no painel do aplicativo. A página será recarregada, a engrenagem ficará azul. Todas as informações agora serão exibidas no console.


Como executar em seu projeto


Na parte superior da página que executa o script para seu projeto, você deve especificar:


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

Você precisa entender que o PhpDump é executado no cenário em que os dados da string são declarados.
Você também deve levar em consideração o fato de que o PHPdumpConsole exibe um dump não apenas para a página principal, mas também para solicitações de ajax e para scripts de front-end gerados dinamicamente pelo servidor.


Se o seu projeto acessar aleatoriamente diferentes cenários (por exemplo, a página foi carregada através do Index.php e a solicitação do ajax foi feita através do other.php ou o navegador carregar script dinâmico gerado por js do script.js.php), situações imprevistas podem ocorrer.


Nesse caso, é necessário que todo o roteamento passe por um único arquivo de script. Por exemplo, via /index.php. Ou aplique soluções adicionais, como foi feito com o MODX (descrito abaixo).


Iniciar em um site de teste com o CMS MODX


Existem várias soluções para executar o PhpDump no CMS MODX.


A primeira solução - de acordo com as instruções acima, escreva o código no arquivo index.php do seu site:


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

Nesse caso, o PhpDump funcionará no modo de depuração e detectará erros.


Mas tudo o que aparecerá nos logs do MODX, bem como os erros suprimidos pelo sistema,
não será exibido no PhpDumpConsole


A segunda opção: Oficial - sem fazer personalização. Essa é uma extensão da classe ErrorHandler e a configuração das variáveis ​​correspondentes nos parâmetros MODX.


Esta solução tem uma desvantagem. Se os dados forem inseridos incorretamente nas configurações, o site trava. E a situação pode ser corrigida apenas através do banco de dados.


Portanto, a descrição desta opção é omitida.


Nesta opção, você pode ver todos os erros PHP gerados. Mas você não verá os logs gerados, nos quais uma parte significativa dos erros do MODX aparece.


A terceira opção, na qual eu pessoalmente me referi, é configurar o roteamento completo de chamadas de script por meio do arquivo 'dev_route.php';
Usando .htaccess, todas as chamadas não estáticas são direcionadas para o arquivo dev_route.php.


ATENÇÃO: Até o final, o comportamento não foi investigado. Talvez alguns aplicativos possam oferecer uma lógica diferente de solicitações para o site, cujo roteamento não está descrito em dev_route.php.


ATENÇÃO: .htaccess não foi concluído completamente. Nem todos os recursos estáticos estão definidos nele. Portanto, eles serão processados ​​em dev_route.php
Fazemos um backup do arquivo .htaccess do antigo.
Crie um novo .htaccess na raiz do diretório do site e digite o 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] #--------------------------------------- 

Criamos o arquivo dev_route.php na raiz do diretório do site e dev_route.php código nele:


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

Em seguida, no arquivo core\xpdo\xpdo.class.php (para o MODX revo 2.7), formate o método de log da seguinte maneira:


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

E isso é tudo. Tudo deve funcionar corretamente para você.
Teste no painel de administração. se o painel do administrador carregar bem, tudo será feito como deveria.


Como usar:


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

Configurações de segurança


Atualmente, o PhpDump não foi projetado para trabalho profissional, portanto as condições de segurança são mínimas.


Se você decidir anexar o PhpDump a um site existente na Internet, no arquivo [diretório phpdump] /src/include_file_in_index.php, altere as seguintes configurações para autorização:


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

No lado do cliente no console, na lista suspensa 'Java Scripts Context', selecione PhpDumpConsole e insira o código no console


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

Outros pãezinhos


Através do console, você pode controlar o on / off backtrace, filtrar a saída.
Você pode encontrar tudo isso nas instruções na página do GitHub
O PhpDump pode ser usado não apenas para o MODX, mas também em outros projetos. A principal coisa a saber como prender.


PS: Se você é fã do MODX, em breve encontrará novos pães: Uma maneira de formar a divisão e conquistar trechos. Os trechos de lógica e os trechos de modelo podem se auto-organizar e agrupar, combinando trechos 2x-3x para expandir o comportamento.


Há flexibilidade na escrita de trechos. Os programadores não precisarão descrever o ciclo completo de gravação de um trecho, mas apenas uma parte separada, descrevendo sua API para interação adicional com outros trechos.


Obrigado a todos.

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


All Articles