Cukup sering saya akan mencoba dan menjalankan skrip PHP dan hanya mendapatkan layar kosong kembali. Tidak ada pesan kesalahan; hanya layar kosong. Penyebabnya mungkin karena kesalahan sintaksis yang sederhana (braket yang salah, tanda titik koma yang hilang), atau panggilan fungsi yang gagal, atau sesuatu yang lain sama sekali.
Sangat sulit untuk mencari tahu apa yang salah. Saya akhirnya berkomentar kode, memasukkan pernyataan "gema" di mana-mana, dll. Mencoba untuk mempersempit masalah. Tapi pasti ada cara yang lebih baik, bukan?
Apakah ada cara untuk mendapatkan PHP untuk menghasilkan pesan kesalahan yang bermanfaat, seperti Java?
php
debugging
error-handling
Candidasa
sumber
sumber
T_PAAMAYIM_NEKUDOTAYIM
. Atau mungkin "harus merupakan instance dari integer, integer diberikan" .Jawaban:
Untuk kesalahan sintaks, Anda harus mengaktifkan tampilan kesalahan di php.ini. Secara default ini dimatikan karena Anda tidak ingin "pelanggan" melihat pesan kesalahan. Periksa halaman ini dalam dokumentasi PHP untuk informasi tentang 2 arahan:
error_reporting
dandisplay_errors
.display_errors
mungkin yang ingin Anda ubah. Jika Anda tidak dapat mengubah php.ini, Anda juga dapat menambahkan baris berikut ke file .htaccess:Anda mungkin ingin mempertimbangkan untuk menggunakan nilai E_ALL (seperti yang disebutkan oleh Gumbo) untuk versi PHP Anda untuk
error_reporting
mendapatkan semua kesalahan. Info lebih lanjut3 item lainnya: (1) Anda dapat memeriksa file log kesalahan karena akan memiliki semua kesalahan (kecuali logging telah dinonaktifkan). (2) Menambahkan 2 baris berikut akan membantu Anda men-debug kesalahan yang bukan kesalahan sintaksis:
(3) Pilihan lain adalah menggunakan editor yang memeriksa kesalahan saat Anda mengetik, seperti PhpEd . PhpEd juga dilengkapi dengan debugger yang dapat memberikan informasi lebih rinci. (The debugger PhpEd sangat mirip dengan xdebug dan terintegrasi langsung ke editor sehingga Anda menggunakan 1 program untuk melakukan semuanya.)
Tautan Cartman juga sangat bagus: http://www.ibm.com/developerworks/library/os-debug/
sumber
E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE
. Lihat docs.php.net/manual/en/errorfunc.constants.phpBerikut ini memungkinkan semua kesalahan:
Lihat juga tautan berikut
sumber
ini_set
adalah string.Kode berikut harus menampilkan semua kesalahan:
Satu-satunya cara untuk menghasilkan halaman kosong dengan kode ini adalah ketika Anda memiliki kesalahan dalam penangan shutdown. Saya menyalin dan menempelkan ini dari cms saya sendiri tanpa mengujinya, tetapi saya yakin itu berhasil.
sumber
ShutdownHandler
atas. Pada dasarnya ini adalah hack sementara menggantikan penanganan kesalahan yang tepat.E_NOTICE
kesalahan pada fungsi ini?Kesalahan dan peringatan biasanya muncul di
....\logs\php_error.log
atau....\logs\apache_error.log
tergantung pada pengaturan php.ini Anda.Juga kesalahan yang bermanfaat sering diarahkan ke browser, tetapi karena mereka tidak valid html mereka tidak ditampilkan.
Jadi
"tail -f
"file log Anda dan ketika Anda mendapatkan layar kosong gunakan IEs" view "->" source "pilihan menu untuk melihat output mentah.sumber
php_flag display_errors 1
di dalamnya.Anda dapat memasukkan baris berikut dalam file yang ingin Anda debug:
Ini mengesampingkan pengaturan default di php.ini, yang hanya membuat PHP melaporkan kesalahan ke log.
sumber
Konfigurasi PHP
2 entri dalam php.ini menentukan output kesalahan:
display_errors
error_reporting
Dalam produksi ,
display_errors
biasanya diatur keOff
(Yang merupakan hal yang baik, karena tampilan kesalahan di lokasi produksi umumnya tidak diinginkan!).Namun, dalam pengembangan , itu harus diatur ke
On
, sehingga kesalahan ditampilkan. Periksa !error_reporting
(pada PHP 5.3) diatur secara default keE_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(artinya, semuanya ditampilkan kecuali untuk pemberitahuan, standar ketat dan pemberitahuan penghentian). Jika ragu, aturE_ALL
untuk menampilkan semua kesalahan. Periksa !Whoa whoa! Tanpa cek! Saya tidak dapat mengubah php.ini saya!
Itu memalukan. Biasanya host bersama tidak memungkinkan perubahan file php.ini mereka, dan karenanya, opsi itu sayangnya tidak tersedia. Tapi jangan takut! Kami punya pilihan lain !
Konfigurasi runtime
Dalam skrip yang diinginkan, kita dapat mengubah entri php.ini di runtime! Artinya, itu akan berjalan ketika skrip berjalan! Manis!
Kedua baris ini akan melakukan efek yang sama dengan mengubah entri php.ini seperti di atas! Luar biasa!
Saya masih mendapatkan kesalahan halaman / 500 kosong!
Itu berarti bahwa skripnya bahkan belum berjalan! Itu biasanya terjadi ketika Anda memiliki kesalahan sintaks!
Dengan kesalahan sintaks, skrip bahkan tidak bisa runtime. Gagal pada waktu kompilasi , artinya akan menggunakan nilai-nilai di php.ini, yang jika Anda tidak berubah, mungkin tidak mengizinkan tampilan kesalahan.
Log kesalahan
Selain itu, PHP secara default kesalahan log. Di hosting bersama, mungkin dalam folder khusus atau folder yang sama dengan skrip yang menyinggung.
Jika Anda memiliki akses ke php.ini, Anda dapat menemukannya di bawah
error_log
entri.sumber
Ada ekstensi yang sangat berguna yang disebut " xdebug " yang akan membuat laporan Anda jauh lebih baik.
sumber
Saya selalu menggunakan sintaks ini di bagian paling atas dari script php.
sumber
Untuk pemecahan masalah yang cepat dan langsung, biasanya saya sarankan di SO:
untuk diletakkan di awal skrip yang sedang dalam pemecahan masalah. Ini tidak sempurna, varian yang sempurna adalah Anda juga mengaktifkannya di
php.ini
dan bahwa Anda mencatat kesalahan dalam PHP untuk menangkap kesalahan sintaks dan startup.Pengaturan yang diuraikan di sini menampilkan semua kesalahan, pemberitahuan, dan peringatan, termasuk yang ketat, apa pun versi PHPnya.
Hal-hal selanjutnya yang perlu dipertimbangkan:
Lihat juga:
error_reporting()
Documentsdisplay_errors
Documentssumber
Dimungkinkan untuk mendaftarkan kait untuk membuat kesalahan atau peringatan terakhir terlihat.
menambahkan kode ini ke awal Anda index.php akan membantu Anda men-debug masalah.
sumber
Ini adalah masalah konfigurasi yang dimuat vs. runtime
Sangat penting untuk mengenali bahwa kesalahan sintaksis atau kesalahan parse terjadi selama langkah kompilasi atau parsing , yang berarti bahwa PHP akan menjamin sebelum bahkan memiliki kesempatan untuk mengeksekusi kode Anda. Jadi jika Anda memodifikasi
display_errors
konfigurasi PHP selama runtime, (ini termasuk apa pun dari menggunakanini_set
dalam kode Anda untuk menggunakan .htaccess, yang merupakan file konfigurasi runtime) maka hanya pengaturan konfigurasi yang dimuat standar sedang bermain.Cara selalu menghindari WSOD dalam pembangunan
Untuk menghindari WSOD Anda ingin memastikan bahwa file konfigurasi yang dimuat telah
display_errors
diaktifkan danerror_reporting
diatur ke-1
( ini adalah E_ALL yang setara karena memastikan semua bit dihidupkan terlepas dari versi PHP yang Anda jalankan ). Jangan hardcode nilai konstan E_ALL, karena nilai itu dapat berubah antara versi PHP yang berbeda.Konfigurasi yang dimuat adalah
php.ini
file Anda yang dimuat atau file Andaapache.conf
atauhttpd.conf
atau virtualhost. File-file itu hanya dibaca sekali selama tahap startup (ketika Anda pertama kali memulai apache httpd atau php-fpm, misalnya) dan hanya ditimpa oleh perubahan konfigurasi runtime. Memastikan bahwadisplay_errors = 1
danerror_reporting = -1
dalam file konfigurasi yang dimuat Anda memastikan bahwa Anda tidak akan pernah melihat WSOD terlepas dari kesalahan sintaks atau parse yang terjadi sebelum perubahan runtime sukaini_set('display_errors', 1);
atauerror_reporting(E_ALL);
dapat terjadi.Cara menemukan file konfigurasi (php.ini) Anda dimuat
Untuk mencari file konfigurasi yang dimuat Anda, cukup buat file PHP baru hanya dengan kode berikut ...
Lalu arahkan browser Anda di sana dan lihat File Konfigurasi yang Dimuat dan file .ini tambahan yang diuraikan , yang biasanya di bagian atas Anda
phpinfo()
dan akan menyertakan jalur absolut ke semua file konfigurasi yang dimuat.Jika Anda melihat
(none)
alih-alih file, itu berarti Anda tidak memiliki php.ini di Path File Konfigurasi (php.ini) . Jadi Anda dapat mengunduh stok php.ini yang dibundel dengan PHP dari sini dan menyalinnya ke jalur file konfigurasi Anda sebagai php.ini lalu pastikan pengguna php Anda memiliki izin yang memadai untuk membaca dari file itu. Anda harus me-restart httpd atau php-fpm untuk memuatnya. Ingat, ini adalah file php.ini pengembangan yang dibundel dengan sumber PHP. Jadi tolong jangan menggunakannya dalam produksi!Hanya saja, jangan lakukan ini dalam produksi
Ini benar-benar adalah cara terbaik untuk menghindari WSOD dalam pembangunan. Siapa pun yang menyarankan Anda meletakkan
ini_set('display_errors', 1);
atauerror_reporting(E_ALL);
di bagian atas skrip PHP atau menggunakan. telahdisplay_errors
dimatikan.Banyak orang (dan instalasi stok PHP) akan menggunakan file production-in yang telah
display_errors
dimatikan secara default, yang biasanya menghasilkan frustrasi yang sama seperti yang Anda alami di sini. Karena PHP sudah mematikannya ketika mulai, kemudian menemui kesalahan sintaks atau parse, dan menebus dengan tidak ada output. Anda berharap bahwa Andaini_set('display_errors',1);
di bagian atas skrip PHP Anda harus menghindari itu, tetapi tidak masalah jika PHP tidak dapat menguraikan kode Anda karena tidak akan pernah mencapai runtime.sumber
Jika Anda sangat keren, Anda dapat mencoba:
Ini hanya akan menampilkan kesalahan ketika Anda menjalankan secara lokal. Ini juga memberi Anda variabel test_server untuk digunakan di tempat lain yang sesuai.
Kesalahan apa pun yang terjadi sebelum skrip berjalan tidak akan ditangkap, tetapi untuk 99% kesalahan yang saya buat, itu bukan masalah.
sumber
$_SERVER['REMOTE_HOST']
untuk memeriksa apakah kliennya, yah, Anda.Di bagian atas halaman pilih parameter
sumber
Untuk bertahan dan membuatnya confortale, Anda dapat mengedit file php.ini Anda. Biasanya disimpan di
/etc/php.ini
atau/etc/php/php.ini
, tetapi lebih banyak lokalphp.ini
mungkin menimpanya, tergantung pada pedoman pengaturan penyedia hosting Anda. Periksaphpinfo()
fileLoaded Configuration File
di bagian atas, untuk memastikan file mana yang terakhir dimuat.Cari display_errors dalam file itu. Seharusnya hanya ada 3 contoh, 2 diantaranya dikomentari.
Ubah baris yang tidak dicommentasikan ke:
sumber
Entah apakah itu akan membantu, tapi di sini ada sepotong file konfigurasi standar saya untuk proyek php. Saya cenderung tidak terlalu bergantung pada konfigurasi apache bahkan pada server saya sendiri.
Saya tidak pernah memiliki masalah kesalahan yang menghilang, jadi mungkin sesuatu di sini akan memberi Anda ide.
Diedit untuk menampilkan APPLICATON_LIVE
sumber
Selain itu, Anda bisa mendapatkan informasi lebih rinci dengan xdebug .
sumber
Saya merekomendasikan Nette Tracy untuk visualisasi kesalahan dan pengecualian yang lebih baik di PHP:
sumber
sumber
Dan nyalakan kesalahan tampilan di php.ini
sumber
Anda dapat mendaftarkan penangan kesalahan Anda sendiri di PHP. Misalnya, membuang semua kesalahan ke file dapat membantu Anda dalam kasus-kasus yang tidak jelas ini. Perhatikan bahwa fungsi Anda akan dipanggil, apa pun error_reporting Anda saat ini diatur. Contoh yang sangat mendasar:
sumber
Dua baris kunci yang Anda butuhkan untuk mendapatkan kesalahan yang berguna dari PHP adalah:
Seperti yang ditunjukkan oleh kontributor lain, ini dinonaktifkan secara default karena alasan keamanan. Sebagai tip yang berguna - ketika Anda mengatur situs Anda, sangat mudah untuk melakukan pergantian untuk lingkungan Anda yang berbeda sehingga kesalahan ini AKTIF secara default di lingkungan lokal dan pengembangan Anda. Ini dapat dicapai dengan kode berikut (idealnya di file index.php atau config Anda jadi ini aktif dari awal):
sumber
FirePHP dapat bermanfaat juga.
sumber
buka php.ini Anda, pastikan sudah disetel ke:
restart server Anda.
sumber
Anda mungkin juga ingin mencoba PHPStorm sebagai editor kode Anda. Ini akan menemukan banyak kesalahan PHP dan sintaks lainnya saat Anda mengetik di editor.
sumber
jika Anda adalah pengguna ubuntu maka goto terminal Anda dan jalankan perintah ini
di mana ia akan menampilkan 50 kesalahan terbaru. Ada file kesalahan
error.log
untuk apache2 yang mencatat semua kesalahan.sumber
Untuk mengaktifkan pelaporan kesalahan penuh, tambahkan ini ke skrip Anda:
Ini bahkan menyebabkan peringatan minimal muncul. Dan, untuk berjaga-jaga:
Akan memaksa tampilan kesalahan. Ini harus dimatikan di server produksi, tetapi tidak ketika Anda sedang mengembangkan.
sumber
"KESALAHAN" adalah hal yang paling berguna bagi pengembang untuk mengetahui kesalahan mereka dan menyelesaikannya untuk membuat sistem bekerja dengan sempurna.
PHP menyediakan beberapa cara yang lebih baik untuk mengetahui mengapa pengembang dan di mana potongan kode mereka mendapatkan kesalahan, sehingga dengan mengetahui kesalahan-kesalahan tersebut, pengembang dapat membuat kode mereka lebih baik dalam banyak cara.
Cara terbaik untuk menulis dua baris berikut di bagian atas skrip untuk mendapatkan semua pesan kesalahan:
Cara lain untuk menggunakan alat debugger seperti xdebug di IDE Anda.
sumber
Anda dapat mengaktifkan pelaporan kesalahan penuh (termasuk pemberitahuan dan pesan ketat). Beberapa orang menganggap ini terlalu bertele-tele, tetapi patut dicoba. Diatur
error_reporting
keE_ALL | E_STRICT
dalam php.ini Anda.E_STRICT
akan memberi tahu Anda tentang fungsi yang sudah tidak digunakan lagi dan memberi Anda rekomendasi tentang metode terbaik untuk melakukan tugas tertentu.Jika Anda tidak ingin pemberitahuan, tetapi Anda menemukan jenis pesan lain membantu, cobalah mengecualikan pemberitahuan:
Pastikan
display_errors
juga diaktifkan di php.ini. Jika versi PHP Anda lebih lama dari 5.2.4, atur keOn
:Jika versi Anda 5.2.4 atau lebih baru, gunakan:
sumber
Selain dari error_reporting dan pengaturan display_errors ini, Anda bisa mendapatkan kesalahan SYNTAX dari file log server web Anda. Ketika saya sedang mengembangkan PHP saya memuat log server web sistem pengembangan saya ke editor saya. Setiap kali saya menguji halaman dan mendapatkan layar kosong, file log menjadi basi dan editor saya bertanya apakah saya ingin memuatnya kembali. Ketika saya melakukannya, saya melompat ke bawah dan ada kesalahan sintaksis. Sebagai contoh:
sumber
Bagi mereka yang menggunakan nginx dan memiliki layar putih bahkan untuk file dengan
<?php echo 123;
. Dalam kasus saya, saya tidak memiliki opsi yang diperlukan untuk PHP di file konfigurasi nginx:Opsi ini tidak ada dalam file fastcgi_params, jadi PHP tidak berfungsi dan tidak ada kesalahan dalam log.
sumber