Bagaimana Anda men-debug fungsi di php?

Referensi Kesalahan PHP

Contoh

Menghasilkan backtrace PHP

fungsi a($txt) {
b("Glenn");
}
fungsi b($txt) {
c("Cleveland");
}
fungsi c($txt) {
var_dump(debug_backtrace());
}
a("Petrus");
?>

Cobalah sendiri "


Definisi dan Penggunaan

Fungsi debug_backtrace() menghasilkan PHP backtrace

Fungsi ini menampilkan data dari kode yang mengarah ke fungsi debug_backtrace()

Mengembalikan array array asosiatif. Kemungkinan elemen yang dikembalikan adalah

NameTypeDescriptionfunctionstringFungsi saat ini namelineintegerNomor baris saat inifilestringNama file saat iniclassstringNama kelas saat iniobjectobjectObjek saat initypestringJenis panggilan saat ini. Kemungkinan panggilan
  • Pengembalian. "->"  - Panggilan metode
  • Pengembalian. ". "  - Pemanggilan metode statis
  • Tidak mengembalikan apa pun - Panggilan fungsi
argsarrayJika di dalam suatu fungsi, ia mencantumkan argumen fungsi. Jika di dalam file yang disertakan, daftar nama file yang disertakan

Sintaksis

debug_backtrace(opsi, batas);

Nilai Parameter

