Latest web development tutorials
×

PHP หลักสูตร

PHP หลักสูตร PHP แนะนำโดยย่อ PHP ติดตั้ง PHP ไวยากรณ์ PHP ตัวแปร PHP echo/print PHP ชนิดข้อมูล PHP คงที่ PHP เชือก PHP ผู้ประกอบการ PHP If...Else PHP Switch PHP แถว PHP เรียงลำดับอาร์เรย์ PHP Superglobals PHP While การไหลเวียน PHP For การไหลเวียน PHP ฟังก์ชัน PHP ตัวแปรเมจิก PHP namespaces PHP เชิงวัตถุ

PHP ฟอร์ม

PHP ฟอร์ม PHP รูปแบบการตรวจสอบสิทธิ์ PHP ฟอร์ม - ฟิลด์ที่จำเป็น PHP ฟอร์ม - อีเมลยืนยันและ URL PHP ตัวอย่างสมบูรณ์แบบ PHP $_GET ตัวแปร PHP $_POST ตัวแปร

PHP การสอนที่ทันสมัย

PHP อาร์เรย์หลายมิติ PHP วันที่ PHP บรรจุ PHP ไฟล์ PHP อัปโหลดไฟล์ PHP Cookie PHP Session PHP E-mail PHP ความปลอดภัย E-mail PHP Error PHP Exception PHP กรอง PHP กรองขั้นสูง PHP JSON

PHP 7 คุณสมบัติใหม่

PHP 7 คุณสมบัติใหม่

PHP ฐานข้อมูล

PHP MySQL แนะนำโดยย่อ PHP MySQL สัมพันธ์ PHP MySQL การสร้างฐานข้อมูล PHP MySQL สร้างตารางข้อมูล PHP MySQL แทรกข้อมูล PHP MySQL ใส่ข้อมูลหลาย PHP MySQL งบเตรียม PHP MySQL อ่านข้อมูล PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX แนะนำโดยย่อ AJAX PHP AJAX ฐานข้อมูล AJAX XML AJAX ค้นหาแบบ Real-time AJAX RSS Reader AJAX โหวต

PHP คู่มืออ้างอิง

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP การประมวลผลภาพ PHP RESTful

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

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


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

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

กวดวิชานี้จะแนะนำบางส่วนที่สำคัญที่สุดในการตรวจสอบข้อผิดพลาดวิธี PHP

เราจะอธิบายวิธีการจัดการข้อผิดพลาดที่แตกต่างกันของคุณ:

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

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

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

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

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

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

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

<?php
if(!file_exists("welcome.txt"))
{
	die("文件不存在");
}
else
{
	$file=fopen("welcome.txt","r");
}
?>

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

文件不存在

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

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


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

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

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

ไวยากรณ์

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

ระดับรายงานข้อผิดพลาด

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

常量 描述
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。
256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
4096 E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191 E_ALL 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分)

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

function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "脚本结束";
	die();
}

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

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


การตั้งค่าการจัดการข้อผิดพลาด

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

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

set_error_handler("customError");

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

ตัวอย่าง

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

<?php
// 错误处理函数
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr";
}

// 设置错误处理函数
set_error_handler("customError");

// 触发错误
echo($test);
?>

การส่งออกของโค้ดข้างต้นจะเป็นดังนี้:

Error: [8] Undefined variable: test


ข้อผิดพลาดทริกเกอร์

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

ตัวอย่าง

ในตัวอย่างนี้ถ้า "ทดสอบ" ตัวแปรมีค่ามากกว่า "1" มีข้อผิดพลาดเกิดขึ้น:

<?php
$test=2;
if ($test>1)
{
	trigger_error("变量值必须小于等于 1");
}
?>

การส่งออกของโค้ดข้างต้นจะเป็นดังนี้:

Notice: 变量值必须小于等于 1
in /www/test/w3big.php on line 5

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

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

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

ตัวอย่าง

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

<?php
// 错误处理函数
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "脚本结束";
	die();
}

// 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);

// 触发错误
$test=2;
if ($test>1)
{
	trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>

การส่งออกของโค้ดข้างต้นจะเป็นดังนี้:

Error: [512] 变量值必须小于等于 1
脚本结束

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


ข้อผิดพลาดในการเข้าสู่ระบบ

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

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

เกิดข้อผิดพลาดจะถูกส่งทาง e-mail

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

<?php
// 错误处理函数
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "已通知网站管理员";
	error_log("Error: [$errno] $errstr",1,
	"[email protected]","From: [email protected]");
}

// 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);

// 触发错误
$test=2;
if ($test>1)
{
	trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>

การส่งออกของโค้ดข้างต้นจะเป็นดังนี้:

Error: [512] 变量值必须小于等于 1
已通知网站管理员

ข้อความที่ได้รับจากโค้ดข้างต้นจะเป็นดังนี้:

Error: [512] 变量值必须小于等于 1

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