ล่าสุดการพัฒนาเว็บบทเรียน
×

PHP เกี่ยวกับการสอน

PHP บ้าน PHP แนะนำ PHP ติดตั้ง PHP วากยสัมพันธ์ PHP ตัวแปร PHP Echo / พิมพ์ PHP ชนิดข้อมูล PHP เงื่อนไข PHP ค่าคงที่ PHP ผู้ประกอบการ PHP If...Else...Elseif PHP Switch PHP ในขณะที่ลูป PHP สำหรับลูป PHP ฟังก์ชั่น PHP แถว PHP เรียงลำดับอาร์เรย์ PHP Superglobals

PHP การจัดการ

PHP ฟอร์ม การจัดการ PHP ฟอร์ม การตรวจสอบ PHP ฟอร์ม จำเป็นต้องใช้ PHP ฟอร์ม URL/E-mail PHP ฟอร์ม สมบูรณ์

PHP สูง

PHP อาร์เรย์หลายมิติ PHP วันและเวลา PHP ประกอบด้วย PHP ไฟล์ การจัดการ PHP ไฟล์ เปิด / อ่าน PHP ไฟล์ สร้าง / เขียน PHP ไฟล์ อัปโหลด PHP Cookies PHP Sessions PHP ฟิลเตอร์ PHP Filters สูง PHP ผิดพลาด การจัดการ PHP ข้อยกเว้น

MySQL Database

MySQL ฐานข้อมูล MySQL สัมพันธ์ MySQL Create DB MySQL Create ตาราง MySQL Insert Data MySQL รับ ID เข้าครั้งสุดท้าย MySQL ใส่หลาย MySQL Prepared MySQL Select Data MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP - XML

PHP XML parsers PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX แนะนำ AJAX PHP AJAX ฐานข้อมูล AJAX XML AJAX ค้นหาสด AJAX RSS Reader AJAX โพลล์

PHP Examples

PHP ตัวอย่าง PHP ทดสอบ PHP ใบรับรอง

PHP การอ้างอิง

PHP แถว PHP ปฏิทิน PHP วันที่ PHP ไดเรกทอรี PHP ผิดพลาด PHP ระบบแฟ้ม PHP กรอง PHP FTP PHP HTTP PHP Libxml PHP จดหมาย PHP คณิตศาสตร์ PHP อื่น ๆ PHP MySQLi PHP SimpleXML PHP เชือก PHP XML PHP Zip PHP ช่วงเวลา

 

PHPจัดการข้อผิดพลาด


การจัดการข้อผิดพลาดเริ่มต้นใน PHP เป็นเรื่องง่ายมาก ข้อผิดพลาดที่มีชื่อไฟล์จำนวนบรรทัดและข้อความที่อธิบายถึงข้อผิดพลาดจะส่งไปยังเบราว์เซอร์


PHP จัดการข้อผิดพลาด

เมื่อมีการสร้างสคริปต์และการใช้งานเว็บจัดการข้อผิดพลาดเป็นส่วนสำคัญ หากรหัสของคุณขาดการตรวจสอบข้อผิดพลาดรหัสโปรแกรมของคุณอาจจะดูไม่เป็นมืออาชีพมากและคุณอาจจะเปิดให้เสี่ยงด้านความปลอดภัย

กวดวิชานี้จะมีบางส่วนของข้อผิดพลาดที่พบบ่อยที่สุดในการตรวจสอบวิธีการใน PHP

เราจะแสดงวิธีการจัดการข้อผิดพลาดที่แตกต่างกัน

  • ง่าย " die() " งบ
  • ข้อผิดพลาดที่กำหนดเองและทริกเกอร์ข้อผิดพลาด
  • รายงานข้อผิดพลาด

จัดการข้อผิดพลาดพื้นฐาน: การใช้ die() ฟังก์ชั่น

ตัวอย่างแรกแสดงให้เห็นสคริปต์ง่ายที่เปิดแฟ้มข้อความ:

