Cách khắc phục lỗi đăng nhập CodeIgniter (PHP)


92

Tôi muốn lỗi khi đăng nhập PHP CodeIgniter. Làm cách nào để kích hoạt ghi nhật ký lỗi?

Tôi có một số câu hỏi:

  1. Tất cả các bước để ghi lỗi là gì?
  2. Tệp nhật ký lỗi được tạo như thế nào?
  3. Làm thế nào để đẩy thông báo lỗi vào tệp nhật ký (bất cứ khi nào xảy ra lỗi)?
  4. Làm thế nào để bạn gửi e-mail lỗi đó đến một địa chỉ email?

Câu trả lời:


180

CodeIgniter có một số chức năng ghi lỗi được tích hợp sẵn.

  • Làm cho thư mục / ứng dụng / nhật ký của bạn có thể ghi được
  • Trong /application/config/config.php đặt
    $config['log_threshold'] = 1;
    hoặc sử dụng một số cao hơn, tùy thuộc vào mức độ chi tiết bạn muốn trong nhật ký của mình
  • Sử dụng log_message('error', 'Some variable did not contain a value.');
  • Để gửi email, bạn cần mở rộng phương thức lớp CI_Exceptions cốt lõi log_exceptions(). Bạn có thể tự làm điều này hoặc sử dụng điều này . Thông tin thêm về mở rộng lõi tại đây

Xem http://www.codeigniter.com/user_guide/general/errors.html



Có bất kỳ tác động bảo mật nào cho việc này không?
Aakil Fernandes

Thao tác này kết xuất dữ liệu vào tệp php có tên tệp ở định dạng: log- [Ymd H: i: s] hoặc bất kỳ giá trị nào được đặt trên cấu hình khóa log_date_format được xác định trên tệp cấu hình của bạn. Miễn là bạn không đăng nhập / kết xuất dữ liệu nhạy cảm, nó sẽ khá an toàn. Tệp này có liên quan đến trang index.html theo mặc định nên rõ ràng là các tệp php được tạo sẽ không thể truy cập công khai- nhưng bạn sẽ không bao giờ biết. Đảm bảo có tất cả các biện pháp phòng ngừa này nếu bạn thay đổi thư mục ứng dụng / nhật ký mặc định.
Vincent Edward Gedaria Binua

7
Hãy ứng dụng / your / bản ghi thư mục có thể ghi <<< đó đã giúp tôi
user1312695

Khi tôi đặt "$ config ['log_threshold'] = 1;", tôi không nhận được bất kỳ nhật ký nào trong thư mục / application / logs của mình. Tuy nhiên, khi tôi đặt "$ config ['log_threshold'] = 3", một tệp nhật ký xuất hiện. Hi vọng điêu nay co ich. Cảm ơn bạn! Sự thanh bình.
masarapmabuhay

25

Để chỉ cần đặt một dòng trong nhật ký lỗi của máy chủ, hãy sử dụng hàm error_log () của PHP. Tuy nhiên, phương pháp đó sẽ không gửi e-mail.

Đầu tiên, để kích hoạt lỗi:

trigger_error("Error message here", E_USER_ERROR);

Theo mặc định, điều này sẽ đi vào tệp nhật ký lỗi của máy chủ. Xem chỉ thị ErrorLog cho Apache. Để đặt tệp nhật ký của riêng bạn:

ini_set('error_log', 'path/to/log/file');

Lưu ý rằng tệp nhật ký bạn chọn phải đã tồn tại và có thể ghi được bởi quy trình máy chủ. Cách đơn giản nhất để làm cho tệp có thể ghi là đặt người dùng máy chủ làm chủ sở hữu của tệp. (Người dùng máy chủ có thể không là ai, _www, apache hoặc thứ gì khác, tùy thuộc vào phân phối hệ điều hành của bạn.)

Để gửi e-mail lỗi, bạn cần thiết lập trình xử lý lỗi tùy chỉnh:

function mail_error($errno, $errstr, $errfile, $errline) {
  $message = "[Error $errno] $errstr - Error on line $errline in file $errfile";
  error_log($message); // writes the error to the log file
  mail('you@yourdomain.com', 'I have an error', $message);
}
set_error_handler('mail_error', E_ALL^E_NOTICE);

Vui lòng xem tài liệu PHP liên quan để biết thêm thông tin.


3

Đồng thời đảm bảo rằng bạn đã cho phép bộ mã ghi loại thông báo bạn muốn trong tệp cấu hình.

I E $config['log_threshold'] = [log_level ranges 0-4];


1

Liên quan đến câu hỏi phần 4 Làm cách nào để gửi email lỗi đó đến một địa chỉ email? Hàm error_log cũng có email đích. http://php.net/manual/en/ Chức năng.error-log.php

Rất tiếc, ở đây tôi đã tìm thấy một ví dụ cho thấy cách sử dụng. Gửi thông báo lỗi qua email bằng error_log ()

error_log($this->_errorMsg, 1, ADMIN_MAIL, "Content-Type: text/html; charset=utf8\r\nFrom: ".MAIL_ERR_FROM."\r\nTo: ".ADMIN_MAIL);

0
In config.php add or edit the following lines to this:
------------------------------------------------------
$config['log_threshold'] = 4; // (1/2/3)
$config['log_path'] = '/home/path/to/application/logs/';

Run this command in the terminal:
----------------------------------
sudo chmod -R 777 /home/path/to/application/logs/
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.