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

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 เป็นเรื่องง่ายมากAn error message with filename, line number and a message describing the error is sent to the browser. ข้อผิดพลาดที่มีชื่อไฟล์จำนวนบรรทัดและข้อความที่อธิบายถึงข้อผิดพลาดจะส่งไปยังเบราว์เซอร์


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

เมื่อมีการสร้างสคริปต์และการใช้งานเว็บจัดการข้อผิดพลาดเป็นส่วนสำคัญIf your code lacks error checking code, your program may look very unprofessional and you may be open to security risks. หากรหัสของคุณขาดการตรวจสอบข้อผิดพลาดรหัสโปรแกรมของคุณอาจจะดูไม่เป็นมืออาชีพมากและคุณอาจจะเปิดให้เสี่ยงด้านความปลอดภัย

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

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

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

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

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

<?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

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

แต่เพียงแค่หยุดสคริปต์ที่ไม่เสมอวิธีที่จะไปLet's take a look at alternative PHP functions for handling errors. ลองมาดูที่ฟังก์ชั่น PHP ทางเลือกสำหรับข้อผิดพลาดของการจัดการ


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

การสร้างจัดการข้อผิดพลาดที่กำหนดเองจะค่อนข้างง่ายWe simply create a special function that can be called when an error occurs in PHP. เราเพียงแค่สร้างฟังก์ชั่นพิเศษที่สามารถเรียกได้ว่าเมื่อเกิดข้อผิดพลาดใน PHP

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

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

error_function(error_level,error_message,
error_file,error_line,error_context)
Parameter Description
error_level Required. Specifies the error report level for the user-defined error. Must be a value number. See table below for possible error report levels
error_message Required. Specifies the error message for the user-defined error
error_file Optional. Specifies the filename in which the error occurred
error_line Optional. Specifies the line number in which the error occurred
error_context Optional. Specifies an array containing every variable, and their values, in use when the error occurred

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

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

Value Constant Description
2 E_WARNING Non-fatal run-time errors. Execution of the script is not halted
8 E_NOTICE Run-time notices. The script found something that might be an error, but could also happen when running a script normally
256 E_USER_ERROR Fatal user-generated error. This is like an E_ERROR set by the programmer using the PHP function trigger_error()
512 E_USER_WARNING Non-fatal user-generated warning. This is like an E_WARNING set by the programmer using the PHP function trigger_error()
1024 E_USER_NOTICE User-generated notice. This is like an E_NOTICE set by the programmer using the PHP function trigger_error()
4096 E_RECOVERABLE_ERROR Catchable fatal error. This is like an E_ERROR but can be caught by a user defined handle (see also set_error_handler())
8191 E_ALL All errors and warnings (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();
}

รหัสข้างต้นเป็นหน้าที่จัดการข้อผิดพลาดง่ายWhen it is triggered, it gets the error level and an error message. เมื่อมันถูกเรียกจะได้รับระดับความผิดพลาดและข้อผิดพลาดหลังจากนั้นจะส่งระดับความผิดพลาดและข้อความและยุติสคริปต์

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


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

จัดการข้อผิดพลาดเริ่มต้นสำหรับ PHP ในตัวจัดการข้อผิดพลาดWe are going to make the function above the default error handler for the duration of the script. เรากำลังจะทำให้ฟังก์ชั่นข้างต้นจัดการข้อผิดพลาดเริ่มต้นสำหรับระยะเวลาของสคริปต์

มันเป็นไปได้ที่จะเปลี่ยนจัดการข้อผิดพลาดที่จะใช้สำหรับข้อผิดพลาดเพียงบางส่วนเท่านั้นวิธีการที่สคริปต์ที่สามารถจัดการกับข้อผิดพลาดที่แตกต่างกันในรูปแบบที่แตกต่างกันHowever, in this example we are going to use our custom error handler for all errors: อย่างไรก็ตามในตัวอย่างนี้เราจะใช้จัดการข้อผิดพลาดของเราเองสำหรับข้อผิดพลาดทั้งหมด:

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

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

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

ตัวอย่าง

ในตัวอย่างนี้มีข้อผิดพลาดเกิดขึ้นหาก "ทดสอบ" ตัวแปรมีขนาดใหญ่กว่า "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 - เวลาทำงานผิดพลาดร้ายแรงที่ผู้ใช้สร้างErrors that can not be recovered from. ข้อผิดพลาดที่ไม่สามารถกู้คืนจากการทำงานของสคริปต์หยุด
  • E_USER_WARNING - ไม่ร้ายแรงเตือนเวลาทำงานที่ผู้ใช้สร้างExecution of the script is not halted การทำงานของสคริปต์ไม่ได้หยุด
  • E_USER_NOTICE - เริ่มต้นUser-generated run-time notice. แจ้งให้ทราบล่วงหน้าเวลาทำงานที่ผู้ใช้สร้างสคริปต์ที่พบบางสิ่งบางอย่างที่อาจจะมีข้อผิดพลาด แต่ยังสามารถเกิดขึ้นได้เมื่อใช้สคริปต์ตามปกติ

ตัวอย่าง

ในตัวอย่างนี้ E_USER_WARNING เกิดขึ้นหาก "ทดสอบ" ตัวแปรมีขนาดใหญ่กว่า "1"If an E_USER_WARNING occurs we will use our custom error handler and end the script: หาก 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.iniBy using the error_log() function you can send error logs to a specified file or a remote destination. โดยใช้ 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,
  "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);
}
?>

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

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

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

Error: [512] Value must be 1 or below

นี้ไม่ควรนำมาใช้กับข้อผิดพลาดทั้งหมดRegular errors should be logged on the server using the default PHP logging system. ข้อผิดพลาดปกติควรได้รับการบันทึกไว้บนเซิร์ฟเวอร์ที่ใช้ระบบ PHP เริ่มต้นการเข้าสู่ระบบ