<?php
$file=fopen("welcome.txt","r");
?>

หากไฟล์ไม่ได้อยู่ที่คุณอาจได้รับข้อผิดพลาดเช่นนี้:

Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

เพื่อป้องกันไม่ให้ผู้ใช้จากการได้รับข้อความแสดงข้อผิดพลาดอย่างหนึ่งดังกล่าวข้างต้นเราจะทำการทดสอบว่าไฟล์ที่มีอยู่ก่อนที่เราจะพยายามที่จะเข้าถึงมัน

<?php
if(!file_exists("welcome.txt")) {
  die("File not found");
} else {
  $file=fopen("welcome.txt","r");
}
?>

ตอนนี้ถ้าไฟล์ไม่ได้อยู่ที่คุณได้รับข้อผิดพลาดเช่นนี้:

File not found

โค้ดข้างต้นจะมีประสิทธิภาพมากกว่ารหัสก่อนหน้านี้เพราะใช้กลไกการจัดการข้อผิดพลาดง่าย ๆ ที่จะหยุดสคริปต์หลังจากข้อผิดพลาด

แต่เพียงแค่หยุดสคริปต์ที่ไม่เสมอวิธีที่จะไป ลองมาดูที่ฟังก์ชั่น PHP ทางเลือกสำหรับข้อผิดพลาดของการจัดการ


การสร้างจัดการข้อผิดพลาดที่กำหนดเอง

การสร้างจัดการข้อผิดพลาดที่กำหนดเองจะค่อนข้างง่าย เราเพียงแค่สร้างฟังก์ชั่นพิเศษที่สามารถเรียกได้ว่าเมื่อเกิดข้อผิดพลาดใน PHP

ฟังก์ชั่นนี้จะต้องสามารถที่จะจัดการอย่างน้อยสองพารามิเตอร์ (ระดับความผิดพลาดและข้อผิดพลาด) แต่สามารถรับได้ถึงห้าพารามิเตอร์ (optionally: file, line-number, and the error context) :

วากยสัมพันธ์

error_function(error_level,error_message,
error_file,error_line,error_context)
พารามิเตอร์ ลักษณะ
error_level จำเป็นต้องใช้ ระบุระดับการรายงานข้อผิดพลาดสำหรับข้อผิดพลาดที่ผู้ใช้กำหนด ต้องเป็นตัวเลขค่า ดูตารางด้านล่างสำหรับระดับรายงานข้อผิดพลาดที่เป็นไปได้
error_message จำเป็นต้องใช้ ระบุข้อผิดพลาดสำหรับข้อผิดพลาดที่ผู้ใช้กำหนด
error_file ไม่จำเป็น. ระบุชื่อไฟล์ที่ข้อผิดพลาดที่เกิดขึ้น
error_line ไม่จำเป็น. ระบุจำนวนบรรทัดที่ข้อผิดพลาดที่เกิดขึ้น
error_context ไม่จำเป็น. ระบุอาร์เรย์ที่มีตัวแปรทุกคนและค่าของพวกเขาในการใช้งานเมื่อเกิดข้อผิดพลาดที่เกิดขึ้น

เกิดข้อผิดพลาดในระดับที่รายงาน

เหล่านี้ระดับรายงานข้อผิดพลาดเป็นชนิดที่แตกต่างกันของข้อผิดพลาดที่ผู้ใช้กำหนดจัดการข้อผิดพลาดที่สามารถใช้สำหรับ:

