Ошибки PHP показывают оранжевую таблицу и 'стек вызовов'

Недавно, если у меня есть ошибки PHP на моем localhost, я вижу это расположение оранжевой таблицы и стека вызовов:

PHP error
(источник: doheth.co.uk)

Это вызывается чем-то, в частности, модуль PHP, возможно? Или это - теперь часть PHP по умолчанию? Я хотел бы вернуться к более простому сообщению открытым текстом. Я выполняю PHP на Apache 2 на моем рабочем столе Ubuntu.

12
задан Glorfindel 3 June 2019 в 22:04
поделиться

1 ответ

Несколько очевидных

  • , если скорость не имеет критической, выполнить код напрямую от Flash.
  • Объявите постоянные таблицы данных с использованием const . Это позволит избежать скопированных данных от Flash в RAM
  • , упаковывать большие таблицы данных, плотно используя наименьшие типы данных, а в правильном порядке, чтобы избежать прокладки.
  • Используйте сжатие для больших наборов данных (до тех пор, пока код сжатия не перевешивает данные)
  • Выключите обработку исключения и RTTI.
  • Кто-нибудь упомянул с использованием -OS? ; -)

Складные знания в данных

Одним из правил философии UNIX может помочь сделать код более компактным:

Правило представления: сложить знания в данные, поэтому логика программы может быть глупо и надежный.

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

Коды журнала + двоичные данные вместо текста

вместо ввода в систему простых текста, кодов событий журнала и двоичных данных. Затем используйте «скатербюр», чтобы восстановить сообщения о событиях. Сообщения в развеселении могут даже содержать спецификаторы формата в стиле PrintF, чтобы значения данных событий аккуратно отображаются в тексте.

Минимизируйте количество потоков

Каждый поток нуждается в его блоке памяти для стека и TSS. Там, где вам не нужно вытеснение, рассмотрите возможность выполнить ваши задачи выполнять совместно в рамках одного и того же потока ( совместное многозадачность ).

Используйте пулы памяти вместо накопления

, чтобы избежать фрагментации кучи, я часто видел отдельных модулей крупных статических буферов памяти для их собственного использования, даже когда память только изредка требуется только. Вместо этого пул памяти может быть использован вместо этого, поэтому память используется только «по запросу». Тем не менее, этот подход может потребовать тщательного анализа и приборов, чтобы убедиться, что пулы не истощаются во время выполнения.

Динамическое распределение только при инициализации

в встроенных системах, когда только одно приложение работает бесконечно, вы можете использовать динамическое распределение в разумном смысле, который не приводит к фрагментации: просто динамически выделяет один раз в различных процедурах инициализации и никогда Бесплатно память. Резерв () Ваши контейнеры на правильную емкость и не позволяйте им автоматически расти. Если вам нужно часто выделять / бесплатные буферы данных (скажем, для пакетов связи), затем используйте пулы памяти. Однажды я даже расширил рутины C / C ++, чтобы он преподавал мою программу, если что-то пытается динамически распределять память после последовательности инициализации.

-121--1158390-

Это XDEBUG вывод. Вы можете удалить библиотеку XDebug из настроек настроек в Php.ini , и он покажет следы стека PHP по умолчанию, или вы можете установить xdebug.default_Enable , чтобы Выкл. , и он отключит следы стека XDebug.

22
ответ дан 2 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

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