Немного о компьютере

Точный help report php. Снижение нагрузки на сервер. Предопределенные константы и побитовые операции error_reporting

Коэффициент допустимой нагрузки на сервер - один из параметров SaaS-аккаунтов. Для каждого тарифного плана установлены свои параметры нагрузки. С текущей нагрузкой аккаунта Вы всегда можете ознакомиться в личном кабинете CRM системы.

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

Основные параметры, влияющие на нагрузку:

  • Количество пользователей в системе работающих одновременно;
  • Количество записей в таблицах программы;
  • Количество правил и групп доступа;
  • Количество напоминаний, цветовых форматирований, фильтров и т.д.;
  • Количество вычислений и их сложность;
  • Количество заданий, выполняемых в фоновом режиме (через систему Cron);
  • Количество запущенных рассылок (электронной почты и СМС);
  • Количество отчетов;
  • Объем лога программы.

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

Все меры по снижению нагрузки можно разделить на две части: для администраторов и для разработчиков. Эти меры также могут снизить нагрузку на сервер при использовании web-версии программы.

Инструкции для администраторов

Начало оптимизации

Самое первое действие, которое Вы должны сделать - убедиться, что у Вас используется последняя версия программы. Убедиться в этом можно, перейдя в "Настройки" - "Дополнительно" - "Обновление ревизии". Если Вы используете самую последнюю версию и ревизию программы, Вы увидите соответствующее сообщение

Если же Вы используете старую версию или ревизию, то программа предложит Вам обновиться.

Далее следует запустить расширенную проверку системы. Для этого перейдите в "Настройки" - "Дополнительно" - "Проверка системы" и нажмите на кнопку "Расширенная проверка системы". В случае возникновения ошибок в программе, они будут автоматически исправлены.

Общие настройки программы

Перейдите в "Настройки" - "Дополнительно" - "Общие настройки". Здесь стоит обратить внимание на два пункта.

Интуитивный поиск - Вы можете отключить эту опцию, если Вам не нужен поиск по транслитерации значения.

Режим скролла окна - Подробнее о режимах скролла окна Вы можете прочитать в нашей документации . Желательно указать у данной настройки значение "Простой".

Настройки Cron

Перейдите в "Настройки" - "Дополнительно" - "Настройки Cron". В настройках Cron можно управлять задачами, выполняющимися автоматически в фоновом режиме. Например, синронизацией, отправкой писем и СМС. Снизить нагрузку за счет этой настройки можно двумя способами.

1. Запретить выполнение заданий, которые Вы в своей программе не используете. Сделать это можно, открыв нужное задание и поставив галочку "Запретить выполнение".

Например, если Вы не пользуетесь функцией синхронизации, то откройте соответствующее задание и поставьте галочку "Запретить выполнение" в его настройках. Если Вы не пользуетесь функцией отправки СМС - можно запретить выполнение заданий "Формирование СМС", "Отправка СМС", "Проверка статуса доставки СМС".

2. Изменить периодичность выполнения заданий. Сделать это можно, зайдя в настройки задания и изменив значение в поле "Период". Например, в задании "Отправка писем" можно указать вместо ежеминутного выполнения, выполнение задания раз в 5 минут.

Настройка условий выполнения вычислений

В CRM программе для автоматического заполнения некоторых полей используются вычисления. Но иногда условия их выполнения неоптимальны. Например, нагрузку вызывает условие "Отображения поля" в настройке вычисления. Следует избегать его использования.

Например, если у нас есть вычисление, по которому в поле А вносится сумма полей Б и В, то желательно использовать условия "Изменение поля Б" и "Изменение поля В". Если у нас есть вычисление, которое заносит в поле А значение из другой таблицы из поля Б, в зависимости от значения в поле связи В, то логично, что можно использовать только условие "Изменение поля В" и "Сохранение в таблице".

Настройка и архивирование логов

Перейдите в "Настройки" - "Логи" - "Настройка лога". В настройках лога, без необходимости не стоит включать логирование просмотра пользователем таблиц, представлений и записей. Это может как увеличить нагрузку на сервер, так и привезти к тому, что файл с логами будет слишком большим. Также здесь стоит включить опцию "Производить ежемесячное архивирование лога", что позволит ежемесячно автоматически уменьшать размер таблицы с логами