ความคุ้มค่า คงที่ ลักษณะ
2 E_WARNING ไม่ร้ายแรงข้อผิดพลาดเวลาทำงาน การทำงานของสคริปต์ไม่ได้หยุด
8 E_NOTICE ประกาศเวลาทำงาน สคริปต์ที่พบบางสิ่งบางอย่างที่อาจจะมีข้อผิดพลาด แต่ยังสามารถเกิดขึ้นได้เมื่อใช้สคริปต์ตามปกติ
256 E_USER_ERROR ข้อผิดพลาดที่ผู้ใช้สร้างร้ายแรง นี้เป็นเหมือน E_ERROR ที่ตั้งอยู่โดยโปรแกรมเมอร์โดยใช้ฟังก์ชัน PHP trigger_error()
512 E_USER_WARNING เตือนผู้ใช้สร้างที่ไม่ร้ายแรง นี้เป็นเหมือน E_WARNING ที่ตั้งอยู่โดยโปรแกรมเมอร์โดยใช้ฟังก์ชัน PHP trigger_error()
1024 E_USER_NOTICE แจ้งให้ทราบล่วงหน้าที่ผู้ใช้สร้าง นี้เป็นเหมือน E_NOTICE ที่ตั้งอยู่โดยโปรแกรมเมอร์โดยใช้ฟังก์ชัน PHP trigger_error()
4096 E_RECOVERABLE_ERROR ข้อผิดพลาดร้ายแรง catchable นี้เป็นเหมือน E_ERROR แต่สามารถจับโดยจับที่ผู้ใช้กำหนด (see also set_error_handler() )
8191 E_ALL ข้อผิดพลาดและคำเตือนทั้งหมด (E_STRICT became a part of E_ALL in PHP 5.4)

ตอนนี้ให้สร้างฟังก์ชั่นในการจัดการกับข้อผิดพลาด:

function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

รหัสข้างต้นเป็นฟังก์ชั่นจัดการข้อผิดพลาดง่าย เมื่อมันถูกเรียกจะได้รับระดับความผิดพลาดและข้อผิดพลาด หลังจากนั้นจะส่งระดับความผิดพลาดและข้อความและยุติสคริปต์

ตอนนี้ที่เราได้สร้างฟังก์ชั่นจัดการข้อผิดพลาดที่เราต้องตัดสินใจเมื่อมันควรจะเรียก


ชุดจัดการข้อผิดพลาด

จัดการข้อผิดพลาดเริ่มต้นสำหรับ PHP ในตัวจัดการข้อผิดพลาด เรากำลังจะทำให้ฟังก์ชั่นดังกล่าวข้างต้นจัดการข้อผิดพลาดเริ่มต้นสำหรับระยะเวลาของสคริปต์

มันเป็นไปได้ที่จะเปลี่ยนจัดการข้อผิดพลาดที่จะใช้สำหรับข้อผิดพลาดเพียงบางส่วนเท่านั้นวิธีการที่สคริปต์ที่สามารถจัดการกับข้อผิดพลาดที่แตกต่างกันในรูปแบบที่แตกต่างกัน อย่างไรก็ตามในตัวอย่างนี้เราจะใช้จัดการข้อผิดพลาดของเราเองสำหรับข้อผิดพลาดทั้งหมด:

set_error_handler("customError");

เนื่องจากเราต้องการฟังก์ชั่นของเราเองที่จะจัดการกับข้อผิดพลาดทั้งหมดที่ set_error_handler() จำเป็นเพียงหนึ่งพารามิเตอร์เป็นพารามิเตอร์ที่สองอาจจะเพิ่มเพื่อระบุระดับความผิดพลาด

ตัวอย่าง

การทดสอบการจัดการข้อผิดพลาดโดยพยายามที่จะตัวแปรผลลัพธ์ที่ไม่มีอยู่:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

การส่งออกของรหัสดังกล่าวควรจะเป็นอะไรเช่นนี้

Error: [8] Undefined variable: test

เรียกข้อผิดพลาด

ในสคริปต์ที่ผู้ใช้สามารถป้อนข้อมูลที่จะเป็นประโยชน์ที่จะเรียกข้อผิดพลาดเมื่อมีการป้อนข้อมูลที่ผิดกฎหมายเกิดขึ้น ใน PHP นี้จะทำโดย trigger_error() ฟังก์ชั่น

ตัวอย่าง

