亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Pengendalian ralat PHP

Dalam PHP, pengendalian ralat lalai adalah mudah. Mesej ralat dihantar ke penyemak imbas dengan nama fail, nombor baris dan mesej yang menerangkan ralat.


Pengendalian Ralat PHP

Apabila membuat skrip dan aplikasi web , ralat pengendalian adalah bahagian yang penting. Jika kod anda tidak mempunyai pengekodan pengesanan ralat, program ini akan kelihatan tidak profesional dan membuka pintu kepada risiko keselamatan.

Tutorial ini merangkumi beberapa kaedah pengesanan ralat yang paling penting dalam PHP.

Kami akan menerangkan kaedah pengendalian ralat yang berbeza untuk anda:

· Pernyataan "die()" ringkas

· Ralat dan Ralat Tersuai Pencetus

· Pelaporan Ralat


Pengendalian Ralat Asas: Gunakan fungsi die()

Contoh pertama menunjukkan skrip mudah yang membuka fail teks:

<?php
$open=fopen('error.txt','r');
echo $open;
?>

Jika fail tidak wujud, anda akan mendapat ralat seperti ini:

Amaran: fopen(error.txt) [function.fopen]: failed to open stream:
Tiada fail atau direktori sedemikian dalam /www/php/test/test.php pada baris 2

Untuk mengelakkan pengguna mendapat mesej ralat yang serupa dengan di atas, kami melawati Fail sebelum menyemak jika fail wujud:

<?php
header("Content-type:text/html;charset=utf-8");
if(!file_exists('error.txt')){
    die("文件不存在");
}else{
    $file=fopen('error.txt','r');
}
?>

Sekarang, jika fail itu tidak wujud, anda akan mendapat mesej ralat seperti ini:

Fail tidak wujud

Berbanding dengan kod sebelumnya, kod di atas adalah lebih cekap kerana ia menggunakan mekanisme pengendalian ralat yang mudah untuk menamatkan skrip selepas ralat.

Walau bagaimanapun, penamatan skrip tidak semestinya sesuai. Mari kita periksa fungsi PHP alternatif untuk mengendalikan ralat.


Buat pengendali ralat tersuai

Buat tersuai Pengendali ralat adalah sangat mudah. Kami hanya mencipta fungsi khusus yang boleh dipanggil apabila ralat berlaku dalam PHP.

Fungsi mesti boleh mengendalikan sekurang-kurangnya dua parameter (tahap ralat dan mesej ralat), tetapi boleh menerima sehingga lima parameter (pilihan: fail, nombor baris dan konteks ralat):

error_function (error_level,error_message,error_file,error_line,error_context)


      參數(shù)      描述


  error_level

必需。為用戶定義的錯誤規(guī)定錯誤報告級別。必須是一個數(shù)字。參見下面的表格:錯誤報告級別。
  error_message必需。為用戶定義的錯誤規(guī)定錯誤消息。

  error_file可選。規(guī)定錯誤發(fā)生的文件名。
  error_line可選。規(guī)定錯誤發(fā)生的行號。
  error_context可選。規(guī)定一個數(shù)組,包含了當(dāng)錯誤發(fā)生時在用的每個變量以及它們的值。

Tahap pelaporan ralat

Tahap pelaporan ralat ini dikendalikan oleh pengendali ralat yang ditentukan pengguna Jenis yang berbeza daripada ralat:

           常量    描述
    2E_WARNING非致命的 run-time 錯誤。不暫停腳本執(zhí)行。

     

    8


E_NOTICE

run-time 通知。在腳本發(fā)現(xiàn)可能有錯誤時發(fā)生,但也可能在腳本正常運行時發(fā)生。

     

    256


E_USER_ERROR

致命的用戶生成的錯誤。這類似于程序員使用 PHP 函數(shù) trigger_error() 設(shè)置的 E_ERROR。

   

    512


E_USER_WARNING

非致命的用戶生成的警告。這類似于程序員使用 PHP 函數(shù) trigger_error() 設(shè)置的 E_WARNING。
nilai
Constant< ??> Penerangan
E_WARNINGLarian bukan maut -kesilapan masa. Jangan jeda pelaksanaan skrip.
? 8pemberitahuan masa jalan. Berlaku apabila skrip menemui kemungkinan ralat, tetapi juga boleh berlaku apabila skrip berjalan seperti biasa.
256
E_USER_ERROR
Pengguna maut ralat yang dihasilkan. Ini serupa dengan E_ERROR yang ditetapkan oleh pengaturcara menggunakan fungsi PHP trigger_error().
512
E_USER_WARNING
Amaran yang dijana pengguna yang tidak membawa maut. Ini serupa dengan E_WARNING yang ditetapkan oleh pengaturcara menggunakan fungsi PHP trigger_error().

     

    1024


E_USER_NOTICE

用戶生成的通知。這類似于程序員使用 PHP 函數(shù) trigger_error() 設(shè)置的 E_NOTICE。

     

    4096



E_RECOVERABLE_ERROR

