PHPDump - تصحيح الأخطاء في وحدة تحكم Google Chrome والتفاعل مع CMS MODX

مباشرة إلى هذه النقطة


هناك منتج خاص يساعدني بنجاح في تصحيح الأخطاء ويطلق عليه PhpDump .


في وقت واحد ، طلب مني CMS MODX كتابة مصحح الأخطاء الخاص بي. بالطبع هناك var_dump ، phpConsole ، xDebug في PHP. ولكن هنا أنا مع بلدي PhpDump .


سأقول إن الحل ليس مثاليًا ، لكنه عملي للغاية.


كم يعجبك الأمر متروك لك.


فيما يلي بعض لقطات كيفية ظهور هذا.




سأخبرك في المقالة عن كيفية تثبيته واستخدامه في CMS MODX Revo


المتطلبات


Apache + PHP 7، CMS MODX Revo 2.7
بوابة + الملحن


تحميل وتثبيت


  • الملحن

إنشاء دليل ل 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


عند التثبيت من خلال الملحن ، سيتم وضع المشروع في [directory install]/vendor/PhpDump


  • التثبيت عبر GIT
    قيادة المحطة
    $ git clone https://github.com/ALexeyP0708/PhpDump.git

أو قم بفك ضغط أرشيف الرمز البريدي.


يمكن تنزيلها هنا


تثبيت 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 الوصول إلى شبكة الإنترنت والتوجيه المجاني إلى البرامج النصية.


افترض أنك قمت بتعيين 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 أو قام المتصفح بتحميل برنامج نصي ديناميكي تم إنشاؤه من js من script.js.php) ، فقد تحدث مواقف غير متوقعة.


في هذه الحالة ، من الضروري أن تمر جميع التوجيهات بملف نصي واحد. على سبيل المثال ، عبر /index.php. أو قم بتطبيق حلول إضافية ، كما حدث مع MODX (الموضح أدناه).


إطلاق على موقع اختبار مع CMS MODX


هناك العديد من الحلول لتشغيل PhpDump على CMS MODX.


الحل الأول - وفقًا للتعليمات المذكورة أعلاه ، اكتب الرمز في ملف 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 (لـ MODX 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 إلى موقع موجود على الإنترنت ، فعندئذ في ملف [directory phpdump] /src/include_file_in_index.php ، قم بتغيير الإعدادات التالية للترخيص:


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

من جانب العميل في وحدة التحكم ، في القائمة المنسدلة "سياق جافا سكريبت" ، حدد 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'               . 

الكعك الأخرى


من خلال وحدة التحكم ، يمكنك التحكم في تشغيل / إيقاف backtrace ، تصفية الإخراج.
يمكنك العثور على كل هذا في الإرشادات الموجودة على صفحة جيثب
PhpDump يمكن استخدامها ليس فقط ل MODX ، ولكن أيضا في مشاريع أخرى. الشيء الرئيسي لمعرفة كيفية ربط.


ملاحظة: إذا كنت من محبي MODX ، فستجد قريبًا كعكات جديدة: طريقة لتشكيل الفجوات وقهر المقتطفات. يمكن للقصاصات المنطقية ومقتطفات القوالب التنظيم الذاتي والتجميع مع بعضها البعض ، وبالتالي ، يمكنك الجمع بين القصاصات 2x-3x لتوسيع السلوك.


هناك مرونة في كتابة المقتطفات. لن يحتاج المبرمجون إلى وصف الدورة الكاملة لكتابة مقتطف ، ولكن فقط جزء منفصل ، يصف API الخاصة به لمزيد من التفاعل مع المقتطفات الأخرى.


شكرا لكم جميعا

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


All Articles