ฉันต้องตั้งค่าสคริปต์ PHP ที่ด้านบนเพื่อปิดการรายงานข้อผิดพลาดสำหรับมาตรฐานที่เข้มงวด
ใครช่วยได้บ้าง
ฉันต้องตั้งค่าสคริปต์ PHP ที่ด้านบนเพื่อปิดการรายงานข้อผิดพลาดสำหรับมาตรฐานที่เข้มงวด
ใครช่วยได้บ้าง
คำตอบ:
คุณต้องการปิดใช้งานการรายงานข้อผิดพลาดหรือเพียงป้องกันไม่ให้ผู้ใช้เห็นหรือไม่ โดยปกติจะเป็นความคิดที่ดีที่จะบันทึกข้อผิดพลาดแม้ในไซต์ที่ใช้งานจริง
# in your PHP code:
ini_set('display_errors', '0'); # don't show any errors...
error_reporting(E_ALL | E_STRICT); # ...but do log them
พวกเขาจะถูกบันทึกลงในบันทึกของระบบมาตรฐานของคุณหรือใช้error_log
คำสั่งเพื่อระบุตำแหน่งที่คุณต้องการข้อผิดพลาด
php.ini
ไฟล์ของคุณเช่นถ้าคุณไม่สามารถแก้ไขรหัส PHP
php.ini
หรือ.htaccess
หรือที่ไหนสักแห่งในโค้ด PHP ของฉัน
สำหรับไม่มีข้อผิดพลาด
error_reporting(0);
หรือเพียงแค่ไม่เข้มงวด
error_reporting(E_ALL ^ E_STRICT);
และหากคุณต้องการแสดงข้อผิดพลาดทั้งหมดอีกครั้งให้ใช้
error_reporting(-1);
^
มันดีสำหรับการละเว้นข้อผิดพลาดประเภทเดียวเท่านั้น หากคุณต้องการปิดประเภทเพิ่มเติมคุณควรใช้E_ALL & ~E_DEPRECATED & ~E_STRICT
รูปแบบ หรืออาจจะเป็น(E_ALL & ~(E_DEPRECATED | E_STRICT))
รูปแบบ
ini_set('error_reporting', E_ALL&~E_STRICT);
ระงับการรายงานข้อผิดพลาดini_set('error_reporting', E_ALL^E_STRICT);
^
("xor") มากกว่า& ~
("และไม่ใช่") เป็นความคิดที่ไม่ดี ! ^
ขึ้นอยู่กับสมมติฐานที่ว่าเช่น E_STRICT เป็นส่วนหนึ่งของ E_ALL และมักจะเป็นส่วนหนึ่งของมัน สิ่งนี้ไม่ดีเนื่องจาก E_ALL เปลี่ยนไปในอดีต (E_STRICT ไม่ได้ผ่านมา แต่ตอนนี้เปลี่ยนมาจาก PHP 5.4) หากสมมติฐานล้มเหลวในหนึ่งวัน^
จะไม่เพียง แต่ทำลาย แต่จริง ๆ แล้วตรงข้ามกับสิ่งที่ควรทำ: มันจะเปิดใช้งาน E_STRICT เนื่องจาก XOR ( ^
) ทำงานอย่างไร & ~
อย่างไรก็ตามจะปิดใช้งาน E_STRICT เสมอไม่ว่าค่าปัจจุบันของ E_ALL จะเป็นเท่าใดก็ตาม ดังนั้น& ~
ควรใช้
โซลูชันทั้งหมดข้างต้นถูกต้อง แต่เมื่อเราพูดถึงแอพพลิเคชัน PHP ปกติพวกเขาจะต้องรวมอยู่ในทุก ๆ หน้าว่ามันต้องการ วิธีการแก้ปัญหานี้คือผ่าน.htaccess
ที่โฟลเดอร์ราก เพียงเพื่อซ่อนข้อผิดพลาด [ใส่หนึ่งในบรรทัดติดตามในไฟล์]
php_flag display_errors off
หรือ
php_value display_errors 0
ถัดไปเพื่อตั้งค่าการรายงานข้อผิดพลาด
php_value error_reporting 30719
หากคุณสงสัยว่าค่า30719
มา E_ALL (32767), E_STRICT (2048) เป็นค่าคงที่ที่เก็บค่าตัวเลขและ ( 32767 - 2048 = 30719
)
php_admin_value error_reporting
เพื่อการทำงาน (ใน vhost config)
ค่าเริ่มต้นของการตั้งค่าสถานะerror_reportingคือE_ALL & ~ E_NOTICEหากไม่ได้ตั้งค่าใน php.ini แต่ในการติดตั้งบางส่วน (โดยเฉพาะการติดตั้งที่กำหนดเป้าหมายสภาพแวดล้อมการพัฒนา) จะมีE_ALL | E_STRICTตั้งค่าเป็นค่าสถานะนี้ (นี่คือค่าที่แนะนำระหว่างการพัฒนา ) ในบางกรณีโดยเฉพาะอย่างยิ่งเมื่อคุณต้องการเรียกใช้โครงการโอเพนซอร์สบางอย่างที่พัฒนามาก่อนยุค PHP 5.3 และยังไม่ได้ปรับปรุงด้วยแนวปฏิบัติที่ดีที่สุดที่กำหนดโดย PHP 5.3 ในสภาพแวดล้อมการพัฒนาของคุณ ข้อความเหมือนที่คุณได้รับ วิธีที่ดีที่สุดในการรับมือกับสถานการณ์นี้คือการตั้งค่าE_ALLเป็นค่าของerror_reporting flag ทั้งในphp.iniหรือในรหัส (อาจอยู่ใน front-controller เช่น index.php ใน web-root ดังต่อไปนี้:
if(defined('E_STRICT')){
error_reporting(E_ALL);
}
ในชุด php.ini:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
WordPress
ถ้าคุณทำงานในสภาพแวดล้อม WordPress ที่ Wordpress กำหนดระดับความผิดพลาดในไฟล์ WP-รวมถึง load.php / wp_debug_mode()
ในการทำงาน ดังนั้นคุณต้องเปลี่ยนระดับหลังจากที่ฟังก์ชั่นนี้ถูกเรียก (ในไฟล์ที่ไม่ได้รับการตรวจสอบในคอมไพล์เพื่อการพัฒนาเท่านั้น) หรือแก้ไขการerror_reporting()
โทรโดยตรง
ฉันไม่เห็นคำตอบที่สะอาดและเหมาะสำหรับซอฟต์แวร์ที่พร้อมใช้งานสำหรับการผลิตดังนั้นจึงเป็นเช่นนี้:
/*
* Get current error_reporting value,
* so that we don't lose preferences set in php.ini and .htaccess
* and accidently reenable message types disabled in those.
*
* If you want to disable e.g. E_STRICT on a global level,
* use php.ini (or .htaccess for folder-level)
*/
$old_error_reporting = error_reporting();
/*
* Disable E_STRICT on top of current error_reporting.
*
* Note: do NOT use ^ for disabling error message types,
* as ^ will re-ENABLE the message type if it happens to be disabled already!
*/
error_reporting($old_error_reporting & ~E_STRICT);
// code that should not emit E_STRICT messages goes here
/*
* Optional, depending on if/what code comes after.
* Restore old settings.
*/
error_reporting($old_error_reporting);
E_ALL & ~E_DEPRECATED & ~E_STRICT
ผลิต โปรดสังเกตว่าพวกเขาแนะนำให้คุณปิดใช้งานมาตรฐานที่เข้มงวด