ParameterDeskripsiopsiOpsional. Menentukan bitmask untuk opsi berikut
DEBUG_BACKTRACE_PROVIDE_OBJECT (Apakah mengisi indeks "objek" atau tidak
DEBUG_BACKTRACE_IGNORE_ARGS (Apakah menghapus indeks "args" atau tidak, dan semua argumen fungsi/metode, untuk menghemat memori)limitOpsional. Membatasi jumlah bingkai tumpukan yang dicetak. Secara default (limit=0) ini mencetak semua frame stack

Detail Teknis

Nilai Pengembalian. Array array asosiatif Versi PHP. 4. 3+PHP Changelog. PHP5. 4. Batas parameter opsional telah ditambahkan
PHP5. 3. 6. Parameter provide_object diubah menjadi opsi dan opsi tambahan DEBUG_BACKTRACE_IGNORE_ARGS ditambahkan
PHP5. 2. 5. Provide_object parameter opsional telah ditambahkan
PHP5. 1. 1. Menambahkan objek saat ini sebagai kemungkinan elemen pengembalian

Referensi Kesalahan PHP

Hei, baru-baru ini saya senang berbicara dengan Alex (https. //alexwebdevelop. com), pengembang PHP Italia yang sangat berpengalaman yang membantu perusahaan mengembangkan dan memelihara aplikasi PHP mereka

Saya setuju untuk memposting salah satu artikelnya di blog kami. Semoga bermanfaat bagi Anda untuk lebih memahami beberapa detail teknis tentang PHP


Bagaimana Anda men-debug kode PHP, tanpa menggunakan debugger?

Dalam tutorial ini, Anda akan mempelajari cara men-debug skrip PHP dengan cara mudah. Sebenarnya, saya akan menunjukkan caranya

  • Menampilkan kesalahan dan peringatan PHP
  • Debug variabel dan fungsi
  • Simpan log debug ke database atau ke file
  • Kirim data debug ke alamat email

Jadi, jika Anda ingin men-debug kode PHP tanpa menginstal debugger, ini adalah panduan untuk Anda

Mari kita mulai

Tentang debug PHP

Ketika skrip PHP Anda tidak berfungsi seperti yang diharapkan, Anda perlu men-debugnya untuk melihat apa yang salah

Namun, menyiapkan lingkungan debug adalah proses rumit yang memerlukan penginstalan debugger PHP seperti Xdebug atau Zend Debugger

Ini bisa menjadi tugas yang menakutkan, terutama pada lingkungan produksi

Untungnya, ada cara yang lebih sederhana untuk men-debug kode PHP Anda. Dan Anda tidak perlu menggunakan debugger sama sekali

Dalam tutorial ini Anda akan mempelajari beberapa teknik debugging yang cepat & mudah, termasuk

  • Menggunakan pelaporan kesalahan PHP
  • Men-debug variabel skrip Anda
  • Mendapatkan backtrace panggilan fungsi
  • Mencatat data debug Anda

Mari kita mulai dengan yang pertama

Mengaktifkan pelaporan kesalahan PHP

Mesin PHP menghasilkan pesan debug yang berguna ketika menemukan masalah dalam kode. Fungsi ini disebut pelaporan error

Pesan debug ini dapat berupa Kesalahan, Peringatan atau Pemberitahuan

(Sebenarnya ada lebih banyak jenis yang mungkin, tetapi semuanya dapat dikelompokkan ke dalam tiga jenis sebelumnya. Anda dapat menemukan daftar lengkapnya di sini jika Anda tertarik)

Kesalahan dipicu saat masalah kritis ditemukan dalam kode. Ketika itu terjadi, eksekusi skrip berhenti

Peringatan dipicu ketika masalah parah ditemukan. Peringatan tidak sepenting Kesalahan dan membiarkan eksekusi skrip berlanjut

Terakhir, Pemberitahuan dipicu ketika ditemukan kesalahan, tetapi tidak separah Peringatan

Bagaimana Anda men-debug fungsi di php?
Bagaimana Anda men-debug fungsi di php?

Berikut adalah beberapa contoh pelaporan kesalahan

  • Jika Anda menggunakan sintaks yang tidak valid, PHP akan menghasilkan Kesalahan dan menghentikan eksekusi skrip
  • Jika koneksi database gagal, PHP menghasilkan Peringatan (dan eksekusi skrip berlanjut)
  • Jika Anda salah mengeja variabel atau menggunakan indeks larik yang tidak valid, PHP akan membuat Pemberitahuan (dan eksekusi skrip berlanjut)

Sekarang, inilah masalahnya

Anda tidak ingin menampilkan pesan-pesan ini dalam produksi, karena dapat mengacaukan HTML keluaran

Selain itu, pesan semacam itu dapat membantu penyerang mendapatkan informasi tentang sistem Anda (saya menjelaskan dengan tepat cara menghindari ini dan masalah keamanan serupa di kursus Keamanan PHP saya)

Namun, mereka sangat berguna untuk keperluan debugging

Jadi, Anda ingin dapat melihat pesan tersebut, tetapi pada saat yang sama, Anda ingin menyembunyikannya dari pengguna jarak jauh

Ini mungkin terlihat rumit, tetapi Anda dapat melakukannya dalam tiga langkah sederhana

Langkah 1. aktifkan pelaporan kesalahan

Pertama, pastikan pelaporan kesalahan diaktifkan

Telusuri arahan error_reporting di php Anda. file ini

Arahan ini memungkinkan pelaporan kesalahan untuk jenis pesan tertentu. Pengaturan paling umum, yang juga saya rekomendasikan, adalah yang berikut ini

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Ini adalah pengaturan default pada banyak instalasi. Diterjemahkan ke dalam bahasa Inggris, katanya. “Aktifkan pelaporan kesalahan untuk semua jenis pesan, kecuali yang sudah usang dan ketat”

Anda dapat menggunakan pengaturan di atas dengan aman

Jika pengaturan Anda berbeda dan Anda lebih suka tetap seperti itu, jangan ragu untuk membagikannya di komentar dan saya akan memberi tahu Anda apa fungsinya

Jika Anda tidak memiliki akses ke php. Ini, Anda dapat mengaktifkan pelaporan kesalahan saat runtime langsung dari skrip PHP dengan menggunakan fungsi error_reporting() 

Anda harus melakukannya untuk setiap skrip tempat Anda ingin mengaktifkan pelaporan kesalahan

Misalnya, pernyataan berikut memiliki efek yang sama dengan php.ini sebelumnya. ini, tetapi hanya untuk skrip yang dieksekusi

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_

Langkah 2. matikan keluaran kesalahan HTML

Arahan error_reporting adalah “sakelar utama” untuk pelaporan error

Selain itu, Anda juga perlu memberi tahu PHP ke mana pesan debug (Kesalahan, Peringatan, dan Pemberitahuan) akan dikirim

PHP dapat mengirim pesan debug ke

  • File log error PHP
  • Skrip keluaran HTML

Opsi pertama, log kesalahan, dapat bermanfaat dan tidak memiliki implikasi keamanan. Oleh karena itu, ada baiknya untuk mengaktifkannya. Anda dapat melakukannya dengan mengatur php ini. petunjuk ini

log_errors = On

log_errors biasanya diaktifkan secara default

Opsi kedua membuat pesan debug muncul di skrip keluaran HTML. Seperti yang kami sebutkan sebelumnya, mengaktifkan opsi ini bukanlah ide yang baik, jadi pastikan untuk menonaktifkannya

Untuk melakukannya, Anda perlu menyetel direktif display_errors ke Nonaktif di php.ini Anda. file ini

display_errors = Off

Sekarang, pesan debug disimpan ke file kesalahan PHP saja. Ini adalah konfigurasi produksi standar

Tetapi Anda tidak harus menggunakan file log untuk men-debug skrip Anda

Pada langkah #3, saya akan menunjukkan cara menampilkan pesan debug dalam keluaran HTML hanya untuk Anda sendiri, tanpa memengaruhi pengguna biasa

Langkah 3. aktifkan keluaran kesalahan HTML hanya untuk Anda sendiri

Meskipun Anda menonaktifkan pelaporan kesalahan HTML di php. ini (dengan menonaktifkan direktif display_errors ), Anda masih dapat mengaktifkannya saat runtime dengan menggunakan fungsi ini_set() 

Lagi. Anda tidak ingin selalu melakukannya, tetapi hanya untuk diri Anda sendiri. Jadi, Anda perlu melakukannya dengan syarat

Ada empat cara berbeda untuk melakukannya

  • Dengan membuat salinan skrip untuk men-debug-nya
  • Dengan menggunakan alamat IP Anda sebagai filter
  • Dengan menggunakan pengguna tertentu
  • Dengan menggunakan parameter permintaan

Opsi #1 buat salinan skrip

Ini adalah solusi paling sederhana

Anda hanya perlu menyalin skrip yang ingin di-debug ke lokasi lain (lebih baik jika pribadi) dan menambahkan pernyataan ini_set() di awal

Ini adalah sintaks ini_set() untuk mengaktifkan pelaporan kesalahan HTML

<?php
/* Enable HTML error reporting. */
ini_set('display_errors', '1');
_

Kemudian, Anda dapat mengerjakan salinan skrip tempat Anda dapat melihat pesan debug

Setelah menemukan masalahnya, Anda dapat memperbaiki skrip aslinya

Pilihan 2. gunakan alamat IP Anda

Jika Anda memiliki alamat IP statis, Anda dapat memutuskan apakah menampilkan pesan kesalahan tergantung pada IP penampil halaman

Misalnya, katakanlah alamat IP statis Anda adalah 1. 1. 1. 1

Ini adalah bagaimana Anda dapat mengaktifkan pelaporan kesalahan HTML hanya ketika skrip dijalankan oleh IP tersebut

<?php
/* Your IP. */
$myIP = '1.1.1.1';
/* Check the request IP address. */
if ($_SERVER['REMOTE_ADDR'] == $myIP)
{
  /* Enable HTML error reporting. */
  ini_set('display_errors', '1');
}

Opsi #3. menggunakan pengguna tertentu

Jika Anda men-debug aplikasi PHP berbasis autentikasi, Anda dapat membuat pengguna khusus untuk tujuan debug

Misalnya, Anda menggunakan kelas Akun saya. Anda dapat membuat pengguna "debug" dan mengaktifkan pelaporan kesalahan HTML hanya untuk akun tersebut

Ini adalah cara untuk melakukannya

<?php
/* Include the Account class. */
include 'account_class.php';
/* Authentication steps.. */
$account = new Account();
/* .. */
/* Check the user name. */
if ($account->getName() == 'debug')
{
  /* Enable HTML error reporting. */
  ini_set('display_errors', '1');
}
_

Ini berfungsi untuk sistem otentikasi apa pun. Anda hanya perlu menggunakan sintaks yang tepat untuk sistem yang Anda gunakan

Opsi #4. menggunakan parameter permintaan

Jika tidak ada solusi sebelumnya yang bekerja untuk Anda, Anda dapat menggunakan parameter permintaan sebagai sakelar debug

Misalnya, kode berikut mengaktifkan pelaporan error HTML hanya jika parameter permintaan “enable_debug” disetel ke “1”

<?php
/* Check if the "enable_debug" request parameter is set and its value is "1". */
if (isset($_REQUEST['enable_debug']))
{
  if ($_REQUEST['enable_debug'] == '1')
  {
    /* Enable HTML error reporting. */
    ini_set('display_errors', '1');
  }
}

Perhatikan bahwa setiap pengunjung halaman yang mengetahui parameter permintaan dapat mengaktifkan pesan kesalahan HTML

Debug variabel

Pelaporan kesalahan PHP berguna untuk memeriksa apakah ada yang salah dengan sintaks kode

Namun, Anda sering perlu melihat variabel untuk memperbaiki skrip. Di sinilah debugging variabel berperan

Cara paling sederhana untuk memeriksa nilai suatu variabel adalah dengan "menggemakan" itu. Misalnya, dalam kode berikut, Anda dapat mengulang variabel $domain untuk memastikannya benar

$addr = 'www.google.com';
$domain = mb_substr($addr, mb_strpos($addr, '.') + 1);
/* Is $domain correct? */
echo $domain;
_

Saat men-debug variabel Anda, Anda ingin membatasi keluaran debug untuk diri Anda sendiri, seperti untuk pelaporan kesalahan HTML

Anda juga dapat menggunakan teknik yang sama dengan yang Anda pelajari di bab sebelumnya untuk debugging variabel. membuat salinan skrip, menggunakan alamat IP Anda, menggunakan pengguna tertentu, atau menggunakan parameter permintaan

Misalnya, ini adalah cara menggemakan variabel $domain hanya saat mengakses halaman sebagai pengguna debug

<?php
/* Include the Account class. */
include 'account_class.php';
/* Authentication steps.. */
$account = new Account();
/* .. */

$addr = 'www.google.com';
$domain = mb_substr($addr, mb_strpos($addr, '.') + 1);
/* Check the user name. */
if ($account->getName() == 'debug')
{
  /* Debugging. */
  echo $domain;
}
_

get_defined_vars()

"echo" berfungsi dengan baik selama Anda tahu variabel mana yang perlu Anda periksa
Namun, terkadang Anda perlu memeriksa semua variabel dalam skrip Anda
Untuk melakukannya, Anda dapat menggunakan fungsi get_defined_vars() 

get_defined_vars() mengembalikan larik dengan semua variabel yang ditentukan hingga saat itu

Ini adalah bagaimana Anda menggunakannya

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_0

get_defined_vars() menampilkan kedua variabel yang ditentukan pengguna (seperti $addr, $dotPos, dll. ) dan variabel sistem, termasuk $_SERVER dan larik string permintaan ($_POST, $_GET…)

Ini menjadikan get_defined_vars() alat debug yang sangat andal

Ini adalah output dari contoh di atas (saya menghapus beberapa elemen demi keterbacaan)

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_1

Catatan

get_defined_vars() menampilkan semua variabel yang ditentukan dalam cakupan saat ini

Jika perlu men-debug fungsi atau metode kelas, Anda perlu memanggil get_defined_vars() dari dalam fungsi atau metode

Misalnya

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_2

Dalam hal ini, keluaran dari get_defined_vars() akan menyertakan variabel yang tersedia di dalam myFunction()

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_3

Fungsi debug. jejak mundur

Lacak balik fungsi memberi Anda riwayat panggilan fungsi

Sementara debugging variabel menunjukkan kepada Anda "foto" dari situasi saat ini (menunjukkan nilai saat ini dari semua variabel skrip), fungsi backtrace menunjukkan kepada Anda apa yang telah dilakukan skrip untuk sampai ke sana

Lebih khusus lagi, ini menunjukkan kepada Anda semua pemanggilan fungsi dari awal eksekusi skrip hingga saat backtrace ditampilkan

Anda bisa mendapatkan fungsi backtrace dengan menggunakan fungsi debug_backtrace() 

Mari kita lihat contohnya

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_4

Di sini, Anda memanggil f1() yang selanjutnya memanggil f2() yang selanjutnya memanggil f3()

Jika Anda meminta backtrace fungsi di dalam f3(), seperti pada contoh, Anda dapat melihat semua pemanggilan fungsi yang telah dilakukan untuk sampai ke sana

Ini adalah keluaran dari debug_backtrace()

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_5

Begini cara kerjanya

debug_backtrace() mengembalikan array. Setiap elemen larik ini adalah pemanggilan fungsi. Elemen pertama larik ini adalah pemanggilan fungsi terakhir (f3() dalam contoh), dan elemen terakhir larik jika fungsi pertama memanggil (f1() dalam contoh)

Setiap elemen array berisi

  • file dari tempat fungsi dipanggil (C. \xampp\htdocs\tes. php). Jika fungsi telah dipanggil dari file yang disertakan, elemen ini berisi jalur file yang disertakan;
  • baris tempat pemanggilan fungsi dilakukan (15 di elemen pertama);
  • nama fungsi (f3 di elemen pertama);
  • daftar argumen fungsi, sebagai larik. Misalnya, pemanggilan fungsi terakhir yang ditampilkan di elemen larik pertama memiliki angka 6 sebagai satu-satunya argumen

Anda juga dapat menggunakan fungsi debug_print_backtrace() sebagai alternatif dari debug_backtrace()

Ada dua perbedaan utama antara fungsi-fungsi ini

  • debug_print_backtrace() menampilkan pemanggilan fungsi sebagai baris teks, bukan elemen larik
  • debug_print_backtrace() menggemakan output secara otomatis, jadi Anda tidak perlu menggunakan print_r()

Ini adalah cara menggunakan debug_print_backtrace() di fungsi f3() 

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_6

Dan ini adalah outputnya

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_7

Lacak balik fungsi sangat berguna saat Anda ingin melihat apakah logika kode Anda berfungsi seperti yang diharapkan

Dengan melihat setiap langkah backtrace, Anda dapat melihat dengan tepat apa yang telah dilakukan skrip Anda untuk mencapai titik tersebut, termasuk nilai dari setiap argumen fungsi

Cara mencatat data debug Anda

Sejauh ini, Anda telah melihat cara menampilkan data debug dalam keluaran HTML skrip

Sekarang, mari kita lihat cara menyimpan data tersebut ke file log

Mencatat data debug Anda memiliki tiga keuntungan

  1. Anda dapat menyimpan hasil debug lebih lama, tanpa harus membuka browser
  2. Anda tidak perlu menerapkan teknik apa pun untuk menyembunyikan data proses debug dari pengguna
  3. Anda dapat mencatat aktivitas pengguna yang sebenarnya, bukan hanya pengujian Anda sendiri

Poin terakhir sangat penting. Dengan mencatat informasi debug saat skrip PHP dijalankan, Anda dapat melihat cara kerja skrip Anda dalam produksi dengan data pengguna sebenarnya. Tanpa masuk, Anda terbatas pada pengujian Anda sendiri

Ada beberapa cara berbeda untuk menulis file log dengan PHP. Di sini, saya akan menunjukkan kepada Anda yang paling mudah

Untuk menulis ke file log, pertama-tama Anda harus membukanya dengan fopen(). Misalnya, Anda ingin menyimpan data debug ke dalam c. \xampp\debug. catatan

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_8

Argumen pertama dari fopen() adalah jalur file log

Argumen kedua berisi bendera pembuka. Secara khusus, "a" memberi tahu fopen() untuk menambahkan data baru ke file (Anda tidak ingin menghapus file log setiap saat), dan "b" menghindari konversi baris baru otomatis

Catatan. pastikan bahwa file yang Anda pilih dapat ditulis oleh PHP

Sekarang, ide yang bagus adalah membuat fungsi untuk menambahkan baris baru ke file log

Misalnya, fungsi addLog() berikut secara otomatis menambahkan tanggal dan waktu saat ini ke setiap baris log dan menambahkan baris baru di bagian akhir

<?php
/* Enable error reporting for all types except for deprecated and strict. */
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
/* .. */
_9

Perhatikan bahwa fungsi fwrite() membutuhkan resource handle yang dikembalikan oleh fopen(). Inilah mengapa Anda meneruskan pegangan ini ke addLog() sebagai argumen pertama

Sekarang, daripada mencetak informasi debug ke layar, Anda meneruskannya ke addLog() sebagai argumen kedua. Teks debug akan ditambahkan di baris baru di file log

Mari kita lihat beberapa contoh

Ini adalah cara menambahkan nilai variabel tunggal (ingat untuk membuka file log dengan fopen() sebelum menambahkan log)

log_errors = On
0

Saat skrip dijalankan, baris baru ditambahkan ke file log debug

log_errors = On
1

Perhatikan bahwa Anda tidak perlu membatasi logging seperti yang Anda lakukan dengan keluaran HTML, karena proses logging sama sekali tidak terlihat oleh pengguna biasa

Untuk mencatat keluaran dari get_defined_vars(), Anda dapat menyetel argumen print_r() kedua ke TRUE untuk menyimpan keluarannya dalam variabel. Kemudian, Anda meneruskan variabel tersebut ke addLog()

log_errors = On
2

Anda juga dapat mengulangi prosedur yang persis sama untuk mencatat keluaran dari debug_backtrace() 

Penguncian file log

Ketika lebih banyak skrip PHP menulis ke file yang sama, Anda perlu memastikan bahwa penulisan tidak dilakukan pada waktu yang bersamaan

Hal yang sama harus dilakukan untuk beberapa instance dari skrip PHP yang sama (yaitu, jika lebih banyak pengguna yang menjalankan skrip yang sama)

Yang perlu Anda lakukan adalah menyetel penguncian file setiap kali Anda menulis ke file log

Untuk melakukannya, edit fungsi addLog() Anda sehingga menggunakan flock() untuk memperoleh kunci eksklusif pada file

log_errors = On
_3

Itu dia

Ada cara lain dan lebih efisien untuk melakukan penguncian file, tetapi solusi di atas berfungsi dengan baik untuk tujuan kita

Pencatatan basis data

Pencatatan database adalah tentang menyimpan log debug Anda ke database, bukan file biasa. Ini adalah alternatif untuk pencatatan file

Pencatatan basis data memiliki beberapa keunggulan dibandingkan pencatatan file

  • Anda dapat melakukan pencarian dan pemfilteran dengan lebih mudah
  • Anda dapat mengekspor log pada file XLS atau CSV sesuai kebutuhan
  • Anda tidak perlu membuka/menutup file dan tidak perlu menggunakan penguncian (database sudah melakukannya untuk Anda)

Di sisi lain, pencatatan basis data sedikit lebih rumit untuk disiapkan, karena Anda perlu membuat struktur basis data

Selain itu, logging intensif (banyak log per detik) dapat memengaruhi performa database Anda

Yang mengatakan, mari kita lihat bagaimana hal itu dilakukan

Struktur basis data

Pertama, mari buat tabel tempat menyimpan log

Salah satu keuntungan dari pencatatan basis data adalah Anda dapat membuat kolom untuk setiap informasi. Sebagai contoh. datetime, nama skrip, dan teks log itu sendiri

Ini membuat operasi pencarian dan pemfilteran jauh lebih mudah

Kode SQL berikut membuat tabel dengan kolom stempel waktu , kolom skrip untuk nama skrip sumber, dan kolom log untuk pesan log

log_errors = On
_4

Sekarang Anda memerlukan fungsi untuk menambahkan baris log baru ke tabel

Fungsi ini, sebut saja addDBLog(), tidak menulis ke file. Sebagai gantinya, ini mengeksekusi kueri SQL untuk memasukkan baris baru ke dalam tabel di atas

Dengan pencatatan log file, addLog() mengambil penangan file sebagai argumen pertama. Saat menggunakan database, Anda harus melewati sumber koneksi database sebagai gantinya

Sumber daya ini bisa berupa objek MySQLi atau objek PDO

Misalnya, katakanlah Anda menggunakan PDO. Kode berikut (diambil dari tutorial MySQL dengan PHP saya) menghubungkan ke server MySQL lokal menggunakan PDO dan menyimpan sumber daya koneksi PDO ke dalam variabel $pdo

log_errors = On
5

Dan inilah fungsi addDBLog() 

log_errors = On
6

Anda dapat menggunakan addDBLog() sama seperti Anda menggunakan addLog()

Satu-satunya perbedaan adalah

  • Anda harus terhubung ke database terlebih dahulu
  • Anda harus melewati sumber koneksi PDO alih-alih pegangan file
  • Anda harus memberikan nama skrip
  • Log akan berakhir di database

Untuk meneruskan nama skrip, Anda dapat menggunakan konstanta ajaib __FILE__

Misalnya

log_errors = On
7

Anda dapat mengedit addDBLog() agar menggunakan MySQLi, bukan PDO. Anda hanya perlu menggunakan sintaks MySQLi dan meneruskan sumber daya koneksi MySQLi alih-alih yang PDO

Jika mau, Anda juga dapat menggabungkan logging file dengan logging database, menggunakan addLog() dan addDBLog() satu demi satu

Mengirim data debug ke alamat email

Terkadang, Anda ingin menerima informasi debug hanya saat kondisi tertentu muncul. Misalnya, saat upaya autentikasi gagal, atau saat terjadi kesalahan kueri database

Dalam kasus tersebut, Anda mungkin ingin segera mendapatkan data debug. Untuk melakukan itu, Anda dapat membuat skrip PHP mengirimkan data kepada Anda melalui email

Penting untuk memastikan untuk tidak mengirim terlalu banyak email, jika tidak, Anda dapat memenuhi kotak masuk Anda dengan pesan debug

Untuk mengirim email dengan PHP, saya sarankan Anda menggunakan library PHPMailer

Anda dapat mengikuti tutorial PHPMailer saya untuk menginstalnya dan menjalankannya

Setelah siap, Anda dapat membuat fungsi yang mengirim pesan ke alamat email tertentu. Anda akan menggunakan fungsi ini untuk mengirim data debug sebagai pesan email

Ini adalah contoh sederhana

log_errors = On
_8

Untuk semua detail tentang cara menggunakan PHPMailer, Anda dapat merujuk ke tutorial saya

Sekarang, yang perlu Anda lakukan hanyalah memanggil fungsi di atas dengan informasi debug yang ingin Anda kirim

Misalnya, cuplikan kode berikut mengirimkan informasi debug yang berguna jika eksekusi kueri PDO gagal

log_errors = On
_9

(Untuk detail selengkapnya tentang PDO dan MySQL, Anda dapat merujuk ke tutorial PHP dengan MySQL saya)

Kesimpulan

Dalam tutorial ini Anda mempelajari berbagai cara untuk men-debug kode PHP Anda, tanpa benar-benar menggunakan debugger apa pun

Anda belajar bagaimana menggunakan pelaporan kesalahan, fitur PHP yang kuat untuk menangkap kesalahan kode dan kejadian tak terduga, bahkan pada skrip produksi

Anda juga mempelajari cara men-debug variabel dengan menggunakan get_defined_vars() dan cara men-debug aliran kode dengan fungsi backtrace

Terakhir, Anda melihat cara mencatat informasi debug ke file atau ke database, dan cara mengirimkannya sebagai pesan email

Sekarang giliran Anda. tinggalkan pertanyaan dan komentar Anda di bawah ini

Dan jika Anda menyukai posting ini, silakan bagikan dengan teman-teman Anda 😉

Pos terkait

Bagaimana Anda men-debug fungsi di php?

Cara membuat Vite Hot Module Replacement berfungsi di Windows

Seperti yang telah diketahui oleh banyak anggota komunitas kami, baru-baru ini kami memulai renovasi UI dasbor Inspektur dengan desain baru yang segar dan kumpulan teknologi modern. Pada artikel ini saya akan menjelaskan mengapa kami memutuskan untuk meninggalkan Webpack dan menggunakan Vite sebagai alat pembuatan aset dan Penggantian Modul Panas. saya akan menunjukkan kepada Anda

22 Januari 2023

Bagaimana Anda men-debug fungsi di php?

Pemantauan lalu lintas Http untuk kerangka Slim

Artikel ini mengikuti rilis versi pertama pustaka pemantauan untuk kerangka kerja Slim. Berkat paket ini, Anda dapat memantau sepenuhnya lalu lintas HTTP terhadap aplikasi Anda yang berbasis Slim. Dibutuhkan kurang dari satu menit untuk memulai. Pertama izinkan saya memberi Anda sedikit konteks. Memperkenalkan kerangka Slim

17 Januari 2023

Bagaimana Anda men-debug fungsi di php?

Cara menggunakan wildcard di ExpressJs dan Fastify monitoring library

Dengan ekonomi perangkat lunak yang berkembang pesat, permintaan akan aplikasi baru dan otomatisasi yang ditentukan perangkat lunak akan meningkat di tahun-tahun mendatang. Perusahaan di industri apa pun membuat perangkat lunak dalam bentuk alat bisnis internal, alat produktivitas, integrasi, otomasi, dan banyak lagi. Akibatnya, ada kebutuhan untuk alat yang memudahkan

Bagaimana Anda men-debug suatu fungsi?

Untuk men-debug fungsi yang didefinisikan di dalam fungsi lain, satu langkah hingga akhir definisinya, lalu panggil debug pada namanya. If you want to debug a function not starting at the very beginning, use trace(..., at = *) or setBreakpoint .

Apakah mungkin untuk men-debug PHP?

A. Anda dapat dengan mudah men-debug PHP di Chrome menggunakan ekstensi sederhana bernama PHP Console . Instal saja alat debug PHP ini dari toko web Chrome dan mulai mencatat kesalahan, peringatan, pengecualian, dan vars dump di browser Chrome Anda.

Apa alat debugging untuk PHP?

6 Alat Debug PHP Teratas Untuk Pengembang Cerdas .
Krumo
PHP DebugBar
Pinba
Xdebug
Ups

Bagaimana cara men-debug aplikasi web PHP?

Untuk men-debug Halaman Web PHP. .
Masukkan nama untuk konfigurasi baru
Pilih Server Debugger yang akan digunakan. .
Pilih server Anda dari daftar Server PHP. .
Untuk memeriksa apakah koneksi server Anda dikonfigurasi dengan benar, dan apakah PDT dapat berkomunikasi dengan debugger server Anda, klik tombol 'Periksa Koneksi Server Debug'