2010-05-05 28 views
5

Tôi đang viết dịch vụ ghi nhật ký lỗi sẽ được tích hợp vào các trang web đang chạy trên máy chủ của tôi, sẽ gửi email cho tôi các lô lỗi, v.v.Ghi nhật ký lỗi phân tích cú pháp/lỗi trong PHP5

Vì vậy, tôi đã cố gắng tìm ra nếu có một cách để xử lý các lỗi chết người và phân tích cú pháp, tuy nhiên không sử dụng các thủ thuật để xử lý nó trong mã PHP (bộ đệm đầu ra, chức năng tắt máy). Tôi khá vui khi viết một số mã C hoặc một cái gì đó để xử lý nó bên ngoài mã PHP của tôi. Tôi cũng muốn phát hành chuyển hướng nếu có thể (các trang web của tôi sử dụng bộ đệm đầu ra để không có bất kỳ tiêu đề nào được gửi).

Tôi khá chắc chắn điều này có thể được thực hiện với một mô-đun PHP, nhưng tôi chưa bao giờ viết một và không biết bắt đầu từ đâu.

Trả lời

3

Không có cách nào để bắt lỗi gây tử vong hoặc phân tích cú pháp trong PHP. Nhưng ..

Trong 5.2, họ đã thêm error_get_last(). Bạn có thể gọi nó bên trong một chức năng tắt máy và thực hiện ghi nhật ký. Một chưa được kiểm tra 5.3 ví dụ cho bắn ra một email khi có một lỗi nghiêm trọng:

<?php 
register_shutdown_function(function(){ 
    $err = error_get_last(); 
    if(is_array($err) && array_key_exists('type', $err) $err['type'] > 0 
     && ($err['type'] == E_ERROR || $err['type'] == E_PARSE) { 
     error_log("Oh noes, a fatal: " . var_export($err, true), 1, '[email protected]'); 
    } 
}); 

(. Bạn sẽ cần phải sử dụng một callback nếu bạn không phải trên 5.3 và không thể làm chức năng ẩn danh)

Thật không may bởi vì điều này được xử lý trong một chức năng tắt máy, rất có thể là các tiêu đề đã được phát ra và bạn có thể không cung cấp bất kỳ điều gì hữu ích cho người dùng. Tuy nhiên, điều này phụ thuộc vào phần còn lại của ứng dụng, vì vậy nó có thể làm việc cho bạn. Hãy thử nó và tìm hiểu!

+0

Tôi đã giải thích rõ ràng trong câu hỏi của mình Tôi không cố gắng nắm bắt các lỗi bằng cách sử dụng các thủ thuật PHP đó, tôi chỉ cần đăng nhập và xử lý chúng theo một cách nào đó. Sử dụng một mô-đun PHP có vẻ là cách có khả năng nhất, nhưng tôi không thể tìm thấy nhiều thông tin về việc xử lý lỗi trong các mô-đun PHP. – PeterBelm

+0

Tôi cũng làm rõ trong câu trả lời của tôi rằng bạn không thể bắt được, nhưng bạn có thể đăng nhập. :) – Charles

+0

đã làm việc cho tôi - cũng cú pháp mã là sai –

1

Theo mặc định, tất cả các lỗi được chuyển tới nhật ký lỗi máy chủ web nhưng bạn có thể thay đổi nó bằng php.ini bằng cách chỉ định đường dẫn đến tệp của riêng bạn via error_log setting. Vì vậy, những gì còn lại để làm là viết một số tập lệnh/ứng dụng riêng biệt để phân tích cú pháp/gửi dữ liệu/cắt bớt tệp nhật ký mỗi ngày/bất cứ điều gì và chạy nó dưới dạng cron job.

+0

Vấn đề duy nhất với điều này là tôi sẽ không thể phát hành chuyển hướng. Tôi nghĩ rằng với một mô-đun PHP tôi sẽ có thể đạt được điều này. – PeterBelm

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