Oc-windows.ru

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Нуллифицировать member php action profile

BuddyPress Codex

BuddyPress has some nice built-in tools for collecting data from your members. You’ll be calling the “extended profile data” or “xProfile” in BuddyPress-speak in your theme. You can retrieve and display this data without modifying template files by attaching a new function to an existing action hook provided by BuddyPress.

For example, Carlos has registered your site and filled out the “Preferred Color” xProfile field you added in the profile form you built. And you’d like to display his preference in the header of his member profile. His member profile looks like this by default.

You can add Carlos’ color preference to the profile header by attaching a new function to a hook that BuddyPress provides for you to use. (Read more about action hooks.)

Looking through the BuddyPress template files, you’ll find a file called member-header.php : wp-content/plugins/buddypress/bp-templates/bp-legacy/member-header.php . In that file, look for a line which starts with do_action(…) for the right place to hook your new function to. Line 56 includes ‘do_action( ‘bp_profile_header_meta’ )’ . You can add the new code in your theme’s functions.php file, following the example provided at the WordPress Codex: add_action( $hook, $function_to_add, $priority, $accepted_args );

So you will start with:

Then you’ll use the BuddyPress function bp_profile_field_data() to retrieve and display the preference. The function bp_profile_field_data fetches and prints the value to screen (like the_content() does) and expects arguments in an array like this:

Since you want to show the color preference of the displayed user (the member whose profile you’re viewing) and bp_profile_field_data uses that member’s ID for its default, you only need to specify the ID or field name of the extended profile field. You can check this value by visiting the Users > Profile Fields page in the WordPress admin. The field name is displayed as the field’s title, and, if you hover over “Edit,” the field’s ID is visible in the url: http://example.com/wp-admin/users.php?page=bp-profile-setup&group_ >

In this case, you can use ‘Favorite Color’ or the ID, 2:

But there’s a snag: what if the user didn’t input a favorite color?

You can use the function bp_get_profile_field_data instead to retrieve the value. Then, if there is a value, you’ll be able to display it. The complete code:

If the member’s favorite color isn’t specified, then the function outputs nothing.

Профилирование и отладка php-приложений с помощью xhprof & FirePHP

Краткая справка

xhprof — php-расширение от facebook. Это иерархический профайлер, который позволяет собирать такую статистику как время выполнения каждой функции, использование памяти, время ожидания, количество вызовов и многое другое. Это расширение доступно из репозитория PECL: http://pecl.php.net/package/xhprof. Почитать документацию можно тут: http://php.net/xhprof.

FirePHP — это расширение для firebug, которое в связке со своим маленьким php-классом, позволяет транслировать в консоль firebug’а данные от php, например всякие var_dump и прочую отладочную информацию. Главный плюс этого расширения в том, что вся трансляция отладочной информации происходит через заголовки и не замусоривает страницы и вообще никак не ломает логику работы приложения. Официальный сайт: http://firephp.org/.

Основная идея.

Общий алгоритм профилирования заключается в следующем:

  1. В начале страницы включаем профайлинг с помощью xhprof_enable()
  2. В конце страницы выключаем профайлинг с помощью xhprof_disable() и сохраняем собранные данные с помощью save_run()
  3. Далее с помощью php-класса firephp передаем ссылку на данные профайлинга на клиентскую часть
  4. В консоли firebug’а открываем нужную нам информацию
  5. Радуемся 🙂

Еще хочется сказать, что, конечно, ручное добавление этих функций в свои php-скрипты — это здорово. Но хочется, чтобы эта информация всегда была под рукой во время разработки, и при этом не попадала на боевые сервера. Мы решаем эту задачу следующим образом:

В наших проектах почти во всех скриптах в начале подключается рабочий файлик с загрузчиком классов, подключением функций и прочими нужными штуками. Поэтому включение профайлинга мы вынесли в этот файл. А для того, чтобы иметь возможность включать/выключать отладочный режим по своему желанию добавили проверку на конфигурационную константу, плюс обернули эти проверки в некие мета-тэги, которые автоматически удаляются при сборке проекта. Тоже самое относится и к выключению профайлинга и записывании информации в заголовки с помощью firephp — эти задачи решает одна функция, которая вызывается в конце каждого php-скрипта и так же обернута в мета-тэги. Выглядит это примерно так:

// В конфиг-файле приложения прописаны вот такие константы

