Referensi Kesalahan PHP Show
ContohMenghasilkan backtrace PHP fungsi a($txt) { Definisi dan PenggunaanFungsi 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
Sintaksisdebug_backtrace(opsi, batas); Nilai ParameterParameterDeskripsiopsiOpsional. Menentukan bitmask untuk opsi berikutDEBUG_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 TeknisNilai Pengembalian. Array array asosiatif Versi PHP. 4. 3+PHP Changelog. PHP5. 4. Batas parameter opsional telah ditambahkanPHP5. 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
Jadi, jika Anda ingin men-debug kode PHP tanpa menginstal debugger, ini adalah panduan untuk Anda Mari kita mulai Tentang debug PHPKetika 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
Mari kita mulai dengan yang pertama Mengaktifkan pelaporan kesalahan PHPMesin 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 Berikut adalah beberapa contoh pelaporan kesalahan
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 kesalahanPertama, 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
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 _Langkah 2. matikan keluaran kesalahan HTMLArahan 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
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 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
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 sendiriMeskipun 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
Opsi #1 buat salinan skripIni 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 _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 AndaJika 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
Opsi #3. menggunakan pengguna tertentuJika 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 _Ini berfungsi untuk sistem otentikasi apa pun. Anda hanya perlu menggunakan sintaks yang tepat untuk sistem yang Anda gunakan Opsi #4. menggunakan parameter permintaanJika 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”
Perhatikan bahwa setiap pengunjung halaman yang mengetahui parameter permintaan dapat mengaktifkan pesan kesalahan HTML Debug variabelPelaporan 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 _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 _get_defined_vars()"echo" berfungsi dengan baik selama Anda tahu variabel mana yang perlu Anda periksa get_defined_vars() mengembalikan larik dengan semua variabel yang ditentukan hingga saat itu Ini adalah bagaimana Anda menggunakannya _0get_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) _1Catatan 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 _2Dalam hal ini, keluaran dari get_defined_vars() akan menyertakan variabel yang tersedia di dalam myFunction() _3Fungsi debug. jejak mundurLacak 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 _4Di 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() _5Begini 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
Anda juga dapat menggunakan fungsi debug_print_backtrace() sebagai alternatif dari debug_backtrace() Ada dua perbedaan utama antara fungsi-fungsi ini
Ini adalah cara menggunakan debug_print_backtrace() di fungsi f3() _6Dan ini adalah outputnya _7Lacak 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 AndaSejauh 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
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 _8Argumen 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 _9Perhatikan 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) 0Saat skrip dijalankan, baris baru ditambahkan ke file log debug 1Perhatikan 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() 2Anda juga dapat mengulangi prosedur yang persis sama untuk mencatat keluaran dari debug_backtrace() Penguncian file logKetika 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 _3Itu dia Ada cara lain dan lebih efisien untuk melakukan penguncian file, tetapi solusi di atas berfungsi dengan baik untuk tujuan kita Pencatatan basis dataPencatatan 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
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 dataPertama, 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 _4Sekarang 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 5Dan inilah fungsi addDBLog() 6Anda dapat menggunakan addDBLog() sama seperti Anda menggunakan addLog() Satu-satunya perbedaan adalah
Untuk meneruskan nama skrip, Anda dapat menggunakan konstanta ajaib __FILE__ Misalnya 7Anda 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 emailTerkadang, 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 _8Untuk 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 _9(Untuk detail selengkapnya tentang PDO dan MySQL, Anda dapat merujuk ke tutorial PHP dengan MySQL saya) KesimpulanDalam 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 terkaitCara membuat Vite Hot Module Replacement berfungsi di WindowsSeperti 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 Pemantauan lalu lintas Http untuk kerangka SlimArtikel 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 Cara menggunakan wildcard di ExpressJs dan Fastify monitoring libraryDengan 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' |