PHPDump - Melakukan debugging di konsol Google Chrome dan berinteraksi dengan CMS MODX

Langsung ke intinya


Ada produk berpemilik yang berhasil membantu saya dalam debugging dan menyebutnya PhpDump .


Pada suatu waktu, CMS MODX meminta saya untuk menulis debugger saya. Tentu saja ada var_dump, phpConsole, xDebug di PHP. Tapi di sini saya dengan PhpDump


Saya akan mengatakan bahwa solusinya tidak sempurna, tetapi sangat praktis.


Seberapa besar Anda menyukainya, terserah Anda.


Berikut adalah beberapa tangkapan layar tentang tampilannya.




Dalam artikel ini saya akan memberi tahu Anda cara menginstal dan menggunakannya di CMS MODX Revo


Persyaratan


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


Unduh dan Instal


  • Komposer

Buat direktori untuk PhpDump secara terpisah dari proyek Anda. Karena Anda mungkin ingin menggunakannya di server lokal di berbagai proyek. Untuk melakukan ini, tidak perlu menginstalnya di mana-mana.


Di direktori, buat file composer.json dengan data berikut:


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

Di terminal, ketik $ composer install


Ketika menginstal melalui komposer, proyek akan berlokasi di [directory install]/vendor/PhpDump


  • Instalasi melalui GIT
    Perintah untuk terminal
    $ git clone https://github.com/ALexeyP0708/PhpDump.git

Atau unzip arsip zip.


dapat diunduh di sini GitHub


Instal PhpDumpConsole


Di Google Chrome, buka bagian Ekstensi , nyalakan mode pengembang (di sudut kanan atas), lalu .


Tentukan direktori [directory PhpDump]/ChromeExtension/PhpDumpConsole_v1.1 .


Ikon crosshair merah akan muncul di panel - roda gigi dalam lingkaran. Jika roda gigi tidak berubah biru ketika Anda mengklik, maka server tidak mendukung PhpDump atau klien tidak lulus otorisasi.


Pemeriksaan Kesehatan


lihat file [dirictory Php Dump]/tests/test_debugManager.php


Jika diinstal melalui komposer, maka Anda perlu menentukan rute yang benar ke file autoloader.


Untuk melakukan ini, ganti baris


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

pada


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

Direktori tempat PhpDump diinstal harus memiliki akses web dan perutean gratis ke skrip.


Misalkan Anda menetapkan PhpDump ke /sites/www/mysite/TestPhpDump dan mengakses situs web http://mysite/ lalu untuk menjalankan skrip pengujian
http://mysite/TestPhpDump/tests/test_debugManager.php


Halaman dengan kesalahan yang dihasilkan akan mulai. Luncurkan konsol Google Chrome dan klik roda gigi di panel aplikasi. Halaman akan dimuat ulang, gir akan berubah menjadi biru. Semua informasi sekarang akan ditampilkan di konsol.


Cara menjalankan proyek Anda


Di bagian atas halaman yang menjalankan skrip untuk proyek Anda, Anda harus menentukan:


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

Anda perlu memahami bahwa PhpDump berjalan dalam skenario di mana data string dideklarasikan.
Anda juga harus mempertimbangkan fakta bahwa PHPdumpConsole menampilkan dump tidak hanya untuk halaman utama, tetapi juga untuk permintaan ajax dan untuk skrip front-end yang dihasilkan oleh server secara dinamis.


Jika proyek Anda secara acak mengakses skenario yang berbeda (misalnya, halaman dimuat melalui Index.php, dan permintaan ajax dibuat melalui other.php atau browser memuat skrip yang dihasilkan js dinamis dari script.js.php), maka situasi yang tidak terduga dapat terjadi.


Dalam hal ini, semua rute harus melalui satu file skrip. Misalnya, melalui /index.php. Atau terapkan solusi tambahan, seperti yang dilakukan dengan MODX (dijelaskan di bawah).


Luncurkan di situs uji dengan CMS MODX


Ada beberapa solusi untuk menjalankan PhpDump di CMS MODX.


Solusi pertama - sesuai dengan instruksi di atas, tulis kode dalam file index.php situs Anda:


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

Dalam hal ini, PhpDump akan bekerja dalam mode debug dan menangkap kesalahan.


Tapi semua yang akan muncul di log MODX, serta kesalahan yang ditekan oleh sistem,
tidak akan ditampilkan di PhpDumpConsole


Opsi kedua: Resmi - tanpa membuat penyesuaian. Ini adalah ekstensi dari kelas ErrorHandler dan pengaturan variabel yang sesuai dalam parameter MODX.


Solusi ini memiliki kekurangan. Jika data dimasukkan secara tidak benar ke dalam pengaturan, situs macet. Dan situasinya hanya dapat diperbaiki melalui Database.


Karenanya, uraian opsi ini dihilangkan.


Dalam opsi ini, Anda dapat melihat semua kesalahan PHP yang dihasilkan. Tetapi Anda tidak akan melihat log yang dihasilkan, di mana sebagian besar kesalahan MODX muncul.


Opsi ketiga, yang saya pikirkan secara pribadi, adalah mengatur perutean skrip panggilan penuh melalui file 'dev_route.php';
Menggunakan .htaccess, semua panggilan non-statis diarahkan ke file dev_route.php.


PERHATIAN: Sampai akhir, perilaku belum diselidiki. Mungkin beberapa aplikasi mungkin menawarkan logika permintaan yang berbeda ke situs, peruteannya tidak dijelaskan dalam dev_route.php.


PERHATIAN: .htaccess belum selesai sepenuhnya. Tidak semua sumber daya statis didefinisikan di dalamnya. Karenanya, mereka akan diproses di dev_route.php
Kami membuat cadangan file .htaccess yang lama.
Buat .htaccess baru di root direktori situs dan masukkan kode:


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

Kami membuat file dev_route.php di root direktori situs dan dev_route.php kode di dalamnya:


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

Selanjutnya, dalam file core\xpdo\xpdo.class.php (untuk MODX revo 2.7), format metode log sebagai berikut:


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

Dan itu saja. Semuanya harus bekerja dengan baik untuk Anda.
Menguji di panel admin. jika panel admin memuat dengan baik, maka semuanya dilakukan sebagaimana mestinya.


Cara menggunakan:


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

Pengaturan keamanan


PhpDump saat ini tidak dirancang untuk pekerjaan profesional, sehingga kondisi keamanan minimal.


Jika Anda memutuskan untuk melampirkan PhpDump ke situs yang ada di Internet, maka dalam file [direktori phpdump] /src/include_file_in_index.php, ubah pengaturan berikut untuk otorisasi:


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

Di sisi klien di konsol, dalam daftar drop-down 'Java Scripts Context', pilih PhpDumpConsole dan masukkan kode di konsol


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

Roti lainnya


Melalui konsol, Anda dapat mengontrol backtrace on / off, memfilter output.
Anda dapat menemukan semua ini di instruksi di halaman GitHub
PhpDump dapat digunakan tidak hanya untuk MODX, tetapi juga di proyek lain. Hal utama yang harus diketahui cara mengikat.


PS: Jika Anda adalah penggemar MODX, maka segera Anda akan menemukan roti baru: Cara untuk membentuk potongan dan menaklukkan cuplikan. Cuplikan logika dan cuplikan templat dapat mengatur dan mengelompokkan satu sama lain, sehingga dengan menggabungkan cuplikan 2x-3x Anda dapat memperluas perilaku.


Ada fleksibilitas dalam menulis cuplikan. Pemrogram tidak perlu menggambarkan siklus lengkap penulisan cuplikan, tetapi hanya bagian yang terpisah, yang menjelaskan API-nya untuk interaksi lebih lanjut dengan cuplikan lainnya.


Terima kasih semuanya.

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


All Articles