Также здесь можно автоматически заархивировать логи, если ранее не было включено автоматическое архивирование. Сделать это можно во вкладке "Архив".

Настройка фильтров

Если открыть настройки любого фильтра, то в них можно увидеть опцию "Отображать в скобках число записей". Желательно снять эту галочку, т.к. эта опцию может вызывать нагрузку при каждом открытии таблицы. И чем больше таких фильтров в таблице - тем больше нагрузка при открытии.

Инструкция для разработчиков

Работа с таблицей perfomance_stat

Важно: Внесение изменений в таблицы базы данных может привести к неработоспособности программы. Не стоит вносить изменения в таблицы базы данных без крайней необходимости.

Войдите в ваш аккаунт, и откройте адрес https://*адрес вашего аккаунта*/edit_sql.php (где вместо *адрес вашего аккаунта* укажите соответствующее значение). В открывшемся окне заходим в таблицу базы данных, содержащую название Вашего аккаунта (например, c_myaccount). В открывшемся перечне таблиц базы откройте таблицу f_performance_stat

В данной таблице ведется учет всех скриптов программы за последний час. Для начала, вам стоит отсортировать все скрипты в этой таблице по количеству sql-запросов (от большего к меньшему). Для этого, дважды нажмите на заголовок "sql_count".

После того, как данные отсортированы, можно начать проводить анализ данных. При проведении анализа Вам стоит обратить внимание на два столбика

1. script - указывает на название скрипта, выдающего нагрузку

2. get_data - дает более подробную информацию о скрипте, либо содержит ссылку на таблицу/задачу, в которой возникает нагрузка.

Для удобства анализа, используйте таблицу, приведенную ниже:

Значение в поле "script" Пример значения в поле "get_data" Описание Действия для снижения нагрузки
cron.php ...&task_id=1 Строка такого вида означает, что нагрузку дает одно из заданий в Cron
Необходимо перейти в "Настройки Cron" и открыть задание, вызывающее нагрузку (ID задания указано в поле "get_data"). Стоит либо оптимизировать код задания, либо уменьшить его периодичность. О настройках Cron .
view_line2.php table=42&line=1&filter=48&page=1 Строка такого вида означает, что нагрузку дает одно или несколько вычислений в определенной таблице при просмотре записи
fields.php table=42&filter=48 Строка такого вида означает, что нагрузку дает одно или несколько вычислений в определенной таблице при просмотре таблицы Необходимо перейти в настройки вычислений таблицы, указанной в поле "get_data" (в примере, это таблица с ID 42). Для начала, стоит посмотреть и оптимизировать условия выполнения вычислений в указанной таблице. Если этого не помогло, стоит оптимизировать сам код вычислений.
report.php id=30 Строка такого вида означает, что нагрузку дает один из отчетов программы
Необходимо оптимизировать код отчета, указанного в поле "get_data" (в примере, это отчет с ID 30).

Наибольший функционал доступен при запуске сканера AI-BOLIT в режиме командной строки. Это можно делать как под Windows/Unix/Mac OS X, так и непосредственно на хостинге, если у вас есть доступ по SSH и хостинг не сильно ограничивает потребляемые ресурсы процессора.

Обращаем внимание, что для запуска сканера требуется консольная версия PHP 5.3 и выше. В версии 5.2 будет ошибка "Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or "}" in /home/ХХХ/ai-bolit.php on line...". Проверьте текущую версию командой php -v

Справка по параметрам командной строки сканера AI-BOLIT

Показать помощь

php ai-bolit.php --help

php ai-bolit.php --skip=jpg,png,gif,jpeg,JPG,PNG,GIF,bmp,xml,zip,rar,css,avi,mov

Просканировать только определенные расширения

php ai-bolit.php --scan=php,php5,pht,phtml,pl,cgi,htaccess,suspected,tpl

Подготовить файл карантина для отправки специалистам по безопасности. Будет создан архив AI-QUARANTINE-XXXX.zip с паролем.

php ai-bolit.php --quarantine

Запустить сканер в режиме "параноидальный" (рекомендуется для получения максимально-детализированного отчета)

php ai-bolit.php --mode=2

php ai-bolit.php --mode=1

Проверить один файл "pms.db" на вредоносный код

php ai-bolit.php -jpms.db

