Обработка ошибок PHP

Я использую grc (Generic Colouriser), который позволяет раскрасить вывод ряда команд, включая diff.

Это скрипт на python, который можно обернуть вокруг любой команды. Таким образом, вместо вызова diff file1 file2, вы бы вызывали grc diff file1 file2 для просмотра цветного вывода. Я добавил псевдонимы diff - grc diff, чтобы было легче.

5
задан Robert DeBoer 6 July 2009 в 15:14
поделиться

4 ответа

Мы можем сделать это, получив ScrollViewer , который присутствует в ControlTemplate ListView. Если у вас есть доступ к ScrollViewer, то есть много различных методов прокрутки.

Во-первых, мы можем создать ListView, к которому мы хотим добавить этот эффект:

<ListView ItemsSource="{Binding Percents}"
      SelectionChanged="OnSelectionChanged"
      x:Name="uiListView"/>


public List<int> Percents { get; set; }

public Window1()
{
    InitializeComponent();

    Percents = new List<int>();
    for (int i = 1; i <= 100; i++)
    {
        Percents.Add(i);
    }
    this.DataContext = this;
}

Нам также понадобится то, что мы можем использовать для получения ScrollViewer из ListView. Раньше я использовал нечто подобное для работы с настраиваемой прокруткой, и мы можем использовать это и здесь.

public static DependencyObject GetScrollViewer(DependencyObject o)
{
    if (o is ScrollViewer)
    { return o; }

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
    {
        var child = VisualTreeHelper.GetChild(o, i);

        var result = GetScrollViewer(child);
        if (result == null)
        {
            continue;
        }
        else
        {
            return result;
        }
    }

    return null;
}

Теперь нам просто нужно обработать событие SelectionChanged. Поскольку мы пытаемся прокрутить элемент в начало списка, лучший вариант - прокрутить вниз, а затем повторно прокрутить вверх до выбранного элемента. Как вы сказали, ScrollIntoView будет прокручиваться до тех пор, пока элемент не станет видимым, как-то прописать обработчик ошибок с PHP, так что мне просто нужно выбросить ошибку, а затем решить, что что с этим делать и продолжать ли.

Вы можете сделать именно это с помощью set_error_handler () и set_exception_handler () .

Не существует "единственного правильного пути" для обработки ошибок, но вот некоторые вещи, которые следует учитывать.

  • trigger_error () похож на генерирование нового исключения в том, что они оба немедленно выходят из текущего выполнения, только метод trigger_error () не может быть перехвачен.
  • Как это сделать. вы хотите, чтобы ошибки обрабатывались в среде разработки (показывать на экране?), а не в производственной среде (регистрироваться и отправляться по электронной почте?)
  • Вы можете использовать вышеуказанные функции для существенного «преобразования» ошибок в исключения или наоборот
  • Не все типы ошибок можно обрабатывать с помощью специального обработчика ошибок
5
ответ дан 13 December 2019 в 05:41
поделиться

Вот некоторые вещи, которые я обычно делаю:

  • Используйте глобальный параметр конфигурации или флаг для переключения между разработкой и производством.
  • Не используйте ошибки php, когда у вас есть выбор: Предпочитайте исключения для вашей собственной обработки ошибок. Если вы используете библиотеку, в которой не используются исключения, обнаруживайте ошибки и генерируйте собственные исключения.
  • Используйте ловушку исключений верхнего уровня, которая отображает исключения в удобной для чтения форме. Если вы разместите этот блок try-catch стратегически, вам не нужно регистрировать глобальный обработчик исключений.
  • Всегда разрабатывайте с помощью error_handeling (E_ALL | E_STRICT)
  • Перехватывайте предупреждения и уведомления PHP с помощью set_error_handler () и остановить выполнение. Это заранее устраняет множество ошибок и в результате дает очень надежный код.
  • Код обработки глобальных ошибок должен быть очень легким, чтобы избежать ошибок. При работе с глобальными обработчиками ошибок всегда существует риск рекурсии.
  • Если система находится в рабочем режиме, не отображать никаких деталей: зарегистрируйте ошибку и сгенерируйте уникальный идентификатор, на который пользователь может ссылаться, если захочет сообщить об ошибке или сообщить об ошибке.
5
ответ дан 13 December 2019 в 05:41
поделиться

При работе на большом сайте лучше иметь представление об истории ошибок, особенно когда вещи могут довольно легко перейти в непредусмотренные логические пути, когда тестировщик или пользователь запускают странное использование кейс.

Я обычно встраиваю блоки try catch, которые способны как регистрировать ошибку, так и останавливать выполнение в случае чего-то фатального (и выплевывать страницу ошибки с кодом ошибки) или в случае программного ошибка, продолжаю, но отмечая это в моих журналах ошибок. В основном заканчиваюсь созданием собственного обработчика ошибок, поскольку я считаю, что в противном случае при масштабировании будет слишком много нюансов.

Во время разработки я использую профилировщик PHP Particletree для регистрации ошибок и других соответствующих данных на консоли с трассировкой, сообщение и строка. Это просто красиво - не могу говорить о его эффективности. Это может привести к раздуванию кода, но, боже мой, это может спасти жизнь, если вы будете иметь представление о том, где и как произошли ошибки, простым текстом. Это особенно полезно при работе с такими вещами, как веб-службы SOAP, которые бросают вам исключения, как ничейный бизнес.

Я также считаю полезным абстрагировать журнал отладки и сохранять его глобальным, чтобы, как люди говорили раньше, при переключении в производство, вы не выбрасываете грязное белье в холодный воздух Интернета, поскольку можете относительно легко изменить вывод отладчика на базу данных sql, электронную почту или что-то еще.

Профайлер Particletree: http://particletree.com/features/php-quick-profiler/

2
ответ дан 13 December 2019 в 05:41
поделиться

Перед запуском я полностью тестирую свой проект на ключевых этапах разработки, проверяя мои журналы ошибок (я использую панель управления Plesk) для отслеживания ошибок php.

Когда проект запущен, на ключевых этапах в классе или приложении я отправляю отчет об ошибке или отладке, используя созданный мной класс. Он отправляет отчет об ошибке на определенный адрес электронной почты с ключевой информацией, такой как: дата и время, IP-адрес пользователя, ссылающаяся страница, полный URL-адрес и короткое примечание, которое я определяю при запуске / вызове класса отладки.

Я использую, чтобы принудительно запустить его. напишите файл журнала, но обнаружил, что это небезопасно, так как каталог должен иметь chmod 777, и неэффективно, поскольку мне приходилось каждый раз обращаться к последним журналам.

0
ответ дан 13 December 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: