Ngoại lệ lấy dấu vết php
Các ngoại lệ được ném vào PHP có thể tùy chọn in thông tin ngoại lệ trên màn hình hoặc trả về một chuỗi có ngoại lệ, bao gồm cả dấu vết ngăn xếp
Theo mặc định, độ dài của các tham số trong theo dõi ngăn xếp được cắt ngắn thành 15 byte, theo sau là
Trong PHP7. 4, một cài đặt INI mới có tên
Một lệnh INI như trên sẽ ẩn hoàn toàn các tham số trong dấu vết ngăn xếp Trong PHP8. 0, có một lệnh INI mới để giới hạn độ dài của các tham số được hiển thị trong dấu vết ngăn xếp. Lưu ý rằng lệnh
Lệnh hơi dài nhưng rõ ràng này có thể mở rộng dấu vết ngăn xếp để hiển thị thêm thông tin trong dấu vết ngăn xếp. Chúng có thể giúp dễ dàng gỡ lỗi vì độ dài tối đa 15 byte thường không đủ cho các URL (ví dụ: ______41_______ đã là 12 byte, chỉ còn lại ba byte cho phần còn lại), truy vấn cơ sở dữ liệu, v.v.
Lưu ý rằng thay đổi này chỉ ảnh hưởng khi một 0, được truy xuất rõ ràng dưới dạng một chuỗi hoặc khi một ngoại lệ chưa được bắt gặp được in trên màn hình
Thay đổi này không ảnh hưởng đến hàm 7 hoặc phương thức 8 vì cả hai đều trả về dấu vết ngăn xếp đầy đủTác động tương thích ngượcGiá trị cấu hình mặc định của 9 vẫn là 0 byte. Điều này có nghĩa là trừ khi giá trị này không được cập nhật, dấu vết ngăn xếp sẽ giống nhau (PHP 5, PHP 7, PHP 8) Ngoại lệ. getTrace - Nhận dấu vết ngăn xếp Sự miêu tảfinal public Exception::getTrace ( ) : array Thông sốChức năng này không có tham số Giá trị trả vềTrả về dấu vết ngăn xếp ngoại lệ dưới dạng một mảng ví dụVí dụ #1 Ngoại lệ. getTrace() ví dụ getTrace()); } ?> Ví dụ trên sẽ xuất ra một cái gì đó tương tự như array(1) { [0]=> array(4) { ["file"]=> string(22) "/home/bjori/tmp/ex.php" ["line"]=> int(7) ["function"]=> string(4) "test" ["args"]=> array(0) { } } } Khi báo cáo lỗi cho một ngoại lệ hoặc hành vi sai trong mã, điều quan trọng là bạn phải cung cấp một hoặc một số dấu vết ngăn xếp. Để hiểu tại sao, trước tiên bạn phải hiểu dấu vết ngăn xếp là gì và nó có thể hữu ích như thế nào đối với bạn với tư cách là nhà phát triển và cả những người bảo trì thư viện Dấu vết ngăn xếp được gọi như vậy vì nó cho phép người ta nhìn thấy dấu vết của các lệnh gọi hàm dẫn đến một điểm trong mã kể từ khi bắt đầu chương trình. Điểm đó không nhất thiết phải là một ngoại lệ. Chẳng hạn, bạn có thể sử dụng hàm PHP gốc Trong PHP, mọi ngoại lệ đều có dấu vết ngăn xếp của riêng nó, được hiển thị theo mặc định nếu ngoại lệ không bị bắt. Khi sử dụng Symfony, các ngoại lệ như vậy sẽ đi qua một trình xử lý ngoại lệ tùy chỉnh, giúp tăng cường chúng theo nhiều cách khác nhau trước khi hiển thị chúng theo API Máy chủ hiện tại (CLI hoặc không). Điều này có nghĩa là cách tốt hơn để lấy dấu vết ngăn xếp khi bạn không cần chương trình tiếp tục là đưa ra một ngoại lệ, như sau. Khi các ứng dụng trở nên lớn hơn, sự phức tạp thường được xử lý bằng các lớp kiến trúc cần được tách biệt. Ví dụ: nếu bạn có một ứng dụng web thực hiện lệnh gọi tới một API từ xa, thì có thể tốt hơn nếu bạn bọc các ngoại lệ được đưa ra khi thực hiện lệnh gọi đó với các ngoại lệ có ý nghĩa đặc biệt trong miền của bạn và xây dựng các ngoại lệ HTTP thích hợp từ các ngoại lệ đó. Các ngoại lệ có thể được lồng vào nhau bằng cách sử dụng đối số 0 Điều này có nghĩa là đôi khi, khi bạn nhận được một ngoại lệ từ một ứng dụng, bạn thực sự có thể nhận được một vài trong số đóKhi sử dụng thư viện, bạn sẽ gọi mã mà bạn không viết. Khi dùng framework thì ngược lại. bởi vì bạn tuân theo các quy ước của khung, khung tìm thấy mã của bạn và gọi nó, đồng thời thực hiện trước mọi việc cho bạn, chẳng hạn như định tuyến hoặc kiểm soát truy cập. Symfony vừa là framework vừa là thư viện các thành phần, nó gọi mã của bạn và sau đó mã của bạn có thể gọi nó. Điều này có nghĩa là bạn sẽ luôn có ít nhất 2 phần, thường là 3 trong dấu vết ngăn xếp của bạn khi sử dụng Symfony. một phần bắt đầu ở một trong các điểm đầu vào của khung (trong hầu hết các trường hợp là ____19_______1 hoặc ____19_______2) và kết thúc khi đạt được mã của bạn, hầu hết trong một lệnh hoặc trong một bộ điều khiển được tìm thấy dưới ____19_______3. Sau đó, ngoại lệ được đưa vào mã của bạn hoặc trong các thư viện mà bạn gọi. Nếu là phần sau, thì phải có phần thứ ba trong theo dõi ngăn xếp với các lệnh gọi được thực hiện trong các tệp dưới tên 4. Trước khi đến thư mục đó, mã sẽ trải qua nhiều quy trình xem xét và quy trình CI, điều đó có nghĩa là mã này sẽ ít có khả năng trở thành nguồn gốc của vấn đề hơn so với mã từ ứng dụng của bạn, vì vậy, điều quan trọng là trước tiên bạn nên tập trung vào các dòng bắt đầu bằng 3, Tiếp theo, bạn có thể xem những gói có liên quan. Các tệp trong 4 được Composer sắp xếp theo cách sau. 7 trong đó 8 là nhà cung cấp, 9 thư viện và 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 250 gói Composer. Nếu bạn định báo cáo lỗi, hãy đảm bảo báo cáo lỗi đó với thư viện để đưa ra ngoại lệ. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 251 sẽ dẫn bạn đến đúng nơi cho điều đó. Vì Symfony là một kho lưu trữ đơn lẻ, hãy sử dụng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 252 khi báo cáo lỗi cho bất kỳ thành phần nào Bây giờ chúng ta đã có tất cả những điều này, hãy xem cách lấy dấu vết ngăn xếp với Symfony Một số điều cần được chú ý khi chọn theo dõi ngăn xếp từ môi trường phát triển của bạn thông qua trình duyệt web
Vì dấu vết ngăn xếp có thể chứa dữ liệu nhạy cảm nên chúng không được để lộ trong quá trình sản xuất. Nhận dấu vết ngăn xếp từ môi trường sản xuất của bạn, mặc dù liên quan nhiều hơn, nhưng vẫn có thể thực hiện được với các giải pháp bao gồm nhưng không giới hạn việc gửi chúng đến địa chỉ email bằng Monolog Ngoại lệ có thể xảy ra khi chạy lệnh Symfony. Theo mặc định, chỉ có thông báo được hiển thị vì nó thường đủ để hiểu chuyện gì đang xảy ra 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Nếu không phải như vậy, bạn có thể có được dấu vết ngăn xếp bằng cách tăng mức độ chi tiết với 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 253 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Khi nhận được một ngoại lệ từ API, bạn có thể không nhận được dấu vết ngăn xếp hoặc nó có thể được hiển thị theo cách không phù hợp để chia sẻ. May mắn thay, khi ở trong môi trường nhà phát triển, bạn có thể có được dấu vết ngăn xếp văn bản thuần túy bằng cách sử dụng trình lược tả. Để tìm hồ sơ, bạn có thể xem tiêu đề phản hồi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 254 |