PHPDump-在Google Chrome控制台中进行调试并与CMS MODX进行交互

直截了当


有一个专有产品可以成功地帮助我进行调试,并将其称为PhpDump


一次,CMS MODX提示我编写调试器。 当然,PHP中有var_dump,phpConsole和xDebug。 但是我在这里与我的PhpDump在一起


我会说解决方案不是完美的,但很实用。


您喜欢多少取决于您。


这是一些外观截图。




在本文中,我将告诉您如何在CMS MODX Revo中安装和使用它


要求条件


Apache + PHP 7,CMS MODX Revo 2.7
Git +作曲家


下载并安装


  • 作曲家

与项目分开为PhpDump创建目录。 由于您可能想在不同项目的本地服务器上使用它。 为此,没有必要在任何地方安装它。


在目录中,使用以下数据创建一个composer.json文件:


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

在终端中,键入$ composer install


通过composer安装时,该项目将位于[directory install]/vendor/PhpDump


  • 通过GIT安装
    终端命令
    $ git clone https://github.com/ALexeyP0708/PhpDump.git

或解压缩zip存档。


可以在这里下载GitHub


安装PhpDumpConsole


在Google Chrome浏览器中,转到“ 扩展程序”部分,打开开发人员模式(在右上角),然后


指定目录[directory PhpDump]/ChromeExtension/PhpDumpConsole_v1.1


面板上将出现一个红色的十字线图标-一个圆圈。 如果单击时齿轮未变为蓝色,则说明服务器不支持PhpDump或客户端未通过授权。


健康检查


检出文件[dirictory Php Dump]/tests/test_debugManager.php


如果通过作曲家安装,则需要指定到自动加载器文件的正确路径。


为此,请替换行


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


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

PhpDump的安装目录必须具有Web访问权限,并且可以自由路由到脚本。


假设您将PhpDump设置为/sites/www/mysite/TestPhpDump并访问网站http://mysite/然后运行测试脚本
http://mysite/TestPhpDump/tests/test_debugManager.php


具有所生成错误的页面将开始。 启动Google Chrome控制台,然后在应用程序面板中单击齿轮。 页面将重新加载,齿轮将变成蓝色。 现在,所有信息将显示在控制台中。


如何在您的项目上运行


在运行项目脚本的页面的顶部,必须指定:


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

您需要了解PhpDump在声明字符串数据的情况下运行。
您还应该考虑到PHPdumpConsole不仅会为主页显示转储,还会为Ajax请求以及由服务器动态生成的前端脚本显示转储。


如果您的项目随机访问不同的场景(例如,页面是通过Index.php加载的,而ajax请求是通过other.php发出的,或者浏览器从script.js.php加载了动态js生成的脚本),则可能会发生无法预料的情况。


在这种情况下,所有路由都必须通过一个脚本文件。 例如,通过/index.php。 或应用其他解决方案,如使用MODX所做的(如下所述)。


使用CMS MODX在测试站点上启动


有几种在CMS MODX上运行PhpDump的解决方案。


第一个解决方案-根据上述说明,将代码写入您网站的index.php文件中:


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

在这种情况下,PhpDump将在调试模式下工作并捕获错误。


但是,将在MODX日志中显示的所有内容以及系统抑制的错误,
将不会显示在PhpDumpConsole中


第二种选择:官方-不进行自定义。 这是ErrorHandler类以及MODX参数中相应变量的设置的扩展。


该解决方案具有缺点。 如果将数据错误地输入到设置中,则站点将崩溃。 而且这种情况只能通过数据库来纠正。


因此,省略了此选项的描述。


在此选项中,您可以看到所有生成的PHP错误。 但是您不会看到生成的日志,该日志中会出现很大一部分的MODX错误。


我个人介绍的第三个选项是通过文件'dev_route.php'设置脚本调用的完整路由。
使用.htaccess,所有非静态调用都将定向到dev_route.php文件。


注意:直到最后,该行为尚未得到调查。 也许某些应用程序可能会向站点提供不同的请求逻辑,但dev_route.php中未描述其路由。


注意: .htaccess尚未完全完成。 并非所有静态资源都在其中定义。 因此,它们将在dev_route.php中进行处理
我们备份旧的.htaccess文件。
在站点目录的根目录中创建一个新的.htaccess并输入代码:


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

我们在站点目录的根目录中创建dev_route.php文件,并在其中dev_route.php代码:


 <?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 (对于core\xpdo\xpdo.class.php revo 2.7)中,格式化日志方法,如下所示:


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

仅此而已。 一切都应该为您正常工作。
在管理面板中进行测试。 如果管理面板加载良好,则说明一切均已完成。


使用方法:


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

安全设定


PhpDump当前不适用于专业工作,因此安全性要求极低。


如果您决定将PhpDump附加到Internet上的现有站点,则在[目录phpdump] /src/include_file_in_index.php文件中,更改以下授权设置:


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

在控制台的客户端上的“ Java Script Context”下拉列表中,选择“ PhpDumpConsole”,然后在控制台中输入代码


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

其他bun头


通过控制台,您可以控制打开/关闭回溯,过滤输出。
您可以在GitHub页面上的说明中找到所有这些内容
PhpDump不仅可以用于MODX,而且还可以用于其他项目。 最重要的是要知道如何系紧。


PS:如果您是MODX的粉丝,那么很快您就会发现新的包子:形成分隔和征服摘要的方法。 逻辑代码段和模板代码段可以自组织和相互分组,从而结合使用2x-3x代码段可以扩展行为。


编写代码片段具有灵活性。 程序员将不需要描述编写代码段的整个周期,而只需描述一个单独的部分,即可描述其与其他代码段进行进一步交互的API。


谢谢大家

Source: https://habr.com/ru/post/zh-CN438088/


All Articles