可捕獲的致命錯誤。類似 E_ERROR,但可被用戶定義的處理程序捕獲。(參見 set_error_handler())

     

    8191


E_ALL

所有錯誤和警告。(在 PHP 5.4 中,E_STRICT 成為 E_ALL 的一部分)
? ? ?? ? 1024< /td>

E_USER_NOTICE
用戶生成的通知。這類似于程序員使用 PHP 函數(shù) trigger_error() 設(shè)置的 E_NOTICE。
? ? ?? ? 4096

E_RECOVERABLE_ERROR
可捕獲的致命錯誤。類似 E_ERROR,但可被用戶定義的處理程序捕獲。(參見 set 1 (_error_handler) = "top" style="border-width: 1px; gaya sempadan: pepejal; word-break: break-all;">? ? ?? ? 8191
E_ALL
所有錯誤和警告。(在 PHP 5.4 中,E_STRICT 成為 E_ALL 的一部分)

Sekarang, mari kita cipta fungsi yang mengendalikan ralat:

<?php
header("Content-type:text/html;charset=utf-8");
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr<br>";
    echo "腳本結(jié)束";
    die();
}
?>

Kod di atas adalah Mudah fungsi pengendalian ralat. Apabila ia dicetuskan, ia mendapat tahap ralat dan mesej ralat. Ia kemudian mencetak tahap ralat dan mesej, dan menamatkan skrip.

Sekarang kita telah mencipta fungsi pengendalian ralat, kita perlu menentukan masa untuk menyalakannya.


Tetapkan pengendali ralat

Pengendali ralat lalai PHP adalah Terbina dalam pengendali ralat. Kami akan mengubah fungsi di atas menjadi pengendali ralat lalai apabila skrip berjalan.

Pengendali ralat boleh diubah suai untuk digunakan hanya pada ralat tertentu, supaya skrip boleh mengendalikan ralat yang berbeza dengan cara yang berbeza. Walau bagaimanapun, dalam kes ini, kami akan menggunakan pengendali ralat tersuai kami untuk semua ralat:

set_error_handler("customError");

Sejak kami mahu fungsi tersuai kami mengendalikan semua ralat, set_error_handler() hanya memerlukan satu parameter dan parameter kedua boleh ditambah untuk menentukan tahap ralat


Contoh

Kami menggabungkan pengetahuan yang kami pelajari di atas dan cuba mengeluarkan pembolehubah yang tidak wujud untuk menguji pengendali ralat ini:

<?php
header("Content-type:text/html;charset=utf-8");
// 錯誤處理函數(shù)
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr";
}
// 設(shè)置錯誤處理函數(shù)
set_error_handler("customError");
// 觸發(fā)錯誤
echo($test);
//關(guān)閉了所有的錯誤顯示
error_reporting(0);
//顯示所有錯誤
//error_reporting(E_ALL);
//顯示所有錯誤,但不顯示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?>

Keputusan berjalan program:

Ralat: [8] Pembolehubah tidak ditentukan: ujian

Hasil larian memberitahu kami Tahap ralat ialah 8 , dan mesej ralat ialah: Pembolehubah tidak wujud


mencetuskan ralat

tempat pengguna memasukkan data dalam skrip , berguna untuk mencetuskan ralat apabila input pengguna tidak sah. Dalam PHP, tugas ini dicapai oleh fungsi trigger_error() .

Contoh

Dalam contoh ini, jika pembolehubah "ujian" lebih besar daripada "1", ralat akan berlaku:

<?php
header("Content-type:text/html;charset=utf-8");
$test=2;
if ($test>1)
{
    trigger_error("變量值必須小于等于 1");
}
?>

Hasil pelaksanaan program:

Notis: Nilai pembolehubah mestilah kurang daripada atau sama dengan 1 dalam D:WWWAadvanced tutorialerrorerror_1.php pada baris 6


Anda boleh mencetuskan ralat di mana-mana dalam skrip dan dengan menambahkan parameter kedua, anda boleh menentukan tahap ralat yang dicetuskan.

Jenis ralat yang mungkin:

· E_USER_ERROR - Ralat masa jalan yang dijana pengguna maut. Ralat tidak dapat dipulihkan. Pelaksanaan skrip terganggu.

· E_USER_WARNING - Amaran masa jalan yang dijana pengguna yang tidak membawa maut. Pelaksanaan skrip tidak terganggu.

·?NOTIS_E_USER - Lalai. Pemberitahuan masa jalan yang dijana pengguna. Berlaku apabila skrip menemui kemungkinan ralat, tetapi juga boleh berlaku apabila skrip berjalan seperti biasa.


Contoh

Dalam contoh ini, jika pembolehubah "ujian" lebih besar daripada "1", ralat E_USER_WARNING berlaku. Jika E_USER_WARNING berlaku, kami akan menggunakan pengendali ralat tersuai kami dan menamatkan skrip:

