2012-02-17 35 views

Trả lời

9

Đó là không thể để xử lý các lỗi chết người sử dụng một lỗi xử lý tùy chỉnh.

Giải pháp tốt nhất chỉ đơn giản là cho phép ghi nhật ký lỗi (ví dụ: syslog) trong php.ini của bạn và sau đó sử dụng công cụ như logcheck/logsentry để nhận email thông thường về các mục nhật ký hệ thống khác thường.
Thay vì syslog PHP cũng có thể ghi lỗi vào một tệp - chỉ cần xem xét các tùy chọn ghi nhật ký lỗi của php.ini.

log_errors = On 
error_log = syslog 
error_log = /path/to/some/folder/phperrors.log 

Rõ ràng bạn chỉ muốn sử dụng một trong số error_log dòng.

+0

làm thế nào tôi có thể cho phép đăng nhập lỗi trong php.ini? – Hamidreza

+0

Bạn sẽ có thể xử lý một lỗi nghiêm trọng với register_shutdown_function() –

+0

@ SebastiánGrignoli: Không có cách nào sạch sẽ để phát hiện nếu có lỗi trong hàm đó. – ThiefMaster

0

Cái gì như:

if(!method_exists($obj, 'method')){ 

    $db->log('What you want to log'); //log in your DB 
    error_log('message');//Write to php's error log 

} 
+0

Tôi có một xử lý lỗi để xử lý lỗi của tôi nhưng một số lỗi như trên, tôi không thể xử lý họ hoặc đăng nhập. – Hamidreza

+0

Ugh, tôi khá chắc chắn anh ấy muốn một giải pháp chung. – ThiefMaster

+0

Tôi không biết lỗi này xảy ra ở đâu. tôi cần phải đăng nhập tất cả các loại lỗi – Hamidreza

1

Bạn có thể có tất cả cơ sở của bạn lớp thuộc về một siêu lớp sử dụng method overloading:

class Base 
{ 
    public function __call($name) 
    { 
     MyLog::logError(...); 
     trigger_error("Function ".get_class($this)."::$name doesn't exist", 
      E_USER_ERROR); 
    } 
} 

Nỗ lực để gọi các phương pháp không tồn tại các lớp học có nguồn gốc từ Base sẽ được cuối cùng xử lý bởi Base::__call(). Đối với các phương pháp tĩnh, tương ứng, có __callStatic() (như của PHP 5.3).

6

Có cách để đối phó với nhiệm vụ của bạn và thực tế bạn CÓ THỂ đặt trình xử lý lỗi tùy chỉnh về lỗi FATAL.

Bạn có thể làm theo cách này:

ini_set('error_reporting', E_ERROR); 
register_shutdown_function("fatal_handler"); 
function fatal_handler() { 
    $error = error_get_last(); 
    //Do whatever you want with this error, for example: 
    YourDBApplicationLayer::writeFatal($error); 
} 
0

bây giờ nó thể trong PHP7

try { 

    ggggg(); // <---- make fatal error 

}catch(Error $e){ 

    var_dump($e); 

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