2009-10-29 32 views
49

Tôi nhận được thông báo dự kiến ​​và cảnh báo và muốn tắt chúng trên tệp php của tôi. lỗi là:Tắt cảnh báo và lỗi trên php/mysql

Warning: fsockopen() 

và thông báo là:

Notice: A non well formed numeric value encountered in 

Tôi đang lên kế hoạch để sử dụng cron cho kịch bản php này và không muốn nhận được bất kỳ lỗi hoặc thông báo đăng nhập bất cứ nơi nào.

+4

Nếu bạn không muốn lỗi do cron gửi qua thư, bạn có thể trỏ đầu ra của nó tại '/ dev/null'. Tuy nhiên, các lỗi thường có một lý do - bạn có lẽ muốn biết khi nào cron script của bạn bị hỏng! Hãy thử xử lý các lỗi một cách duyên dáng. – ceejayoz

+0

Một nơi nào đó liên quan: http://stackoverflow.com/questions/4330494/preventing-warnings-from-fsockopen – trante

Trả lời

137

Khi bạn chắc chắn kịch bản của bạn là hoàn toàn làm việc, bạn có thể thoát khỏi cảnh báo và thông báo như thế này: Đặt dòng này vào đầu script php của bạn:

error_reporting(E_ERROR); 

Trước đó, khi làm việc trên của bạn kịch bản, tôi sẽ khuyên bạn để gỡ lỗi đúng kịch bản của bạn để tất cả các thông báo hoặc cảnh báo biến mất từng cái một. Vì vậy, đầu tiên bạn nên thiết lập nó như tiết càng tốt với:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

UPDATE: làm thế nào để đăng nhập lỗi thay vì hiển thị chúng Như đã đề cập trong các ý kiến, các giải pháp tốt hơn là để đăng nhập lỗi vào một tập tin như vậy chỉ có php phát triển thấy các thông báo lỗi, không phải là người dùng. Có thể triển khai thực hiện thông qua tệp .htaccess, hữu ích nếu bạn không có quyền truy cập vào tệp php.ini (source).

# supress php errors 
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 
# enable PHP error logging 
php_flag log_errors on 
php_value error_log /home/path/public_html/domain/PHP_errors.log 
# prevent access to PHP error log 
<Files PHP_errors.log> 
Order allow,deny 
Deny from all 
Satisfy All 
</Files> 
+6

Đừng làm điều này. Ngăn chặn tất cả các lỗi là một ý tưởng kinh khủng. – ceejayoz

+31

bạn đang nói như đang đọc một câu thần chú. Trong trường hợp sử dụng cụ thể này, đó là chính xác những gì người dùng muốn. Nếu anh ta yêu cầu một hệ thống đăng nhập, anh ta sẽ yêu cầu nó. – pixeline

+4

Tôi đồng ý với cả ceejayoz và pixeline. Tuy nhiên, error_reporting (0) chỉ nên được thiết lập như một biện pháp bảo mật trên môi trường sản xuất để thông tin quan trọng không bị rò rỉ nhầm lẫn với người dùng độc hại. Sử dụng error_reporting (0) để 'bỏ qua lỗi' mang một nguy cơ cao dẫn đến những điều xấu. Tôi biết đó là những gì tác giả yêu cầu, nhưng tôi sẽ đề nghị chống lại nó. –

2

bạn có thể đặt loại báo cáo lỗi bạn cần trong php.ini hoặc bằng cách sử dụng hàm error_reporting() ở đầu tập lệnh.

18

Chức năng đặt trước có biểu tượng '@' để chặn một số lỗi nhất định, Trái ngược với việc tắt TẮT báo cáo lỗi.

More Info: http://php.net/manual/en/language.operators.errorcontrol.php

PHP hỗ trợ điều hành kiểm soát một lỗi: những lúc đăng nhập (@). Khi được thêm vào một biểu thức trong PHP, bất kỳ thông báo lỗi nào có thể được tạo bởi biểu thức đó sẽ bị bỏ qua.

@fsockopen();

+0

đây thường là giải pháp tốt hơn cho mã trong sản xuất, IMHO – billrichards

+1

Có thể, "* có thể *", cho một chức năng, tuy nhiên việc điền các tập lệnh của bạn với điều này là yêu cầu sự cố sau này khi * something * không hoạt động và nhật ký lỗi của bạn trống. Cách tốt nhất là đặt trường hợp/chuyển đổi để cho phép bật và tắt "hiển thị" các lỗi thực sự nhanh chóng. Sau đó, trực tiếp họ đang tắt, dev/thử nghiệm có thể được trên. Dù bằng cách nào, việc đăng nhập vào tệp nhật ký lỗi là (gần) luôn được thông báo – James

14

Luôn luôn hiển thị lỗi trên máy chủ thử nghiệm. Không bao giờ hiển thị lỗi trên máy chủ sản xuất.

Viết tập lệnh để xác định xem trang có trên máy chủ cục bộ, thử nghiệm hoặc đang hoạt động hay không và đặt trạng thái $ thành "local", "testing" hoặc "live". Sau đó:

if($state == "local" || $state == "testing") 
{ 
ini_set("display_errors", "1"); 
error_reporting(E_ALL & ~E_NOTICE); 
} 
else 
{ 
error_reporting(0); 
} 
2

Nếu bạn không thể nhận được file php.ini của bạn đối với một số lý do, vô hiệu hóa các lỗi để stdout (display_errors) trong một.file .htaccess trong thư mục nào bằng cách thêm dòng sau:

php_flag display_errors off

thêm vào đó, bạn có thể thêm ghi lỗi vào một tệp:

php_flag log_errors on

13

PHP error_reporting tham khảo:

// Turn off all error reporting 
error_reporting(0); 

// Report simple running errors 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 

// Reporting E_NOTICE can be good too (to report uninitialized 
// variables or catch variable name misspellings ...) 
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

// Report all errors except E_NOTICE 
// This is the default value set in php.ini 
error_reporting(E_ALL^E_NOTICE); 

// Report all PHP errors (see changelog) 
error_reporting(E_ALL); 

// Report all PHP errors 
error_reporting(-1); 

// Same as error_reporting(E_ALL); 
ini_set('error_reporting', E_ALL); 
+0

báo cáo lỗi sẽ bị tắt nhưng báo cáo của nó sẽ được lưu trữ trong tệp nhật ký trong thư mục. làm thế nào để ngăn chặn php để làm cho các tập tin đăng nhập? tnx –

+0

@MehdiJ: để ngăn chặn PHP từ lỗi đăng nhập trong ** error_log ** thêm mã này 'ini_set ('log_errors', 'off');' –

Các vấn đề liên quan