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
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
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';
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';
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:
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'=>[
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.