Khi tiêu đề cho biết, tôi đã đặt độ dài tối đa cho nhật ký lỗi php, nhưng dường như vẫn tiếp tục phát triển lớn hơn nhiều so với 1024. Tôi đang sử dụng php.ini đúng, tôi đã khởi động lại apache, vv Các quyền trên nhật ký php là 666.log_errors_max_len = 1024 trong php.ini, nhưng nhật ký php tiếp tục tăng
Trả lời
Như là điển hình cho PHP, nó không thực sự rõ ràng từ tên của thiết lập cấu hình, hoặc thậm chí documentation, nhưng chỉ thị này áp dụng cho độ dài của thông báo nhật ký đơn , không phải là toàn bộ thời lượng của tệp nhật ký.
Sử dụng logrotate hoặc công cụ tương tự cho những gì bạn đang cố gắng thực hiện.
cảm ơn! Điều đó rất hữu ích –
đã kích hoạt Pascal's initial thought:
log_errors_max_len nguyên
Đặt độ dài tối đa của log_errors theo byte. Trong thông tin error_log về nguồn được thêm vào. Mặc định là 1024 và 0 cho phép không áp dụng bất kỳ độ dài tối đa nào là . Độ dài này là được áp dụng cho các lỗi đã ghi, hiển thị lỗi và cũng với $ php_errormsg. Khi một số nguyên được sử dụng, giá trị là được tính theo byte. Ký hiệu viết tắt, như được mô tả trong Câu hỏi thường gặp này, cũng có thể được sử dụng .
Hướng dẫn không nêu rõ là log_errors_max_len
đề cập đến chỉ đối với "nội dung" của thông báo lỗi. Điều này có nghĩa là một dòng lỗi sẽ vẫn lớn hơn so với độ dài bạn đặt ở đây.
Để chứng minh, chạy mã này sử dụng log_errors_max_len=0
(0
nghĩa không giới hạn) và log_errors=1
:
<?php
// Set your server to these settings:
// error_reporting=-1
// date.timezone=utc ;to suppress the error message "It is not safe to rely on the system's timezone settings."...
echo$msg1; echo$msg2;
Các byte gửi đến error_log
sẽ là:
[15-Jul-2015 01:23:45 utc] PHP Notice: Undefined variable: msg1 in C:\index.php on line 5
[15-Jul-2015 01:23:45 utc] PHP Notice: Undefined variable: msg2 in C:\index.php on line 5
Tiếp theo, kiểm tra mã cùng với log_errors_max_len=4
và log_errors=1
. (Hãy nhớ rằng phải khởi động lại máy chủ.) error_log
bây giờ sẽ là:
[15-Jul-2015 01:23:45 utc] PHP Notice: Unde in C:\index.php on line 5
[15-Jul-2015 01:23:45 utc] PHP Notice: Unde in C:\index.php on line 5
(Chú ý rằng thông báo lỗi của bạn được thêm vào phía trước với "[15-Jul-2015 01:23:45 utc] PHP Notice:
" và gắn với "in C:\index.php on line 1
", kết quả là một đường dài hơn những gì được thiết lập bởi log_errors_max_len
.)
Sự cố này xảy ra không chỉ với error_log
, mà còn với đầu ra máy chủ được gửi cho khách hàng. Để minh họa, hãy chạy cùng mã ở trên bằng cách sử dụng log_errors_max_len=4
, display_errors=1
, html_errors=0
, error_prepend_string="PPPP"
và error_append_string="AAAA"
.Kết quả gửi cho khách hàng là:
PPPP
Notice: Unde in C:\index.php on line 5
AAAAPPPP
Notice: Unde in C:\index.php on line 5
AAAA
Bây giờ chạy cùng mã sử dụng log_errors_max_len=4
, display_errors=1
, html_errors=1
, error_prepend_string="PPPP"
, và error_append_string="AAAA"
. (. error_prepend_string
và error_append_string
chỉ áp dụng cho các lỗi hiển thị, lỗi không đăng nhập) Kết quả gửi cho khách hàng là:
PPPP<br />
<b>Notice</b>: Unde in <b>C:\index.php</b> on line <b>5</b><br />
AAAAPPPP<br />
<b>Notice</b>: Unde in <b>C:\index.php</b> on line <b>5</b><br />
AAAA
Cũng lưu ý rằng các bài kiểm tra trên sẽ trả lại kết quả tương tự ngay cả khi bạn sử dụng ignore_repeated_errors=0
. Điều này cho thấy "lỗi lặp lại" được coi là trước thông báo lỗi bị cắt.
(Kết quả của bạn có thể khác nhau tùy thuộc vào SAPI sử dụng. Kiểm tra trên được thực hiện bằng php-5.6.7-Win32-VC11-x86 CLI trên chiến thắng 8.1.)
Chỉ vì tò mò, không chỉ thị này cấu hình tổng chiều dài của tập tin (mà làm cho ít ý nghĩa, như giá trị mặc định là 1024 byte), hoặc chỉ có chiều dài tối đa của một mục/một dòng? –
Có một số tham số cấu hình 'php.ini' hoạt động cùng nhau theo cách hơi trực quan. Trên hệ thống của bạn, các giá trị của 'log-errors' là gì: http://www.php.net/manual/en/errorfunc.configuration.php#ini.log-errors và' error-log' http: // www .php.net/manual/en/errorfunc.configuration.php # ini.error-log? – Asaph