Запустить сканер с размером памяти 512Mb

php ai-bolit.php --memory=512M

Установить максимальный размер проверяемого файла 900Kb

php ai-bolit.php --size=900K

Делать паузу 500ms между файлами при сканировании (для снижения нагрузки)

php ai-bolit.php --delay=500

Отправить отчет о сканировании на email [email protected]

php ai-bolit.php [email protected]

Создать отчет в файле /home/scanned/report_site1.html

php ai-bolit.php --report=/home/scanned/report_site1.html

Просканировать директорию /home/s/site1/public_html/ (отчет по-умолчанию будет создан в ней же, если не задана опция --report=файл_отчета)

php ai-bolit.php --path=/home/s/site1/public_html/

Выполнить команду по завершении сканирования.

php ai-bolit.php --cmd="~/postprocess.sh"

Получить отчет в текстовом виде (plain-text) с именем site1.txt

php ai-bolit.php -lsite1.txt

Можно комбинировать вызовы, например,

php ai-bolit.php --size=300K --path=/home/s/site1/public_html/ --mode=2 --scan=php,phtml,pht,php5,pl,cgi,suspected

Комбинируя вызов сканера AI-BOLIT c другими командами unix, можно выполнять, например, пакетную проверку сайтов. Ниже приведем пример проверки нескольких сайтов, размещенных внутри аккаунта. Например, если сайты размещены внутри директории /var/www/user1/data/www, то команда на запуск сканера будет

find /var/www/user1/data/www -maxdepth 1 -type d -exec php ai-bolit.php --path={} --mode=2 \;

Добавив параметр --report можно управлять каталогом, в котором будут создаваться отчеты о сканировании.

php ai-bolit.php список параметров … --eng

Переключить интерфейс отчета на английский. Данный параметр должен идти последним.

Интеграция с другими сервисами и в панель хостинга

php ai-bolit.php --json_report=/path/file.json

Cформировать отчет в формате json

php ai-bolit.php --progress=/path/progress.json

Cохранять статус проверки в файл в формате json. Данный файл будет содержать структурированные данные в формате json: текущий файл проверки, сколько файлов проверено, сколько файлов осталось проверить, процент проверки, время до завершения сканирования. Данный механизм можно использовать, чтобы в панели показывать прогресс-бар и данные о проверяемых файлах. По завершении сканирования файл удаляется автоматически.

php ai-bolit.php --handler=/path/hander.php

Внешний обработчик событий. Вы можете добавить собственные обработчики начала/завершения сканирования/прогресса сканирования/ошибки сканирования. Пример файла можно посмотреть в архиве сканера, в каталоге tools/handler.php. Например, по завершении сканирования можно что-то сделать с файлом отчета (отправить по почте, запаковать в архив и пр).

29 декабря 2012 в 22:01
  • Microsoft SQL Server

Продолжаем рассматривать полезные советы для начинающих, при создании отчетов в Microsoft Reporting Services.
Начало можно найти здесь:
Заинтересовавшихся, прошу под кат…

0) Как разместить несколько контролов в ячейке таблицы?
Достаточно часто возникает необходимость разместить несколько контролов в 1 ячейке таблицы. Если просто перетаскивать контрол в ячейку, то он полностью ее заполняет. Выйти из этой ситуации помогает контрол, под названием Rectangle.

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

1) Задавайте язык отчета по умолчанию
При создании отчетов старайтесь декларировать язык отчета (Свойства отчета - Language).

Это очень полезно если вы работаете с заграничным клиентом у которого региональные настройки отличаются от Ваших. Если Вы не знаете какие настройки использует Ваш клиент, то есть возможность указать Expression следующего содержания:
=User!Language
Этим Вы избежите неровностей в форматировании числовых значений, даты, времени, валюты и т.п которые ожидает клиент.
2) Конкатенация строк
Иногда возникает необходимость «вставить» в статический текст отчета, размещенный например в texbox, значение поля из базы данных. Иными словами нужно сложить строки текста в 1 строку. Для этого в SSRS предусмотрен операнд «&».
Предположим в texbox у нас имеется статический текст «Здравствуйте, ув. Иван Иванович…». Нам необходимо вместо Иван Иванович подставлять ФИО из базы данных, из поля fio. Для этого правой кнопкой мыши над texbox, вызываем контекстное меню, выбираем свойство Expression у texbox и меняем текст следующим образом:
=” Здравствуйте, ув. “ & Fields!fio.Value & ” …”
upd: Как подсказал в коментарии уважаемый , более правильный способ конкатенации строк - использовать placeholder.
Использовать его просто: в texbox, необходимо уставнить курсор в то место, куда предполагается вставить значение из поля базы данных. Правой кнопкой мыши вызываем контекстное меню и выбираем «Create placeholder...»

Задаем значение Label(это значение будет видно в тексте, если не указать значение для поля Lable, то будет использовано название поля из базы данных) и Value(в нашем случае это поле из базы данных)

Применение placeholder преподносит дополнительные выгоды:
1) Видно текст, который находится в контроле(в методе что описал я, пользователь видит только текст <> , что вводит человека, который видит код отчета впервые в замешательство и тратит его время на поиск нужного Expression.)
2) Placeholder позволяет произвести форматирование поля (задать формат данных, изменить шрифт, цвет, выравнивание и т.п) не меняя при этом форматирование основного текста.

Разница «на лицо»:

3) Способы форматирования числовых данных
SSRS предоставляет несколько возможностей форматировать данные. Наиболее простой способ форматирования это указать формат(свойство Format) в свойствах контрола.

Этот способ имеет 2 недостатка:
1) контрол содержит кроме данных которые предполагается форматировать еще и дополнительный текст.
2) при экспорте отчета в хмл
Решить эту проблему возможно с помощью вызова специальных методов. Рассмотрим пример:
Textbox содержит следующий текст: “Уважаемый клиент, остаток средств на вашем счету составляет: ” & Fields!UserBalance.Value & “ руб.” .
Если не производить форматирование, то при условии, что значение Fields!UserBalance.Value равно 1005.35 может отобразится пользователю, как 1005.350000000000. Для избежания такого казуса, необходимо использовать метод Format или FormatNumber .
Пример использования: “Уважаемый клиент, остаток средств на вашем счету составляет ” & Format(Fields!UserBalance.Value,”#,##0.00”) & “ руб.”
“Уважаемый клиент, остаток средств на вашем счету составляет ” & FormaNumber(Fields!UserBalance.Value,2) & “ руб.”
При использовании Format необходимо использовать маску форматирования, при использовании FormaNumber достаточно указать количество знаков после запятой.
Примечание: метод Format применим так же для форматирования даты, времени, денег и т.п

4) Экспорт отчета в хмл формат настройка полей
SSRS позволяет экспортировать отчет в разные форматы, одним из них является ХМЛ. У каждого контрола отчета есть 3 свойства которые отвечают за поведение при экспорте в хмл.

Рассмотрим их поближе:
DataElementName – отвечает за название элемента в хмл, по умолчанию значение не выполнено. Если не выполнить этот элемент, то название в хмл будет соответствовать названию контрола.
DataElementOutput – свойство отвечает за то будет элемент экспортирован в хмл или нет. Значения которые можно задать:
Auto (значение по умолчанию) – элемент будет экспортирование в том случает если он имеет значение, если значение null, то не экспортируется.
Output – элемент всегда экспортируется.
NoOutput – элемент в хмл не экспортируется
DataElementStyle – отвечает за стиль элемента в хмл(будет это элемент или атрибут)
Значения которые возможно использовать:
Auto (значение по умолчанию) – в зависимости от контрола будет экспортирован в виде элемента(node) или атрибута(attribute). По сути, только texbox по умолчанию экспортируется в виде атрибута, остальные элементы виде нодов.
Attribute – значение будет представлено в виде атрибута
Element – значение будет представлено в виде элемента (node)
Важная фишка: на экспорт в хмл не распространяется свойство Hidden.Поэтому если в хмл предполагается экспортировать элемент который показывается или нет на основании условия то это условие нужно перенести в Expression контрола. Пример: textbox содержит текст который показывается лишь в случает когда поле condition = 1. Тогда Expression будет выглядеть так:
=IIF(Fields!Condition.Value = 1, “Some text”,””)

На сегодня все, продолжение следует.


По-умолчанию в Excel офиса 2000-XP-2003 выключена возможность выполнять сторонние макросы. В Excel зайдите в меню Сервис>>Макрос>>Безопасность . На закладке «Надежные издатели » поставьте галку «Доверять доступ Visual Basic Project »