/** Режим работы среды окружения * */
define( «APPLICATION_ENV» , «dev» ); // dev — отладка | pro — продакшин
/** Путь до профайлера */
define( «XHPROF_ROOT» , __DIR__ . ‘/ExtProcs/debug/xhprof-0.9.2’ );

Читать еще:  Php server request uri

//— DEV_START
//— в режиме отладки подключаем debug библиотеки
if (APPLICATION_ENV === ‘dev’ ) <
// Подгружаем firephp
require_once(__DIR__ . ‘/includes/ExtProcs/debug/firephp/FirePHP.class.php’ );
//— подгружаем профайлер
require_once (XHPROF_ROOT . ‘/xhprof_lib/utils/xhprof_lib.php’ );
require_once (XHPROF_ROOT . ‘/xhprof_lib/utils/xhprof_runs.php’ );
// Инициализируем профайлинг с нужными флагами. Подробное описание флагов
// можно найти на php.net/manual/ru/xhprof.constants.php
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
>
//— DEV_END

// Ну и вот такая функция вызывается в конце каждого скрипта
// Ее вызов так же обернут в DEV_START и DEV_END

/**
* Создаем ссылку на результат профайлинга и выводим это в консоль
*/
function dev_boot_Down() <
if (APPLICATION_ENV === ‘dev’ ) <
// Инициализируем экземпляр firephp
$firephp = FirePHP::getInstance( true );
// Выключаем профайлинг и сохраняем данные
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_ >save_run($xhprof_data, «xhprof_testing» );
// Формируем ссылку на данные профайлинга и записываем ее в консоль
$link = «http://» . $_SERVER[ ‘HTTP_HOST’ ] . «/includes/ExtProcs/debug/xhprof-0.9.2/xhprof_html/index.php?run=<$run_ >;
$firephp->info($link, ‘profiling data’ );
>
>

* This source code was highlighted with Source Code Highlighter .

Не буду вдаваться в подробности установки данных расширений, ибо тут все просто. Скажу только про некоторые моменты настройки. В xhproof предусмотрена всего одна конфигурационная переменная — xhprof.output_dir, которая указывает на папку, куда будут сохраняться данные профайлинга. Поэтому убедитесь, что в указанную директорию у пользователя, из-под которого выполняются php-скрипты есть права на запись. Так что пропишите в свой php.ini что-то вроде этого:

[xhprof]
extension=xhprof.so
xhprof.output_dir=»/var/tmp/xhprof»

Так же не плохо поставить что-то типа dot или Graphviz для рисования графов вызовов. У меня под MacOS X стоит Graphviz.

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

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

А если перейти по ссылке [View Full Callgraph], то увидим граф вызовов функций нашего скрипта.

Ну, на этом, пожалуй, и все. Если у кого-то есть свои подходы к отладке и профилированию веб-приложений — с радостью послушаю.

P.S. Добавлю только, что во всем этом безобразии принимал активное участие товарищ kryapolov

UPD 1: Для Питонистов есть такой проектик как FirePy, который как ни сложно догадаться, позволяет транслировать в firebug данные из питона.

Профилирование PHP с XHprof

Профилирование приложения — это сбор данных о скорости выполнения различных участков программы (файлов и функций). Существует множество инструментов профилирования PHP, но не все инструменты подходят для проведения анализа прямо в продакшне.

XHProf — мега простой профайлер, который собирает статистику прямо во время работы приложения почти без оверхеда.

Зачем профилировать?

Если приложение начинает работать медленно, профилирование поможет узнать, какая именно часть тупит. Результат профилирования — это обычно список выполненных функций и времени их исполнения.

Профилирование стоит делать до любой оптимизации приложения. В противном случае — будете руководствоваться догадками. Скорее всего неправильными.

Проблема Xdebug

Xdebug — мощное решение для PHP. Но сама платформа Xdebug настолько тяжелая, что ее нельзя использовать на работающих сайтах. XDebug создает значительную нагрузку на ресурсы сервера и замедляет приложение.

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

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

XHProf

Установка

На Debian XHprof есть в sid пакетах, поэтому:

Читать еще:  Config update php

Вы также можете собрать XHprof самостоятельно.

Включение профилирования

Пусть у нас есть скрипт с таким кодом:

Проведем профилирование с помощью XHprof. Для этого на этой странице необходимо:

  1. Включить профайлер в самом начале.
  2. В самом конце программы остановить профайлер и сохранить полученные данные.

Это будет выглядеть так:

# Сохраняем результат профилирования в переменную $xhprof_data

  • Функция xhprof_enable() принимает в качестве аргументов флаги. XHPROF_FLAGS_CPU для фиксирования статистики процессора, XHPROF_FLAGS_MEMORY — для памяти, XHPROF_FLAGS_NO_BUILTINS — для игнорирования встроенных функций.
  • xhprof_disable() выключит профайлер и вернет собранную статистику.

Отчеты

Генерация

Собранные данные можно проанализировать в интерфейсе XHprof для построения отчетов. Для этого, необходимо скачать исходники XHprof:

После этого необходимо внести изменения в скрипт:

# Новый код сохраняет отчет для использования в графическом интерфейсе

Интерфейс для отчетов

Чтобы увидеть отчет, необходимо настроить виртуальный хост на папку /var/www/xhprof-0.9.4/xhprof_html. Например, в Nginx:

После этого появится список отчетов:

Таблица содержит список функций, которые были выполнены в рамках одной страницы с дополнительной информацией:

  • Calls — количество и процентное соотношение вызовов функции.
  • Incl. Wall Time — время выполнения функции с вложенными функциями.
  • Excl. Wall Time — время выполнения функции без вложенных функций.
  • Incl. CPU — процессорное время с вложенными функциями.
  • Excl. CPU — процессорное время без вложенных функций.
  • Incl. MemUse — потребление памяти с вложенными функциями.
  • Excl. MemUse — потребление памяти без вложенных функций.
  • Incl. PeakMemUse — максимальное потребление памяти с вложенными функциями.
  • Excl. PeakMemUse — максимальное потребление памяти без вложенных функций.

Графические отчеты

Чтобы построить графический отчет, убедитесь, что у Вас установлен graphviz:

После этого по ссылке [View Full Callgraph] будет доступна иерархия вызовов нашей страницы:

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

Агрегатные отчеты

Интерфейс XHprof также позволяет просматривать агрегатную информацию сразу с нескольких отчетов. Для этого run_id передаются через запятую:

Используйте XHprof для профилирования PHP прямо в продакшне.

Что делать, если часть логики написана на PHP, а часть на NodeJS

Улучшение производительности PHP приложений

Анализ медленных запросов (профилирование) в MySQL с помощью Percona Toolkit

Простое развертывание приложений и сервисов при помощи Subversion

Развертывание небольших веб-приложений и сервисов с помощью Git

Асинхронные задачи для оптимизации скорости сайта

Два варианта установки профайлера XHprof

Чем вызвана ошибка PHP: exec(): Unable to fork и как ее исправить

Анализ работы СУБД при помощи pgFouine

Фоновое выполнение в PHP с помощью fastcgi_finish_request

Как включить хранение PHP сессий в Memcache

Запуск и контроль PHP демона (фоновый процесс) для использования в очередях сообщений

Как настроить Nginx + PHP 7

Как эффективно использовать цикл foreach в PHP

Как работать с Vertica из PHP с модулем ODBC

Minification of JS/CSS/HTML in PHP

Короткие подсказки для создания быстрых PHP приложений

Методы асинхронных вызовов в PHP

Правильный подход для кэширования тяжелых запросов

Пример использования очередей на основе Gearman и PHP

Блог веб-разработчика

О разработке веб-приложений на Symfony

XHprof — профайлер PHP от Facebook

Профилирование кода позволяет выявить медленные участки в коде, что позволит в случае необходимости устранить их.

Новый PHP профайлер XHprof от компании Facebook — это альтернатива Xdebug (PHP профайлер Xdebug). XHprof был разработан специально для Facebook и начиная с март 2009 года его исходный код стал доступен для скачивания.

Как работает XHprof?

XHProf работает по принципу декомпозиции системы на вызовы функций (методов) и построения статистики в разрезе их ресурсопотребления. В результате получаем информацию: количество выделяемой памяти, количество вызовов функций, время исполнения и т.д.

Установка XHProf

С марта 2009 года XHprof доступен как пакет PECL, поэтому его установка не составит особого труда. Для Windows пакет не доступен.

Т.к. пакет xhprof находится в стадии beta, то нужно разрешить его установку:

Если попытаться установить пакет через PECL, то получим ошибку:

Поэтому выполняем следующие шаги:

Удалять папку xhprof-0.9.2 не следует, т.к. там содержатся утилиты GUI для визуального представления информации профайлера.

Читать еще:  Install index php

