Новые книги

Розничные компании и их Private labels, т. е. собственные торговые марки, завоевывают новые ниши на рынке. Но производители традиционных брендов по-прежнему создают стратегии, основанные на отживших мифах и представлениях о собственных марках розничных сетей. Если производители традиционных брендов не хотят проиграть, им жизненно необходим совершенно другой подход. Авторы книги развенчивают устойчивые мифы о марках розничных сетей, описывают новые, многоуровневые стратегии, которые розничные сети используют в отношении собственных марок, и предлагают производителям разработать эффективные ответные меры. Авторы призывают производителей принять брошенный вызов и идти в атаку! Основанная на исследовании эмпирического материала, собранного в разных странах мира, и на беспрецедентном обзоре мнений потребителей и анализе статистики книга содержит стратегии действий и производителей, и торговых сетей. Авторы предоставляют инструментарий, который поможет успешно конкурировать – или сотрудничать – с поставщиками товаров под марками розничных сетей; объясняют, почему сейчас производители традиционных брендов должны считаться с марками розничных сетей. Книга будет интересна руководителям производственных и торговых компаний, маркетологам, экспертам. Читатели найдут в книге много интересных фактов об известных магазинах и товарах.
Фризен Ирина Григорьевна – кандидат педагогических наук, преподаватель информационных технологий, автор многочисленных работ в сфере информационных технологий.

Настоящее учебное пособие написано в соответствии с государственной программой изучения дисциплины для средних специальных учебных заведений по специальности 230103 «Автоматизированные системы обработки информации и управления».

Офисное программирование

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

Учебное пособие ставит перед собой цель помочь студентам изучить данную дисциплину в полном объеме, отвечающем требованиям государственного стандарта по дисциплине.

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

В учебном пособии рассматривается более 60 задач, сопровождаемых 130 рисунками и подробными объяснениями.

Создание Расширений



Учебник РНР
Назад Вперёд

Глава 29. Создание расширений

Содержание
Компиляция модулей

Мы начнём с создания очень простого расширения, которое первоначально реализует функцию, возвращающую целое число, принятое ей в качестве параметра. В Листинге 9.3 дан исходник.

Рисунок 29-1. Листинг 9.3. Простое расширение.
/* включить/include стандартный header */
#include "php.h"

/* объявление экспортируемой функции */
ZEND_FUNCTION(first_module);

/* скомпилированный список функций, так что Zend знает, что находится в этом модуле */
zend_function_entry firstmod_functions[] =
{
    ZEND_FE(first_module, NULL)
    {NULL, NULL, NULL}
};

/* скомпилированная информация модуля */
zend_module_entry firstmod_module_entry =
{
    STANDARD_MODULE_HEADER,
    "First Module",
    firstmod_functions,
    NULL, NULL, NULL, NULL, NULL,
    NO_VERSION_YET,
    STANDARD_MODULE_PROPERTIES
};

/* реализуется стандартная "заглушка/stub" для введения в Zend */
#if COMPILE_DL_FIRST_MODULE
ZEND_GET_MODULE(firstmod)
#endif

/* реализуется функция, которая должна стать доступной для PHP */
ZEND_FUNCTION(first_module)
{
    long parameter;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &parameter) == FAILURE) {
        return;
    }

    RETURN_LONG(parmeter);
}

В этом коде содержится завершённый PHP-модуль. Мы коротко разъясним исходный код в деталях, но сначала необходимо обсудить процесс построения/build. (Это даст возможность самым нетерпеливым поэкспериментировать, прежде чем мы углубимся в дискуссию об API.)

Компиляция модулей

Существуют три основных способа компиляции модулей:

  • Использовать предоставляемый "make"-механизм в директории dl.

  • Использовать предоставляемый "make"-механизм в директории ext, что позволяет также строить динамически загружаемые модули.

  • Компилировать исходник вручную.

Предпочтителен второй метод, так как в PHP 4.0 он стал стандартизованным сложным процессом построения. Такое усложнение имеет также, к сожалению, и недостатки, - в нём трудно разобраться. Для этого далее в этой главе будет дано развёрнутое объяснение, но пока поработаем с файлами по умолчанию.

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

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

Компиляция с использованием Make. Для компилирования исходников с использованием стандартного механизма скопируйте всех субдиректории в директорию ext вашего исходного дерева PHP. Затем запустите buildconf, который создаст новый скрипт configure, содержащий необходимые опции. По умолчанию все сэмплы исходников отключены/disabled, поэтому вы можете не бояться прерывания вашего процесса построения.

После запуска buildconf, configure --help покажет следующие дополнительные модули:

  --enable-array_experiments   BOOK: Enables array experiments
  --enable-call_userland       BOOK: Enables userland module
  --enable-cross_conversion    BOOK: Enables cross-conversion module
  --enable-first_module        BOOK: Enables first module
  --enable-infoprint           BOOK: Enables infoprint module
  --enable-reference_test      BOOK: Enables reference test module
  --enable-resource_test       BOOK: Enables resource test module
  --enable-variable_creation   BOOK: Enables variable-creation module

Модуль, показанный ранее в Листинге 9.3, может быть включён с помощью --enable-first_module или --enable-first_module=yes.

Компилирование вручную. Чтобы скомпилировать ваши модули вручную, вам нужно выполнить следующие команды:

АкцияКоманда
Компиляцияcc -fpic -DCOMPILE_DL=1 -I/usr/local/include -I. -I.. -IZend -c -o <your_object_file> <your_c_file>
Компоновка/Linkingcc -shared -L/usr/local/lib -rdynamic -o <your_module_file> <your_object_file(s)>

Команда компиляции модуля просто инструктирует компилятор: генерировать позиционно независимый код (-fpic нельзя опускать), и дополнительно определяет константу COMPILE_DL, чтобы сообщить коду модуля, что он компилируется как динамически загружаемый модуль (вышеприведённый тестовый модуль проверяет это; мы обсудим это кратко). После этого специфицируется несколько стандартных include-путей, которые должны использоваться как минимальный набор при компиляции исходников.

Примечание: все include-пути в примере являются относительными к директории ext. Если вы компилируете из другой директории, измените пути соответствующим образом. Необходимые элементы находятся в директории PHP, директории Zend и (если необходимо) в директории , в которой находятся модули.

Команда link (компоновки) это также обычная команда, выполняющая компоновку динамического модуля.

Вы можете включить в команду компоновки опции оптимизации, отсутствующие в нашем примере (но некоторые из них включены в makefile-шаблон, описанный в предыдущем разделе).

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

Назад Оглавление Вперёд
Система автоматического построения РНР ВверхИспользование расширений