ฉันจะปิดข้อผิดพลาด PHP ได้อย่างไร


32

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

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


3
โปรดทราบว่าข้อผิดพลาดนั้นมีบทบาทสำคัญมาก: พวกเขาระบุว่ามีบางอย่างผิดปกติ การกดขี่นั้นไม่ได้ช่วยแก้ปัญหาพื้นฐาน สิ่งนี้เรียกอีกอย่างหนึ่งว่า "วิธีรัสเซีย": เมื่อสัญญาณไฟเตือนในโรงไฟฟ้านิวเคลียร์เริ่มกะพริบเพียงแค่เอาหลอดไฟออก ไฟสัญญาณเตือนไม่กะพริบอีกต่อไป ไม่มีปัญหา.
berkes

ตลก :) แต่ฉันจะระงับข้อผิดพลาดในเว็บไซต์การผลิตเท่านั้น
drupal_stuff_alter

Drupal มีตัวเลือกในการตัดสินใจว่าควรแสดงข้อผิดพลาดใด ข้อผิดพลาดที่ไม่แสดงยังคงถูกบันทึกไว้ในฐานข้อมูลและแสดงใน admin / reports / dblog
kiamlaluno

@ kiamlaluno ในการผลิตที่ค่อนข้างดี (แต่แสดงข้อผิดพลาดว่าการชำระเงินล้มเหลวจะดีกว่าเสมอแล้วทำให้ลูกค้าของคุณไม่แน่ใจ) แต่ในการพัฒนาและทดสอบประสบการณ์ของฉันก็คือความผิดพลาดที่เกิดขึ้นกับ dblog นั้นถูกมองข้ามไป Drupalsites ที่มีประกาศและคำเตือนหลายร้อยรายการต่อชั่วโมงที่เข้าสู่ระบบก็ไม่มีข้อยกเว้น และข้อยกเว้นจริงและข้อผิดพลาดจะหายไปในเสียง สิ่งที่ดีที่สุดคือการผลักดันให้ทุกคนสังเกตเห็นอย่างหนักในหน้าของนักพัฒนา
berkes

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

คำตอบ:


29

เส้นทางจะเปลี่ยนไปเช่นเดียวกับใน Drupal 7 หน้าเดียวกับที่คุณเคยเห็นที่ admin / settings / report-error ขณะนี้อยู่ที่ admin / config / development / logging

ภาพหน้าจอ


1
ด้วยเหตุผลบางอย่างฉันไม่สามารถทำสิ่งนี้ได้ เมื่อคลิกบันทึกการเลือกของฉันกำลังได้รับการรีเซ็ต มีวิธีที่ฉันสามารถเปลี่ยนสิ่งนี้ด้วยตนเองในฐานข้อมูลหรืออะไรแบบนี้ ??
Niranjan N Raju

17

ตามที่แนะนำในAdministration » Configuration » Development(ที่/admin/config/development/logging) คุณสามารถค้นหาการตั้งค่าเพื่อปิดการแสดงข้อความแสดงข้อผิดพลาด แต่จะไม่ปิดใช้งานข้อผิดพลาด / การแจ้งเตือนอย่างสมบูรณ์

เป็นเพราะ Drupal 7 บังคับใช้ E_ALL ดังนั้นพวกเขาจึงยังเขียนไปยัง syslog และคุณสามารถเห็นพวกเขาในบันทึกล่าสุดที่ส่งผลต่อประสิทธิภาพเว็บไซต์ของคุณ

หากต้องการปิดการใช้งานการแจ้งเตือนโดยสมบูรณ์คุณจะต้องเพิ่มบรรทัดต่อไปนี้ในไฟล์settings.phpหรือของคุณphp.ini:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

แสดงข้อผิดพลาดทั้งหมดยกเว้นประกาศและคำเตือนมาตรฐานการเข้ารหัส

ในการปิดข้อผิดพลาด PHP ทั้งหมดซึ่งไม่แนะนำคุณอาจลองเพิ่มไฟล์การตั้งค่าของคุณ:

error_reporting(0); // Disable all errors.

ดู: error_reporting()


Responses Drupal 7 core code สำหรับE_ALLการบันทึก (ไฟล์:) includes/bootstrap.inc:

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

ดูสิ่งนี้ด้วย:


4

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

มีการเสนอแพทช์สำหรับสิ่งนี้ใน D8 แต่ในปัจจุบันใน D7 คุณถูก จำกัด ไว้ที่มาสก์ข้อผิดพลาด 3 ข้อ - ทั้งหมด, ไม่มีหรือข้อผิดพลาด & คำเตือน - ที่ตั้งค่าในหน้าผู้ดูแลระบบ kiamlaluno ระบุ


3

การตั้งค่าอยู่เสมอในadmin / config / พัฒนา / การเข้าสู่ระบบ :)


ขอบคุณมาก! ฉันยังต้องการให้การแจ้งเตือนสีเขียวยังมีชีวิตอยู่ หวังว่าพวกเขาจะไม่หายไป
drupal_stuff_alter

2

ไม่แน่ใจว่าทำไมเมธอด Drush ถึงไม่มีเอกสาร แต่ฉันมีสคริปต์บิลด์:

drush vset error_level 0

... ซึ่งบันทึกข้อความแสดงข้อผิดพลาดในบันทึก แต่ไม่แสดงบนหน้าจอ


1

คุณอาจต้องเพิ่มเครื่องหมายคำพูดลงในโซลูชัน kenorb ที่โพสต์ไว้ด้านบน:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');

นี่เป็นความผิด - สิ่งเหล่านี้เป็นค่าคงที่พวกเขาไม่ควรยกมา error_reporting เป็นค่าจำนวนเต็มซึ่งประกอบด้วยค่าคงที่จำนวนเต็ม ORed พร้อมกัน มันไม่ใช่การตั้งค่าสตริงที่ประกอบด้วยชื่อคงที่เมื่อคุณมาที่นี่
datashaman

0

มีโมดูลสำหรับที่:

https://www.drupal.org/project/errorlevelpermission

จากหน้าโครงการ:

คุณสามารถ

  • มีบทบาทผู้สร้างไซต์ (หรือแม้แต่บทบาทดีบักพิเศษ) ดูข้อผิดพลาดและประกาศต่างๆ
  • มีคนอื่นไม่เห็นข้อผิดพลาดและประกาศ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.