PHP nie zapewnia konwencjonalnych sposobów wychwytywania i odzyskiwania po błędach krytycznych. Wynika to z faktu, że przetwarzanie zwykle nie powinno być odzyskiwane po wystąpieniu błędu krytycznego. Ciąg pasujący do bufora wyjściowego (jak sugeruje oryginalny post technika opisana na PHP.net) jest zdecydowanie odradzany. To po prostu niewiarygodne.
Problematyczne jest również wywoływanie funkcji mail () z poziomu metody obsługi błędów. Gdybyś miał dużo błędów, twój serwer pocztowy byłby załadowany pracą i mógłbyś znaleźć się z gnarly skrzynką odbiorczą. Aby tego uniknąć, możesz rozważyć uruchomienie crona, aby okresowo skanować dzienniki błędów i odpowiednio wysyłać powiadomienia. Możesz także zajrzeć do oprogramowania do monitorowania systemu, takiego jak Nagios .
Aby porozmawiać o rejestracji funkcji zamykania:
To prawda, że możesz zarejestrować funkcję zamykania, a to dobra odpowiedź.
Chodzi o to, że zazwyczaj nie powinniśmy próbować przywracać sprawności po błędach krytycznych, zwłaszcza nie używając wyrażenia regularnego w buforze wyjściowym. Odpowiedziałem na zaakceptowaną odpowiedź , która łączyła się z sugestią na php.net, która została zmieniona lub usunięta.
Ta sugestia polegała na zastosowaniu wyrażenia regularnego względem bufora wyjściowego podczas obsługi wyjątków, aw przypadku błędu krytycznego (wykrytego przez dopasowanie do dowolnego skonfigurowanego tekstu błędu, którego można się spodziewać), spróbuj wykonać pewnego rodzaju odzyskiwanie lub dalsze przetwarzanie. To nie byłaby zalecana praktyka (uważam, że dlatego też nie mogę znaleźć oryginalnej sugestii. Albo przeoczam ją, albo społeczność php zestrzeliła ją).
Warto zauważyć, że nowsze wersje PHP (około 5.1) wydają się wcześniej wywoływać funkcję zamykania, zanim zostanie wywołane wywołanie zwrotne buforowania wyjścia. W wersji 5 i wcześniejszych ta kolejność była odwrotna (po wywołaniu zwrotnym buforowania danych wyjściowych nastąpiła funkcja zamykania). Ponadto, ponieważ około 5.0.5 (czyli znacznie wcześniej niż wersja pytającego 5.2.3), obiekty są rozładowywane na długo przed wywołaniem zarejestrowanej funkcji zamykania, więc nie będzie można polegać na obiektach w pamięci dużo czegokolwiek.
Rejestracja funkcji zamykania jest więc w porządku, ale zadania, które powinna wykonać funkcja zamykania, prawdopodobnie ograniczają się do kilku delikatnych procedur zamykania.
Kluczową sprawą tutaj są tylko słowa mądrości dla każdego, kto natknie się na to pytanie i zapozna się z radą w pierwotnie przyjętej odpowiedzi. Nie regexuj bufora wyjściowego.