Ralat tutorial asas pembangunan PHP
1 Pengenalan masalah
Semasa kami menulis kod sebelum ini, kami sering melihat: nama fungsi ditulis salah, dan koma bertitik terlupa . Pelbagai ralat akan dilaporkan jika fungsi ditakrifkan semula.
Semasa pembangunan, memaparkan ralat sangat bermanfaat untuk pembangunan kami. Kerana memaparkan ralat boleh membantu kami mencari ralat dan menyelesaikan masalah dengan cepat.
Dalam persekitaran pengeluaran (iaitu rangkaian awam), tapak web, tapak mikro, tapak web mudah alih, antara muka mudah alih, dsb. boleh diakses oleh orang lain.
Jika ralat dipaparkan, ia mudah didedahkan:
Laluan fail dan spesifikasi storan fail pelayan
Sesetengah orang yang saya suka menggunakan nama peribadi dan boleh membuat kesimpulan terbalik kata laluan melalui kejuruteraan sosial
Kadang-kadang alamat pelayan pangkalan data mysql terdedah
... ...dan seterusnya
Maklumat di atas amat mudah digunakan oleh orang yang mempunyai motif tersembunyi di Internet.
Sebagai contoh, dalam kod berikut, kami mendedahkan sepenuhnya laluan storan fail sisi pelayan kami, maklumat rangka kerja, dsb. tanpa menambah titik bertitik. Seperti berikut:
<?php $fp = fopen('abc.txt','a+') fwrite($fp,'abc'); fclose($fp); ?>
melaporkan ralat:
Terjemahan bahasa Cina bagi mesej ralat ialah:
Ralat hurai: ralat sintaks. Kemalangan berlaku berhampiran baris 5 fwrite dalam fail /home/vagrant/Code/Laravel/public/index.php.
Dalam bab ini, kami cuba menyelesaikan masalah ini
2 .ini fail konfigurasi. Kita boleh mengawal status paparan ralat php. Terdapat item konfigurasi khas dalam php.ini:
display_errorsPilihan ini menetapkan sama ada untuk mengeluarkan maklumat ralat ke halaman web atau ke pengguna Sembunyikan tanpa ditunjukkan. Status nilai ini dihidupkan atau dimatikan, dan nilai itu juga boleh ditetapkan kepada 1 atau 0.
Jika nilai display_error ditetapkan kepada 0 atau off, ralat tidak akan dipaparkan pada halaman Jika ia ditetapkan kepada 1 atau on, mesej ralat akan dipaparkan.
Soalan: Apakah yang perlu saya lakukan jika saya tidak mempunyai kebenaran status untuk mengubah suai pelayan php.ini?
Anda boleh menggunakan ini_set.
<?php ini_set('display_errors' , 0 ); ?>
Kod di atas juga bersamaan dengan mengubah suai nilai display_errors dalam php.ini. Walau bagaimanapun, ia hanya berkuat kuasa dalam kod php semasa.
Soalan: Apakah yang perlu saya lakukan jika saya ingin mendapatkan status item konfigurasi php.ini?
Anda boleh menggunakan ini_get (item parameter) untuk mendapatkan nilai parameter.
Contoh:
<?php echo '服務(wù)器中display_errors的狀態(tài)為' . ini_get('display_errors'); ?>
Nota: Selepas mengubah suai fail php.ini, anda perlu memulakan semula pelayan.
3 Tahap pelaporan ralat1. Jenis ralat
php semua Paparan ralat yang paling biasa:
ralat adalah yang paling serius dan mesti diselesaikan. Jika tidak, program tidak boleh terus melaksanakan
amaran juga sangat penting. Tong juga mesti diselesaikan. Jika ia jelas dan disengajakan, tidak perlu berurusan dengannya.
perasan Anda boleh mengabaikannya. Tetapi dalam sesetengah syarikat, piawaian projek sangat tinggi. Ia juga mesti diselesaikan dalam projek dengan keperluan standard yang tinggi. Kerana notis akan menjejaskan kecekapan pelaksanaan PHP. Biasanya berlaku apabila fungsi tidak ditentukan dsb.
Kesilapan huraian merujuk kepada kesilapan tatabahasa dan kesilapan taip, yang mesti diselesaikan
Mewakili semua kesilapan semua jenis
Item ralat lain yang perlu difahami berdasarkan pengembangan di atas:
Dalam proses pembelajaran, fahami sahaja jenis-jenis di atas. Kerana anda pada asasnya tidak akan menemuinya Jika anda menemuinya, anda boleh menyemak buku ini atau manual untuk mengetahui.
2.error_reporting Jenis ralat laporan
error_reporting merujuk kepada pelaporan ralat. Terdapat juga parameter sedemikian dalam php.ini. parameter ini. Menentukan jenis ralat yang direkodkan, laporan dan paparan enjin PHP.
1). Tetapkan parameter error_reporting dalam php.ini.
Jika parameter error_reporting ditetapkan kepada 0. Ralat dalam keseluruhan enjin PHP tidak akan dipaparkan, dikeluarkan atau direkodkan. Ia tidak akan direkodkan dalam pembalakan yang akan dibincangkan dalam bab seterusnya.
Jika kami ingin memaparkan semua ralat, kami boleh menulis:
error_reporting = E_ALL
Jika kami mahu memaparkan semua ralat tetapi mengecualikan gesaan, kami boleh menulis parameter ini sebagai :
error_reporting = E_ALL & ~ E_NOTICE
Menunjukkan semua ralat tetapi tidak termasuk pembayang, keserasian dan keserasian masa hadapan. Ia boleh ditulis sebagai:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
2). ini dan ingin Apakah yang perlu saya lakukan untuk mengawal error_reporting?
Pada permulaan fail xxxx.php yang dijalankan, kita boleh menggunakan fungsi error_reporting() untuk mencapai matlamat.
Kod demo adalah seperti berikut:
<?php //關(guān)閉了所有的錯誤顯示 error_reporting(0); //顯示所有錯誤 //error_reporting(E_ALL); //顯示所有錯誤,但不顯示提示 //error_reporting(E_ALL & ~ E_NOTICE); ?>
Anda boleh mencuba kod di atas dan cuba menulis kod yang salah dengan sengaja. Sama ada ralat yang ditentukan akan dipaparkan dalam fail semasa.
[Kembangkan dan fahami titik pengetahuan]: Simbol @ ialah satu baris yang telah kita pelajari sebelum ini yang tidak memaparkan ralat. Tolong jangan gunakan simbol @ atau gunakannya dengan berhati-hati.
Mari baca fail yang tidak wujud dan tunjukkan proses pelaksanaan dengan kod PHP ini:
<?php //讀取一個不存在的adsaf.txt文件,用@符抑制錯誤 @$fp = fopen('adsaf.txt','r'); ?> @符效率較低,它在php內(nèi)核中的實(shí)現(xiàn)過程是: <?php //關(guān)閉錯誤 error_reporting(0); //讀取一個不存在的文件,顯示錯誤 //顯示錯誤 error_reporting(E_ALL & ~ E_NOTICE); ?>
Ralat rakaman log
Di sesetengah syarikat, terdapat sistem pengumpulan log khas. Sistem pengumpulan log secara senyap akan membantu anda mengumpul ralat, amaran dan gesaan di sebalik tabir.
Terdapat juga beberapa syarikat yang tidak mempunyai sistem pengumpulan log khusus dan mengumpul log yang sedang berjalan dari pelayan melalui fail.
Antaranya: Ralat dan amaran PHP mesti dikumpul.
Kemudian persoalan muncul - jika tahap pelaporan ralat ditetapkan dengan baik sebelum pengguna dapat melihatnya, bagaimana untuk mengumpul ralat ke dalam sistem log?
Berikut ialah item konfigurasi berkaitan yang perlu digunakan dalam php.ini. Dua item konfigurasi ini ialah:
Penjelasan:
Log_errors dan log_errors_max_len dalam jadual sangat mudah difahami.
Dan error_log menentukan laluan di mana ralat akan disimpan. Syslog dalam item konfigurasi mungkin agak sukar untuk difahami. syslog merujuk kepada rakaman sistem. Sistem Windows berada dalam pengumpul log komputer. Linux lalai kepada: /etc/syslog.conf
[Dilanjutkan] Ketahui tentang mata pengetahuan. Jika sistem Linux dimulakan atau pengumpulan log diubah suai. Boleh disimpan pada pelayan pengumpulan log khusus pihak ketiga.
Selain itu, PHP juga menyediakan fungsi log ralat tersuai khusus untuk kami:
bool error_log ( string $ error message [, int $ error message type = 0 [, string $ storage Target] ] )
Fungsi ini boleh menghantar maklumat ralat ke log ralat pelayan web, atau ke fail.
Jenis mesej ralat yang biasa digunakan:
Contoh:
<?php //無法連接到數(shù)據(jù)庫服務(wù)器,直接記錄到php.ini 中的error_log指定位置 error_log("無法連接到數(shù)據(jù)庫服務(wù)器服務(wù)器"); //可以發(fā)送郵件,但是php.ini必須配置過郵件系統(tǒng) error_log('可以用郵件報告錯誤,讓運(yùn)維人員半夜起床干活',1 ,'liwenkai@phpxy.com'); //記錄在指定的位置 error_log("我是一個錯誤喲", 3, "d:/test/my-errors.log"); ?>
Nota: Menghantar e-mel dalam
error_log mungkin tidak dikenali oleh pemula, jadi anda tidak perlu menguasai sedikit pengetahuan.
5 >Titik permulaan cebisan ilmu ini agak tinggi. Kebanyakan orang tidak mempunyai pengalaman dalam kejuruteraan perisian atau pengendalian ralat tersuai, dan sukar untuk membayangkan senario penggunaan. Jika anda ingin melangkau blok pembelajaran ini, anda boleh, dan kami menyokongnya.
Titik pengetahuan ini tidak mempunyai banyak senario aplikasi praktikal. Jika anda mempunyai rancangan untuk mula menulis rangka kerja anda sendiri, atau jika anda telah menyelesaikan projek pertama buku ini. Dua fungsi yang biasa digunakan untuk ralat yang ditentukan pengguna:set_error_handler (fungsi pengendalian ralat $callback boleh dipanggil)
Tetapkan fungsi pengendalian ralat yang ditentukan pengguna
trigger_error (rentetan $error_msg)
<?php
//定義一個自定義的錯誤處理函數(shù)
function customError($errno, $errstr, $errfile, $errline) {
//輸出錯誤消息
echo "<b>Custom error:</b> [$errno] $errstr<br />";
//輸出錯誤文件和錯誤行
echo "Error on line $errline in $errfile<br />";
echo "Ending Script";
//中止程序運(yùn)行
exit;
}
//使用set_error_handler 綁定用戶自定義函數(shù)
set_error_handler("customError");
$test=2;
//觸發(fā)自定義錯誤
if ($test > 1) {
trigger_error("A custom error has been triggered");
}
?>