Một ứng dụng PHP có thể tạo ra nhiều mức thu nhập và lỗi khác nhau trong quá trình thực thi. Có thể thấy những lỗi này là điều cần thiết cho các nhà phát triển đang cố gắng khắc phục sự cố ứng dụng hoạt động sai. Tuy nhiên, các nhà phát triển thường gặp sự cố khi cố gắng hiển thị lỗi từ các ứng dụng PHP của họ. Thay vào đó, ứng dụng của họ chỉ âm thầm thất bại
Nếu bạn gặp sự cố với ứng dụng web PHP của mình và cần hiển thị tất cả các lỗi và cảnh báo, bạn đang ở đúng nơi. Trong hướng dẫn này, chúng tôi sẽ giải thích tất cả các cách khác nhau để bật lỗi và cảnh báo PHP. Chúng tôi cũng sẽ thảo luận về cách ghi lỗi vào tệp nhật ký và thậm chí thu thập chúng thông qua tính năng theo dõi lỗi của Truy xuất
Mẹo. Tìm lỗi ứng dụng và các vấn đề về hiệu suất ngay lập tức với Stackify Retrace Khắc phục sự cố và tối ưu hóa mã của bạn thật dễ dàng với các lỗi tích hợp, nhật ký và thông tin chi tiết về hiệu suất cấp mã
Nhanh chóng hiển thị tất cả các lỗi PHP
Cách nhanh nhất để hiển thị tất cả lỗi và cảnh báo php là thêm những dòng này vào tệp mã PHP của bạn
ini_set['display_errors', 1]; ini_set['display_startup_errors', 1]; error_reporting[E_ALL];
Chính xác những dòng mã này làm gì?
Hàm ini_set sẽ cố gắng ghi đè cấu hình được tìm thấy trong tệp ini PHP của bạn
display_errors và display_startup_errors chỉ là hai trong số các lệnh có sẵn. Chỉ thị display_errors sẽ xác định xem các lỗi sẽ được hiển thị hay ẩn đối với người dùng. Thông thường, nên tắt chỉ thị dispay_errors sau khi phát triển
Tuy nhiên, display_startup_errors là một lệnh riêng vì display_errors không xử lý các lỗi sẽ gặp phải trong trình tự khởi động của PHP. Danh sách các lệnh có thể bị ghi đè bởi chức năng ini_set được tìm thấy trong tài liệu chính thức
Thật không may, hai lệnh này sẽ không thể hiển thị các lỗi phân tích cú pháp như thiếu dấu chấm phẩy hoặc thiếu dấu ngoặc nhọn. Trong trường hợp này, cấu hình PHP ini phải được sửa đổi
Định cấu hình PHP. ini để hiển thị tất cả các lỗi
Nếu thêm một số lỗi mã PHP không hiển thị trong trình duyệt trong quá trình thử nghiệm, thì cấu hình PHP ini có một số lệnh bổ sung để xử lý lỗi này
display_errors = on
Lệnh display_errors phải được đặt thành “on” trong tệp ini PHP. Điều này sẽ hiển thị tất cả các lỗi bao gồm lỗi cú pháp hoặc lỗi phân tích cú pháp không thể hiển thị bằng cách chỉ gọi hàm ini_set trong mã PHP. Có thể tìm thấy tệp ini PHP trong đầu ra được hiển thị của hàm phpinfo[] và được gắn nhãn là tệp cấu hình đã tải. Chỉ thị này trong cấu hình ini phải được đặt thành tắt, nếu ứng dụng web đang được sản xuất
Hiển thị lỗi PHP qua. cấu hình htaccess
Các nhà phát triển thường có quyền truy cập vào các tệp thư mục. Lệnh hiển thị lỗi PHP cũng có thể được bật hoặc tắt bằng cách sử dụng. htaccess nằm trong thư mục gốc hoặc thư mục chung của dự án
php_flag display_startup_errors on php_flag display_errors on
Tương tự như những gì sẽ được thêm vào mã PHP để hiển thị lỗi PHP,. htaccess cũng có chỉ thị cho display_startup_errors và display_errors. Ưu điểm của việc hiển thị hoặc vô hiệu hóa các thông báo lỗi theo cách này là quá trình phát triển và sản xuất có thể có các thông báo khác nhau. htaccess, trong đó quá trình sản xuất ngăn chặn việc hiển thị lỗi
Tùy thuộc vào tệp bạn có quyền truy cập và cách bạn triển khai cũng như cấu hình máy chủ, bạn có thể định cấu hình display_errors trong. htaccess hoặc PHP của bạn. tập tin ini. Nhiều nhà cung cấp dịch vụ lưu trữ sẽ không cho phép bạn sửa đổi PHP của mình. ini để kích hoạt display_errors
bên trong. htaccess, nhật ký lỗi tùy chỉnh cũng có thể được bật miễn là thư mục nhật ký hoặc tệp nhật ký có thể ghi được bởi máy chủ web. Tệp nhật ký có thể là một đường dẫn tương đối đến nơi. htaccess được đặt hoặc nó có thể là một đường dẫn tuyệt đối, chẳng hạn như /var/www/html/website/public/logs
php_value error_log logs/all_errors.log
Kích hoạt cảnh báo và thông báo chi tiết
Đôi khi, những cảnh báo tưởng như không ảnh hưởng đến ứng dụng ngay từ đầu lại gây ra một số lỗi nghiêm trọng trong một số điều kiện nhất định. Những cảnh báo này phải được khắc phục vì điều này có nghĩa là ứng dụng sẽ không chạy bình thường trong một số tình huống nhất định. Trong trường hợp những cảnh báo này gây ra nhiều lỗi, thì sẽ thực tế hơn nếu ẩn lỗi và chỉ hiển thị thông báo cảnh báo là gì
error_reporting[E_WARNING];
Đối với nhà phát triển, hiển thị cảnh báo và ẩn lỗi chỉ đơn giản như thêm một dòng mã. Để hiển thị các cảnh báo và thông báo, tham số cho chức năng báo lỗi sẽ là “E_WARNING. E_NOTICE”. Hàm error_reporting có thể chấp nhận các tham số E_ERROR, E_WARNING, E_PARSE và E_NOTICE dưới dạng toán tử bitwise. Để báo cáo tất cả các lỗi ngoại trừ các thông báo, thì tham số là “E_ALL & ~E_NOTICE” trong đó E_ALL là viết tắt của tất cả các tham số có thể có của hàm error_reporting
Chuyên sâu Với hàm error_reporting[]
Hàm báo cáo lỗi là một hàm PHP tích hợp cho phép các nhà phát triển kiểm soát lỗi nào và bao nhiêu lỗi sẽ được hiển thị trong ứng dụng. Hãy nhớ rằng, cấu hình PHP ini có một chỉ thị error_reporting sẽ được thiết lập bởi chức năng này trong thời gian chạy
error_reporting[0];
Để xóa tất cả các lỗi, cảnh báo, thông báo phân tích cú pháp và thông báo, tham số sẽ được chuyển đến hàm error_reporting bằng 0. Sẽ không thực tế nếu có dòng mã này trong mỗi tệp PHP. Sẽ tốt hơn nếu tắt các thông báo báo cáo trong tệp ini PHP hoặc trong. htaccess
error_reporting[E_NOTICE];
PHP cho phép sử dụng biến ngay cả khi không khai báo. Đây không phải là một thông lệ tiêu chuẩn vì các biến không được khai báo sẽ gây ra sự cố cho ứng dụng khi nó được sử dụng trong các vòng lặp và điều kiện. Đôi khi, điều này cũng xảy ra do biến được khai báo có cách viết khác với biến được sử dụng cho điều kiện hoặc vòng lặp. Khi E_NOTICE được truyền trong hàm error_reporting, thì các biến không được khai báo này sẽ được hiển thị trong ứng dụng web
error_reporting[E_ALL & ~E_NOTICE];
Chức năng báo lỗi cho phép bạn lọc những lỗi nào có thể hiển thị. Ký tự “~” có nghĩa là “không” hoặc “không” nên tham số ~E_NOTICE có nghĩa là không hiển thị thông báo. Lưu ý “&” và “. ” ký tự ở giữa các tham số có thể. Ký tự “&” dành cho “true for all”, trong khi ký tự “. ” ký tự đại diện cho một trong hai miễn là nó đúng. Hai ký tự này có cùng ý nghĩa trong điều kiện PHP OR và AND
________số 8Ba dòng mã này thực hiện chính xác như nhau, nó sẽ hiển thị tất cả các lỗi PHP. error_reporting[E_ALL] được các nhà phát triển sử dụng rộng rãi nhất để hiển thị thông báo lỗi vì nó dễ đọc và dễ hiểu hơn
Ghi lỗi PHP vào tệp bằng hàm error_log[]
Trong quá trình sản xuất, thông báo lỗi không được hiển thị cho người dùng cuối, nhưng thông tin này vẫn phải được ghi lại cho mục đích truy tìm. Cách tốt nhất để ghi lại các thông báo lỗi này trên ứng dụng web sản xuất là lưu trữ nó trong tệp nhật ký
Một cách dễ dàng để sử dụng các tệp nhật ký là sử dụng hàm error_log, hàm này chấp nhận bốn tham số. Tham số bắt buộc duy nhất là tham số đầu tiên, chứa thông tin chi tiết về lỗi hoặc nội dung sẽ được ghi lại. Loại, đích và tiêu đề đều là các tham số tùy chọn cho chức năng này
error_log["There is something wrong!", 0];
Tham số loại, nếu không được xác định, sẽ là 0 theo mặc định, có nghĩa là thông tin nhật ký này sẽ được thêm vào bất kỳ tệp nhật ký nào được xác định trong máy chủ web
display_errors = on0
Tham số loại 1 sẽ gửi email nhật ký lỗi được chỉ định trong tham số thứ ba. Để làm cho tính năng này hoạt động, ini PHP phải có cấu hình SMTP phù hợp để có thể gửi email. Các chỉ thị ini SMTP này bao gồm máy chủ, loại mã hóa, tên người dùng, mật khẩu và cổng. Loại báo cáo lỗi này được khuyến khích để ghi nhật ký hoặc thông báo các lỗi cần được sửa ngay khi tìm thấy
display_errors = on1
Để đăng nhập tin nhắn trong một tệp riêng biệt được xác định bởi cấu hình của máy chủ web, thì phải sử dụng loại 3. Tham số thứ ba sẽ đóng vai trò là vị trí của tệp nhật ký và phải được ghi bởi máy chủ web. Vị trí của tệp nhật ký có thể là đường dẫn tương đối đến nơi mã này được gọi hoặc đường dẫn tuyệt đối
Ghi nhật ký lỗi PHP thông qua cấu hình máy chủ web
Để tránh thay đổi các thông số trong. htaccess hoặc thêm một số dòng trong mã PHP để hiển thị lỗi, thì cách tốt nhất để ghi lại lỗi là xác định nó trong tệp cấu hình máy chủ web
display_errors = on2
Đối với Apache, các tệp này phải được thêm vào máy chủ ảo của trang web hoặc ứng dụng cụ thể, thường nằm trong thư mục có sẵn trang web cho Ubuntu hoặc tệp httpd-vhosts trong Windows
display_errors = on3
Đối với nginx, tương tự như Apache, lệnh chỉ được gọi là error_log. Đối với cả máy chủ web Apache và nginx, các tệp nhật ký phải được máy chủ web ghi được. May mắn thay, khi cài đặt, các thư mục cho tệp nhật ký của hai máy chủ web này đã có thể ghi được
Tự động thu thập lỗi PHP với Retrace APM
Truy xuất là công cụ APM [Quản lý hiệu suất ứng dụng] do Stackify cung cấp. Nhưng công cụ này vượt xa việc giám sát hiệu suất của ứng dụng của bạn. Nó cho phép bạn thực hiện ghi nhật ký tập trung , thực hiện lập mã hồ sơ và duy trì . server and application metrics.
Một trong những tính năng tuyệt vời của Retrace là khả năng tự động thu thập tất cả các lỗi chưa được xử lý trong ứng dụng PHP của bạn. Tiện ích mở rộng PHP của chúng tôi sẽ bắt ngoại lệ và tự động chuyển tiếp chúng tới Retrace
Với Retrace, tất cả các lỗi sẽ tự động được ghi lại và định dạng để có thể xem dễ dàng. Truy xuất sẽ không chỉ hiển thị lỗi nào đã xảy ra mà còn phân tích vị trí và nguyên nhân gây ra lỗi đó. Thời gian và số lần xuất hiện cũng được hiển thị trong nhật ký để việc tập trung vào vấn đề cần ưu tiên sẽ dễ dàng hơn rất nhiều
Để tìm hiểu thêm về Truy xuất, vui lòng xem trang tính năng Truy xuất khi theo dõi lỗi. Ngoài ra, hãy thử Prefix, trình lược tả mã miễn phí của Stackify, để viết mã tốt hơn trên máy trạm của bạn. Tiền tố hoạt động với. NET, Java, PHP, Nút. js, Ruby và Python