<?php
header("Content-type:text/html;charset=utf-8");
// 錯誤處理函數(shù)
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr<br>";
    echo "腳本結(jié)束";
    die();
}
// 設(shè)置錯誤處理函數(shù)
set_error_handler("customError",E_USER_WARNING);
// 觸發(fā)錯誤
$test=2;
if ($test>1)
{
    trigger_error("變量值必須小于等于 1",E_USER_WARNING);
}
?>

Hasil pelaksanaan program:

Ralat: [512] Nilai pembolehubah mestilah Kurang daripada atau sama dengan 1
Skrip berakhir

Hasil yang sedang dijalankan memberitahu kita bahawa nilai tahap ralat ialah 512. Mesej ralat menjadi mesej gesaan yang kita tetapkan dengan fungsi trigger_error


Ralat mengelog

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 PHP, amaran mesti diterima.

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:

< / tr>< tr >< / jadual>

Contoh

<?php
//無法連接到數(shù)據(jù)庫服務(wù)器,直接記錄到php.ini 中的error_log指定位置
error_log("無法連接到數(shù)據(jù)庫服務(wù)器服務(wù)器");
//可以發(fā)送郵件,但是php.ini必須配置過郵件系統(tǒng)
error_log('可以用郵件報告錯誤,讓運維人員半夜起床干活',1 ,'liwenkai@phpxy.com');
//記錄在指定的位置
error_log("我是一個錯誤喲", 3, "d:/test/my-errors.log");
?>

Contoh

Dalam contoh di bawah, jika ralat tertentu berlaku, kami akan menghantar e-mel dengan mesej ralat dan menamatkan skrip:

<?php
 //error handler function
 function customError($errno, $errstr)
 {
     echo "<b>Error:</b> [$errno] $errstr<br />";
     echo "Webmaster has been notified";
     error_log("Error: [$errno] $errstr",1,
         "someone@example.com","From: webmaster@example.com");
 }
 
 //set error handler
 set_error_handler("customError",E_USER_WARNING);
 
 //trigger error
 $test=2;
 if ($test>1)
 {
     trigger_error("Value must be 1 or below",E_USER_WARNING);
 }
 ?>

Hasil berjalan program :

Ralat: [512] Nilai mestilah 1 atau ke bawah
Juruweb telah dimaklumkan

E-mel yang diterima daripada kod di atas kelihatan seperti ini:

Ralat: [512] Nilai mestilah 1 atau lebih rendah

Kaedah ini tidak sesuai untuk semua kesilapan. Ralat umum harus dilog pada pelayan menggunakan sistem pengelogan PHP lalai.

Nota: Menghantar e-mel dalam error_log mungkin tidak biasa bagi pemula, jadi anda tidak perlu menguasai sedikit pengetahuan.


error_reporting reporting type erroring

error_reporting merujuk kepada Laporan 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 kita ingin menunjukkan semua ralat kita boleh menulis:

error_reporting = E_ALL

Ingin menunjukkan semua ralat tetapi kecualikan Petua, anda boleh menulis parameter ini sebagai:

error_reporting = E_ALL & ~ E_NOTICE

Tunjukkan semua ralat, tetapi kecualikan gesaan, keserasian dan Keserasian masa hadapan. Boleh ditulis sebagai:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED


2. Dalam sesetengah kes, kami tidak mempunyai kebenaran untuk mengendalikan fail php.ini, tetapi apakah yang perlu kami lakukan jika kami mahu mengawal error_reporting?

Pada permulaan fail xxxx.php yang dijalankan, kita boleh menggunakan fungsi error_reporting() untuk mencapai matlamat.

<?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 perkara pengetahuan]:

@ Simbol ialah satu baris yang telah kita pelajari sebelum ini yang tidak memaparkan ralat , sila jangan gunakan atau kurang gunakan simbol @.


Instance

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)核中的實現(xiàn)過程是:
<?php
//關(guān)閉錯誤
error_reporting(0);
//讀取一個不存在的文件,顯示錯誤
//顯示錯誤
error_reporting(E_ALL & ~ E_NOTICE);
?>



Meneruskan pembelajaran
||
<?php header("Content-type:text/html;charset=utf-8"); // 錯誤處理函數(shù) function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 設(shè)置錯誤處理函數(shù) set_error_handler("customError"); // 觸發(fā)錯誤 echo($test); //關(guān)閉了所有的錯誤顯示 error_reporting(0); //顯示所有錯誤 //error_reporting(E_ALL); //顯示所有錯誤,但不顯示提示 //error_reporting(E_ALL & ~ E_NOTICE); ?>
    錯誤消息類型      說明
     0發(fā)送至默認(rèn)的error_log指定位置
     1 發(fā)送到指定的郵件位置
     3發(fā)送至指定的文件位置
Jenis mesej ralat
Penerangan
0 Hantar ke lokasi yang ditentukan log_ralat lalai
1 Hantar ke lokasi e-mel yang ditentukan
3Hantar ke lokasi fail yang ditentukan

    • <blockquote id="xjjls"><i id="xjjls"><video id="xjjls"></video></i></blockquote>