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 '服务器中display_errors的状态为' . 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 //关闭了所有的错误显示 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内核中的实现过程是: <?php //关闭错误 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 //无法连接到数据库服务器,直接记录到php.ini 中的error_log指定位置 error_log("无法连接到数据库服务器服务器"); //可以发送邮件,但是php.ini必须配置过邮件系统 error_log('可以用邮件报告错误,让运维人员半夜起床干活',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
//定义一个自定义的错误处理函数
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";
//中止程序运行
exit;
}
//使用set_error_handler 绑定用户自定义函数
set_error_handler("customError");
$test=2;
//触发自定义错误
if ($test > 1) {
trigger_error("A custom error has been triggered");
}
?>