ในตัวอย่างนี้มีข้อผิดพลาดเกิดขึ้นหากมี "test" ตัวแปรมีขนาดใหญ่กว่า "1" :

<?php
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below");
}
?>

การส่งออกของรหัสดังกล่าวควรจะเป็นอะไรเช่นนี้

Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6

เกิดข้อผิดพลาดสามารถเรียกได้ทุกที่ที่คุณต้องการในสคริปต์และโดยการเพิ่มพารามิเตอร์ที่สองคุณสามารถระบุสิ่งที่ระดับความผิดพลาดจะถูกเรียก

ประเภทข้อผิดพลาดที่เป็นไปได้:

  • E_USER_ERROR - เวลาทำงานผิดพลาดร้ายแรงที่ผู้ใช้สร้าง ข้อผิดพลาดที่ไม่สามารถกู้คืนจาก การทำงานของสคริปต์หยุด
  • E_USER_WARNING - ปลอดร้ายแรงเตือนเวลาทำงานที่ผู้ใช้สร้าง การทำงานของสคริปต์ไม่ได้หยุด
  • E_USER_NOTICE - เริ่มต้น แจ้งให้ทราบล่วงหน้าระยะเวลาที่ผู้ใช้สร้าง สคริปต์ที่พบบางสิ่งบางอย่างที่อาจจะมีข้อผิดพลาด แต่ยังสามารถเกิดขึ้นได้เมื่อใช้สคริปต์ตามปกติ

ตัวอย่าง

ในตัวอย่างนี้ E_USER_WARNING เกิดขึ้นหากมี "test" ตัวแปรมีขนาดใหญ่กว่า "1" หาก E_USER_WARNING เกิดขึ้นเราจะใช้จัดการข้อผิดพลาดของเราเองและจบสคริปต์:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

//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);
}
?>

การส่งออกของรหัสดังกล่าวควรจะเป็นอะไรเช่นนี้

Error: [512] Value must be 1 or below
Ending Script

ตอนนี้ที่เราได้เรียนรู้ที่จะสร้างข้อผิดพลาดของเราเองและวิธีการที่จะเรียกพวกเขาช่วยให้ดูที่การบันทึกข้อผิดพลาด


บันทึกข้อผิดพลาด

โดยค่าเริ่มต้น, PHP ส่งบันทึกข้อผิดพลาดกับระบบการเข้าสู่ระบบของเซิร์ฟเวอร์หรือไฟล์ขึ้นอยู่กับวิธีการกำหนดค่า error_log มีการตั้งค่าในไฟล์ php.ini โดยใช้ error_log() ทำงานคุณสามารถส่งบันทึกข้อผิดพลาดไปยังแฟ้มที่ระบุหรือปลายทางระยะไกล

ส่งข้อความผิดพลาดให้กับตัวเองโดย e-mail สามารถเป็นวิธีที่ดีในการได้รับการแจ้งเตือนจากข้อผิดพลาดที่เฉพาะเจาะจง

ส่งข้อความข้อผิดพลาดทาง E-mail

ในตัวอย่างด้านล่างเราจะส่ง e-mail ที่มีข้อผิดพลาดและจบสคริปต์ถ้าข้อผิดพลาดเกิดขึ้น:

<?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,
  "[email protected]","From: [email protected]");
}

//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);
}
?>

การส่งออกของรหัสดังกล่าวควรจะเป็นอะไรเช่นนี้

Error: [512] Value must be 1 or below
Webmaster has been notified

และจดหมายที่ได้รับจากโค้ดข้างต้นมีลักษณะเช่นนี้

Error: [512] Value must be 1 or below

นี้ไม่ควรนำมาใช้กับข้อผิดพลาดทั้งหมด ข้อผิดพลาดปกติควรได้รับการบันทึกไว้บนเซิร์ฟเวอร์ที่ใช้ระบบ PHP เริ่มต้นการเข้าสู่ระบบ