ฉันมีรหัส PHP เมื่อฉันเรียกใช้ข้อความเตือนจะปรากฏขึ้น
ฉันจะลบ / ระงับ / เพิกเฉยข้อความเตือนเหล่านี้ได้อย่างไร
ฉันมีรหัส PHP เมื่อฉันเรียกใช้ข้อความเตือนจะปรากฏขึ้น
ฉันจะลบ / ระงับ / เพิกเฉยข้อความเตือนเหล่านี้ได้อย่างไร
คำตอบ:
คุณควรแก้ไขสิ่งที่ก่อให้เกิดการเตือน แต่คุณสามารถควบคุมการเปิดเผยข้อผิดพลาดerror_reporting()
ได้ หากต้องการข้ามข้อความเตือนคุณสามารถใช้สิ่งต่อไปนี้:
error_reporting(E_ERROR | E_PARSE);
E_ALL ^ E_WARNING
error_reporting
ที่ช่วยให้การรายงานข้อผิดพลาดทั้งหมดนอกเหนือจากคำเตือนดูเหมือนว่าทางเลือกที่ดีของการโต้แย้งไป
คุณสามารถใส่@ไว้ด้านหน้าการเรียกใช้ฟังก์ชันเพื่อระงับข้อความแสดงข้อผิดพลาดทั้งหมด
@yourFunctionHere();
dns_get_record
จะส่งคำเตือน รหัสของคุณอาจชดเชยการเตือน แต่ก็ยังคงโยนพวกเขา การปิดการรายงานข้อผิดพลาดทำงานบนเซิร์ฟเวอร์ที่ใช้งานจริง แต่ไม่ได้อยู่บนเซิร์ฟเวอร์ devel หากคุณกำลังสร้างเนื้อหา XML คำเตือนจะทำให้เบราว์เซอร์ไม่แสดงผลเนื่องจากเซิร์ฟเวอร์กำลังส่ง XML ที่มีรูปแบบไม่ถูกต้องซึ่งเกิดจากคำเตือน บางครั้งคุณต้องการใช้กับ devel แต่ไม่ใช่สำหรับบางสิ่งที่เกิดจากความล้มเหลวในการค้นหา DNS ชั่วคราวที่คุณชดเชยแล้ว
วิธีระงับการเตือนขณะที่เปิดใช้งานการรายงานข้อผิดพลาดอื่น ๆ ทั้งหมด:
error_reporting(E_ALL ^ E_WARNING);
หากคุณไม่ต้องการแสดงคำเตือนรวมถึงข้อผิดพลาดที่ใช้
// Turn off all error reporting
error_reporting(0);
หากคุณต้องการระงับคำเตือนและข้อผิดพลาดประเภทอื่น ๆ (เช่นประกาศ) ในขณะที่แสดงข้อผิดพลาดอื่น ๆ ทั้งหมดคุณสามารถทำได้:
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
ใน Core Php เพื่อซ่อนชุดข้อความเตือน error_reporting (0) ที่ด้านบนสุดของไฟล์ทั่วไปหรือไฟล์รวม
ใน Wordpress ซ่อนคำเตือนและคำเตือนเพิ่มรหัสต่อไปนี้ในไฟล์ wp-config.php
ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
ไม่ตอบคำถาม แต่ฉันคิดว่านี่เป็นการประนีประนอมที่ดีกว่าในบางสถานการณ์:
ฉันได้รับข้อความเตือนจากคำสั่ง printf () ในห้องสมุดบุคคลที่สาม ฉันรู้ว่าสาเหตุคืออะไร - เป็นการทำงานชั่วคราวในขณะที่บุคคลที่สามแก้ไขรหัสของพวกเขา ฉันยอมรับว่าไม่ควรระงับคำเตือน แต่ฉันไม่สามารถสาธิตการทำงานของฉันให้กับลูกค้าได้โดยมีข้อความเตือนปรากฏขึ้นบนหน้าจอ ทางออกของฉัน:
printf('<div style="display:none">');
...Third-party stuff here...
printf('</div>');
คำเตือนยังอยู่ในแหล่งที่มาของหน้าเพื่อเตือนให้ฉันทราบ แต่มองไม่เห็นลูกค้า
ob_start()
และob_end_clean()
แทน วิธีนี้สิ่งต่าง ๆ ไม่ได้ถูกส่งไปยังเบราว์เซอร์ (ซึ่งทำที่นี่)
ฉันทำดังต่อไปนี้ในphp.iniของฉัน:
error_reporting = E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
บันทึกนี้เพียงข้อผิดพลาดร้ายแรงและไม่มีคำเตือน
ฉันคิดว่าทางออกที่ดีกว่าคือการกำหนดค่าของ. htaccess ด้วยวิธีนี้คุณไม่จำเป็นต้องเปลี่ยนรหัสแอปพลิเคชัน นี่คือคำสั่งสำหรับ Apache2
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
คุณสามารถระงับคำเตือนโดยใช้error_reportingแต่วิธีที่ดีกว่าคือแก้ไขสคริปต์ของคุณตั้งแต่แรก
หากคุณไม่ทราบวิธีแก้ไขคำถามของคุณและแสดงบรรทัดที่เป็นปัญหาและคำเตือนที่ปรากฏ
มีคำตอบสำหรับError Control Operatorอยู่แล้วแต่ไม่มีคำอธิบาย คุณสามารถใช้@
โอเปอเรเตอร์กับทุกนิพจน์และซ่อนข้อผิดพลาด (ยกเว้นข้อผิดพลาดร้ายแรง)
@$test['test']; //PHP Notice: Undefined variable: test
@(14/0); // PHP Warning: Division by zero
//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error: Uncaught Error: Call to undefined function customFuntion()
สำหรับการดีบั๊กมันเป็นวิธีที่รวดเร็วและสมบูรณ์แบบ แต่คุณไม่ควรใช้ในการผลิตหรือรวมอย่างถาวรในเวอร์ชันท้องถิ่นของคุณ มันจะทำให้คุณเกิดการระคายเคืองที่ไม่จำเป็นมากมาย
คุณควรพิจารณาแทน:
1.การตั้งค่าการรายงานข้อผิดพลาดตามที่ระบุไว้ในคำตอบที่ยอมรับ
error_reporting(E_ERROR | E_PARSE);
หรือจากการตั้งค่า PHP INI
ini_set('display_errors','Off');
2. การจับข้อยกเว้น
try {
$var->method();
} catch (Error $e) {
// Handle error
echo $e->getMessage();
}
สำหรับการละเว้นคำเตือนทั้งหมดให้ใช้ตัวอย่างนี้ที่ด้านบนของรหัสของคุณ:
error_reporting(0);