PHP не передбачає звичайних засобів для лову та відновлення після фатальних помилок. Це пояснюється тим, що обробку не слід відновлювати після фатальної помилки. Рядок, що відповідає вихідному буфері (як це запропоновано оригінальним повідомленням, описана техніка на PHP.net), безумовно, не рекомендується Це просто ненадійно.
Виклик функції пошти () в рамках методу обробки помилок виявляється також проблематичним. Якщо у вас було багато помилок, ваш поштовий сервер був би завантажений роботою, і ви могли б опинитися з грубо вхідною скринькою. Щоб уникнути цього, ви можете запустити cron для періодичного сканування журналів помилок та відповідного надсилання повідомлень. Можливо, ви також хочете заглянути в програмне забезпечення системного моніторингу, наприклад, Nagios .
Щоб поговорити про реєстрацію функції відключення:
Це правда, що ви можете зареєструвати функцію відключення, і це хороша відповідь.
Суть у тому, що ми, як правило, не повинні намагатися відновитись після фатальних помилок, особливо не використовуючи регулярне вираження проти вихідного буфера. Я відповідав на прийняту відповідь , яка пов’язана з пропозицією на php.net, яка з тих пір була змінена або видалена.
Ця пропозиція полягала у використанні регулярного вираження проти вихідного буфера під час обробки винятків, а у випадку фатальної помилки (виявленої зіставленням із будь-яким налаштованим текстом помилки, який ви могли очікувати), спробуйте зробити якесь відновлення чи продовжувати обробку. Це не було б рекомендованою практикою (я вважаю, що тому я також не можу знайти оригінальну пропозицію. Я або її не помічаю, або php-спільнота зняла її).
Можливо, варто відзначити, що новіші версії PHP (приблизно 5.1), схоже, викликають функцію відключення раніше, перш ніж буде викликано зворотний виклик буферизації виводу. У версії 5 та новіших версіях цей порядок був зворотним (зворотний виклик буферизації виходу супроводжувався функцією відключення). Крім того, оскільки приблизно в 5.0.5 (що набагато раніше, ніж версія 5.2.3 запитувача), об'єкти вивантажуються задовго до виклику зареєстрованої функції відключення, тому ви не зможете розраховувати на свої об'єкти в пам'яті. багато чого.
Таким чином, реєстрація функції відключення є прекрасною, але тип завдань, які повинні виконуватись функцією відключення, ймовірно, обмежується кількома процедурами обережного відключення.
Ключовий висновок тут - це лише кілька слів мудрості для кожного, хто натикається на це питання і бачить поради у первісно прийнятій відповіді. Не повторно виражайте вихідний буфер.