Подключаем модуль xhprof к PHP — редактируем файл php.ini (добавляем в конец файла):

Для папки «/var/tmp/xhprof» должен быть доступ на запись, т.к. туда будут сохраняться результаты профайлинга.

Перезагрузите Apache. При вызове phpinfo() появится информация, что подключен модуль xhprof — значит все работает.

Настройка XHProf UI (GUI)

В пакет XHprof входит очень удобный интерфейс для анализа отчетов профилирования. XHprof позволяет строить отчеты, как в текстовом так и графическом ввиде.

В установочной папке xhprof-0.9.2 Вы найдете папку xhprof_html и xhprof_lib, которые нам понадобятся:
• xhprof_html — доступ к GUI
• xhprof_lib — библиотека для отображения и анализа кода (computing flat profile info, computing diffs, aggregating data from multiple runs, etc.).

Папку xhprof_lib размещаем в /usr/local/share/php/ или /usr/local/lib/php/ в зависимости от ОС. Таким образом будет доступ к библиотеки будет глобальный. В нашем случае получится: /usr/local/share/php/xhprof_lib/. Или как вариант папку xhprof_lib можно положить в наш проект.

В зависимости от того как Вы настроете доступ к GUI xhprof, нужно положить xhprof_html в соответствующее место. К примеру, можно создать субдомен http://xhprof.project/ или положить в корень проекта http://xhprof/.

Небольшой пример использования

В качестве примера взят пример с сайта highload.com.ua:

В этом скрипте мы сравним отличие в эффективности работы встроенной функции array_intersect и ее самописного клона user_array_intersect. После описания функций мы подключили профайлер для генерации и сохранения отчета. Посмотрим на отчет:

Из отчета видно, что эффективность собственной реализации функции array_intersect в два раза меньше встроенной (еще одно напоминание об использовании стандартных средств прежде всего!). Небольшая справка по терминологии отчетов:

Incl[usive] Time — время, потраченное на функцию и на все функции, вызванные из нее
Excl[usive] Time — время, потраченное на функцию без учета времени на вложенные функции

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

Графические отчеты

XHprof позволяет строить графические отчеты. Для построения он использует внешний инструмент Graphviz, поэтому убедитесь, что он установлен. Графический отчет вышеуказанного скрипта выглядит так:

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

Профилирование production проектов

XHprof позволяет профилировать не только отдельные участки кода но и production проекты. Т.к. профилирование проектов в среде production процесс ресурсоемкий, то главный тут критерий — производительность. И XHprof тут прекрасно справляется, т.к. создан он был именно для таких целей. Во-первых XHprof написан на C, во-вторых имеет ряд настроек:

• Таймер CPU на Linux системах имеет большой оверхед, поэтому разработчики рекомендуют использовать профайлер в режиме «elapsed time + memory»:

• Сбор данных профайлера будет весьма точно отражать реальную картину, если его запускать не каждый раз, а случайно и равнораспределенно, например для запуска каждый сотый раз:

• Режим Lightweight Sampling — в этом режиме профилирование выполняется в течении короткого промежутка во времени (сэмплами) — 0.1 секунды

Пример профилирования production проекта

В качестве примера используем проект на Yii — Hello World!

Наш проект http://project/.
GUI нашего профайлера (содержимое папки xhprof_html) http://xhprof/.
xhprof_lib находится в «/usr/local/share/php/xhprof_lib».

Создаем 2 файла (header.php и footer.php).

header.php

footer.php

Для внедрения профайлера в наш проект есть 2 способа:

1) Создаем файл .htaccess

2) Добавляем вызов в файла в наш index.php

Загружаем страницу сайта. Внизу страницы появляется ссылка «Profiler output», которая ведет на GUI XHprof с уникальными идентификатором отчета. Каждый раз, когда мы обновляем страницу отчет перегенирируется и идентификатор изменится.

Показатели:
• Total Incl. Wall Time (microsec): 18,710 microsecs (время затраченное на выполнение функций с учетом ожидания ответов от сокетов, файловой системы и других ресурсов )
• Total Incl. CPU (microsecs): 16,309 microsecs (время затраченное на выполнение функций)
• Total Incl. MemUse (bytes): 527,604 bytes (использование памяти)
• Total Incl. PeakMemUse (bytes): 529,428 bytes (пиковое использование памяти)
• Number of Function Calls: 179 (количество вызовов функций)

Ссылка на основную публикацию
Adblock
detector