Vô hiệu hóa các tiêu chuẩn nghiêm ngặt trong PHP 5.4


95

Tôi hiện đang chạy một trang web trên php 5.4, trước đó tôi đã chạy trang web của mình trên 5.3.8. Thật không may, php 5.4 kết hợp E_ALLE_STRICT, có nghĩa là cài đặt trước đó của tôi cho error_reportingkhông hoạt động bây giờ. Giá trị trước đây của tôi là E_ALL & ~E_NOTICE & ~E_STRICTTôi có nên bật từng giá trị một không?

Tôi có quá nhiều lỗi và các tệp chứa quá nhiều mã để tôi sửa.


11
Lời khuyên ... Hãy sửa mã nếu không các lỗi sẽ ngày càng tốt hơn và khó gỡ lỗi hơn
Baba

7
s / Thật không may / Thật may mắn
NikiC

96
Cảm ơn vì lời khuyên, tuy nhiên tôi thiếu kiến ​​thức cần thiết để viết lại toàn bộ plugin jfusion phpbb3. cảm ơn vì đã chiếu cố.
icomrade

12
Tôi đồng ý với bạn bè của chúng tôi rằng bạn nên thử và sửa lỗi sai, họ có thể đến cắn mắt cá chân của bạn, cũng ẩn tất cả các lỗi nên khó gỡ lỗi. Nhưng tôi cũng không nghĩ sẽ công bằng khi đánh giá người đăng cho câu hỏi cô đơn này, nếu bạn chưa bao giờ phải viết một số tác phẩm ghê tởm vì khách hàng của bạn đang nói chuyện điện thoại với những đứa con chưa chào đời của bạn mà bạn đã không làm việc với CNTT từ lâu
Jonathan dos Santos

7
Đây là một câu hỏi hoàn toàn hợp lý, và vâng @icomrade - bạn nói đúng về sự trịch thượng và châm biếm ở đây. Đó là một trong những đặc điểm kém hấp dẫn của StackOverflow. Tất cả đã nói, tôi khuyên bạn nên giải quyết ít nhất một số cảnh báo mà bạn đang nhận được - ngay cả khi bạn không thể thực hiện tất cả.
halfer

Câu trả lời:


139

Như những người bình luận đã nói, lựa chọn tốt nhất là sửa lỗi, nhưng với thời gian hoặc kiến ​​thức hạn chế, điều đó không phải lúc nào cũng khả thi. Trong thay đổi php.ini của bạn

error_reporting = E_ALL

đến

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Nếu bạn không có quyền truy cập vào php.ini, bạn có thể đặt nó vào tệp .htaccess của mình:

php_value error_reporting 30711

Đây là giá trị E_ALL (32767) và việc xóa các giá trị E_STRICT (2048) và E_NOTICE (8).

Nếu bạn không có quyền truy cập vào tệp .htaccess hoặc nó chưa được bật, có thể bạn sẽ cần đặt tệp này ở đầu phần PHP của bất kỳ tập lệnh nào được tải từ lệnh gọi trình duyệt:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

Một trong số đó sẽ giúp bạn có thể sử dụng phần mềm. Tuy nhiên, các thông báo và nội dung nghiêm ngặt là chỉ báo về các vấn đề hoặc các vấn đề tiềm ẩn và bạn có thể thấy một số mã hoạt động không chính xác trong PHP 5.4.


11
Tôi đang sử dụng php 5.4.5 và tôi đã thử tất cả các cách trên nhưng tôi không thể tắt thông báo nghiêm ngặt :( có ý kiến ​​nào khác không?
ro ko

2
Bạn có thể thử nhập & ~ E_DEPRECATED cùng với các phần khác trong error_reporting (). Bạn đang thấy tin nhắn nào?
David Stockton

4
@roko Có thể mã của bạn đang ghi đè điều này ở đâu đó không? Tôi vẫn còn nhìn thấy lỗi nghiêm ngặt sau khi vô hiệu hóa nó trong php.ini, sau đó tôi nhận ra đó là chỉ dành cho một số trang web, những người sử dụng Drupal, trong đó giá trị được là thiết lập trong mã
andrewtweber

1
@AndrewSpear Thật kỳ lạ. Về lý thuyết, cài đặt error_reporting sẽ ảnh hưởng đến các lỗi được hiển thị ở bất kỳ nơi nào chúng được hiển thị. Cài đặt display_errors sẽ ảnh hưởng đến việc bạn có gặp lỗi trong đầu ra (trong các trang PHP) hay không và error_log sẽ ảnh hưởng đến vị trí ghi lỗi vào nhật ký. Nếu display_errors được bật thì bạn sẽ thấy các lỗi tương tự trên màn hình như trong nhật ký.
David Stockton

4
+1 để trả lời một câu hỏi đơn giản với một câu trả lời đơn giản mà không cần chuyển thành StackOverflow Smuglord ™.
Joshua Pech,

2

.htaccess php_value chỉ hoạt động nếu bạn sử dụng PHP Server API làm mô-đun của máy chủ Web Apache. Sử dụng cú pháp IfModule:

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

Nếu bạn sử dụng PHP Server API CGI / FastCGI, hãy sử dụng

ini_set('error_reporting', 30711);

hoặc là

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

trong mã PHP của bạn hoặc các tệp cấu hình PHP .user.ini | sửa đổi php.ini:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

trên máy chủ ảo của bạn, cấp máy chủ.


1

Nó hoạt động với tôi, khi tôi đặt error_reporting ở hai nơi cùng lúc

ở một nơi nào đó trong mã PHP

ini_set('error_reporting', 30711);


và trong tệp .htaccess

php_value error_reporting 30711

Chỉ có điều hoạt động với tôi mà không có quyền truy cập vào php.ini, một thứ khác ở trên sẽ không tự hoạt động, chỉ trả về lỗi 500. Cả hai cùng nhau cưng !!!
Jamie Hutber

1

Nếu bạn cũng cần tắt E_DEPRACATED, hãy sử dụng:

php_value error_reporting 22527

Trong trường hợp của tôi, CMS Made Simple đã khiếu nại "E_STRICT được bật trong error_reporting" cũng như "E_DEPRECATED được bật". Thêm một dòng đó vào .htaccess đã giải quyết được cả hai cấu hình sai.


0

Lưu ý, bạn có thể cần khởi động lại LAMP, Apache hoặc bất kỳ thứ gì bạn đang sử dụng để làm cho điều này có hiệu lực. Racked não của chúng tôi trong một thời gian cho điều này, dường như không ảnh hưởng gì cho đến khi các dịch vụ được khởi động lại, có lẽ là do trang web đang lưu vào bộ nhớ đệm.


Không. Đó là vì Apache cần tải lại cài đặt cho PHP. Điều này chỉ được thực hiện AFAIK khi dịch vụ bắt đầu.
svin83
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.