การปิดใช้งานมาตรฐานที่เข้มงวดใน PHP 5.4


95

ฉันกำลังใช้งานไซต์บน php 5.4 ก่อนหน้านี้ฉันใช้งานไซต์ของฉันบน 5.3.8 น่าเสียดายที่ php 5.4 รวมE_ALLและE_STRICTซึ่งหมายความว่าการตั้งค่าก่อนหน้าของฉันสำหรับerror_reportingใช้งานไม่ได้ในขณะนี้ ค่าก่อนหน้าของฉันคือE_ALL & ~E_NOTICE & ~E_STRICTฉันควรเปิดใช้ทีละค่าหรือไม่?

ฉันมีข้อผิดพลาดมากเกินไปและไฟล์มีโค้ดมากเกินไปสำหรับฉันที่จะแก้ไข


11
คำแนะนำ ... แก้ไขโค้ดไม่งั้นข้อบกพร่องจะดีขึ้นและแก้ไขได้ยากขึ้น
Baba

7
s / น่าเสียดาย / โชคดี
NikiC

96
ขอบคุณสำหรับคำแนะนำอย่างไรก็ตามฉันขาดความรู้ที่ต้องการในการเขียนปลั๊กอิน jfusion phpbb3 ใหม่ทั้งหมด ขอบคุณสำหรับการเอื้อเฟื้อแม้ว่า
icomrade

12
ฉันเห็นด้วยกับเพื่อนของเราว่าคุณควรลองแก้ไขข้อผิดพลาดพวกเขาอาจมากัดข้อเท้าของคุณและการซ่อนข้อผิดพลาดทั้งหมดทำให้ยากต่อการแก้ไข แต่ฉันก็ไม่คิดว่ามันยุติธรรมที่จะตัดสินโปสเตอร์สำหรับคำถามที่อ้างว้างนี้ถ้าคุณไม่ต้องเขียนงานที่น่าเกลียดเพราะลูกค้าของคุณอยู่ในโทรศัพท์ที่ทำให้เด็กในครรภ์ของคุณไม่ได้ทำงานกับไอทีมานานพอ
โจนาธาน dos Santos

7
นี่เป็นคำถามที่สมเหตุสมผลอย่างยิ่งและใช่ @icomrade - คุณพูดถูกเกี่ยวกับความเอื้ออาทรและการถากถางที่นี่ เป็นหนึ่งในลักษณะที่น่าสนใจน้อยของ StackOverflow ทั้งหมดที่กล่าวมาฉันขอแนะนำให้คุณจัดการกับคำเตือนบางอย่างที่คุณได้รับแม้ว่าคุณจะไม่สามารถทำได้ทั้งหมดก็ตาม
แขวนคอ

คำตอบ:


139

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

error_reporting = E_ALL

ถึง

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

หากคุณไม่สามารถเข้าถึง php.ini คุณสามารถใส่สิ่งนี้ไว้ในไฟล์. htaccess ของคุณ:

php_value error_reporting 30711

นี่คือค่า E_ALL (32767) และการลบค่า E_STRICT (2048) และ E_NOTICE (8)

ถ้าคุณไม่สามารถเข้าถึงไฟล์. htaccess หรือไม่ได้เปิดใช้งานคุณอาจต้องวางไว้ที่ด้านบนของส่วน PHP ของสคริปต์ใด ๆ ที่โหลดจากการเรียกเบราว์เซอร์:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

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


11
ฉันใช้ php 5.4.5 และฉันลองทำตามทั้งหมดข้างต้นแล้ว แต่ฉันไม่สามารถปิดการแจ้งเตือนที่เข้มงวดได้ :( มีความคิดอื่น ๆ อีกไหม
ro ko

2
คุณสามารถลองใส่ & ~ E_DEPRECATED ร่วมกับส่วนอื่น ๆ ใน error_reporting () คุณเห็นข้อความอะไร
David Stockton

4
@roko เป็นไปได้ไหมว่ารหัสของคุณกำลังลบล้างสิ่งนี้อยู่ที่ไหนสักแห่ง? ฉันยังคงเห็นข้อผิดพลาดที่เข้มงวดหลังจากปิดการใช้งานใน php.ini แล้วฉันก็รู้ว่ามันเป็นเพียงสำหรับบางเว็บไซต์เว็บไซต์ที่ใช้ Drupal ซึ่งมีการตั้งค่าเป็นรหัส
andrewtweber

1
@AndrewSpear นั่นแปลก ตามทฤษฎีแล้วการตั้งค่า error_reporting ควรส่งผลต่อข้อผิดพลาดที่แสดงทุกที่ที่แสดง การตั้งค่า display_errors ควรส่งผลต่อว่าคุณได้รับข้อผิดพลาดในผลลัพธ์ (ในหน้า PHP) หรือไม่และ error_log จะส่งผลต่อตำแหน่งที่ข้อผิดพลาดถูกเขียนลงในบันทึก หาก display_errors เปิดอยู่คุณจะเห็นข้อผิดพลาดเดียวกันบนหน้าจอเช่นเดียวกับในบันทึก
เดวิดสต็อกตัน

4
+1 สำหรับการตอบคำถามง่ายๆพร้อมคำตอบง่ายๆโดยไม่ต้องเปลี่ยนเป็น StackOverflow Smuglord ™
Joshua Pech

2

.htaccess php_value จะทำงานก็ต่อเมื่อคุณใช้ PHP Server API เป็นโมดูลของเว็บเซิร์ฟเวอร์ Apache ใช้ไวยากรณ์ของ IfModule:

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

หากคุณใช้ PHP Server API CGI / FastCGI ให้ใช้

ini_set('error_reporting', 30711);

หรือ

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

ในโค้ด PHP ของคุณหรือไฟล์กำหนดค่า PHP .user.ini | การปรับเปลี่ยน php.ini:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

บนโฮสต์เสมือนของคุณระดับเซิร์ฟเวอร์


1

มันใช้ได้ผลสำหรับฉันเมื่อฉันตั้ง error_reporting ในสองที่ในเวลาเดียวกัน

ที่ไหนสักแห่งในโค้ด PHP

ini_set('error_reporting', 30711);


และในไฟล์. htaccess

php_value error_reporting 30711

สิ่งเดียวที่ใช้งานได้สำหรับฉันโดยไม่ต้องเข้าถึง php.ini อีกอย่างหนึ่งข้างต้นไม่ทำงานด้วยตัวเองส่งคืนข้อผิดพลาด 500 เท่านั้น พร้อมกันทั้งคู่ !!!
Jamie Hutber

1

หากคุณต้องการปิดการใช้งาน E_DEPRACATED ด้วยให้ใช้:

php_value error_reporting 22527

ในกรณีของฉัน CMS Made Simple ถูกร้องเรียนว่า "E_STRICT ถูกเปิดใช้งานใน error_reporting" และ "E_DEPRECATED ถูกเปิดใช้งาน" การเพิ่มหนึ่งบรรทัดใน. htaccess ช่วยแก้ปัญหาการกำหนดค่าผิดทั้งสองแบบ


0

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


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