Настройка Office 2007
1) Кнопка "Office"

2) Центр управления безопасностью >> Параметры центра безопасности


3) Параметры макросов >> поставить галочку "Доверять доступ к объектной модели проектов VBA"

Сводный отчет готовится по активным данным! Т.е. На него накладываются выборки «панели выборок» (фильтры, но не группировки таблиц), закладок «Доход», «Расход»....

Для построения диаграмм в Excel нажмите в сводном отчете Вставка >> Диаграмма, в мастере подготовки диаграмм выделите данные. Подробнее читайте в справке по MS Office раздел "Сводные таблицы".

Отчет гарантированно работает в rus -en версиях Windows.

Отчеты в Excel создаются на основании шаблонов. Подключаемые шаблоны находятся в папке My Report в папке Домашних финансов, на их основании можно создавать собственные шаблоны, которые будут доступны в программе.

Краткий отчет позволяет вывести на печать содержимое таблицы с разным механизмом подсчета итоговых сумм.

Универсальным инструментом подготовки отчетов является выгрузка в HTML соответствующих таблиц, при этом сохраняются все настройки и группировки. Открыть документ HTML можно открыть, практически в любом, приложении MS Office.

В статье описан функционал, который доступен в PHP (актуально для 5.3.х) для обработки ошибок всех типов, включая ошибки интерпретации кода (E_ERROR, E_PARSE, E_WARNING, etc). Эта обработка поможет вам для управляемого отображения страницы в случае возникновения таких проблем. В статье присутствует множество описаний и рабочих примеров(архитектуры) для того, что бы сразу воспользоваться в своем программном продукте. В конце концов, ну немного сломали сайт, ну надо же, об этом сообщить поисковику с заголовком 4хх или 5хх и повеселить пользователя, вместо возврата белого экрана (или что хуже экрана со священной информацией, для хакеров) с ответом 200 Ok.

Идея написать этот топик возникла, когда я на храбре задал 2 вопроса:

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

Если заинтересовались, то подробности под катом…

Причины использования

Пользователю/поисковику, требуется внятно ответить, что на сервере проблемы. Без использования определенного фен-шуя, этого добиться достаточно трудно, а порой невозможно. Тут я проливаю свет на все это, ну и себе заметочку оставляю, так как еще неделю назад я не знал за что взяться, и, наверное, многие новички тоже будут обескуражены.

Описания функций

Данный функционал доступен в PHP для того, что бы обрабатывать ошибки и контролировать вывод. Вот описание их вкусностей и недостатков. Документацию я приводить не буду, я только сошлюсь её страницы и опишу свое мнение. Все что будет приведено это только малая доля, ссылки на соответствующие разделы документации я приведу в конце статьи. Итак встречаем:

- Контроль некритических ошибок: замечания, предупреждения, пользовательские ошибки. В общем все то, что не завершает интерпретацию аварийно.
set_error_handler - Задает определенный пользователем обработчик ошибок.
Нужен для того, что бы писать в лог все такие ошибки. Если её не задать, то в лог это не пишется, а мне вот всегда хочется узнать при каких боевых ситуациях могут вызываться замечания и предупреждения. То есть позволяет автоматически тестировать продукт пользователем и он даже не будет замечать этого.
Если функция не задана, то PHP лишь пытается вывести данные на экран, а если ему и это не дают, то вообще никаких признаков жизни от этих типов ошибок не возникает.

- Контроль, исключений: является ошибкой типа E_ERROR.
set_exception_handler - Задает пользовательский обработчик исключений
Ну не знаю, зачем это вообще было придумано, когда есть то, что описано ниже и просто обработка ошибки типа Exception. Так что сообщаю что оно просто существует. Она перехватывает критическую ошибку «исключение» и позволяет что-то с ней делать. В любом случае скрипт завершается. Её работы по умолчанию лично для меня достаточно (пишет в логи, пытается вывести на экран). Я бы её вообще не переопределял, а то придется в логи о случившимся исключении самому писать.

- Функции контроля вывода: Тут я опишу 3 функции, которые следует знать по разным причинам. Например, для или для проблем вывода заголовков. В нашем случае требуется выводить заголовки ошибок.

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

Похожие публикации