Новые книги

PHP, в настоящее время, – один из наиболее популярных языков для реализации веб-приложений. Данный курс посвящен изучению его основ. Акцент делается на практическое применение полученных навыков.

Язык PHP был создан для решения конкретной практической задачи в среде интернет (какой именно можно узнать, прочитав первую лекцию курса). Мы тоже постараемся не отвлекаться слишком сильно на теоретические рассуждения, и будем стремиться к решению какой-нибудь конкретной задачи в каждой из лекций. Большинство примеров взяты из реально существующей системы: виртуального музея истории информатики. Первая часть курса посвящена изучению основ синтаксиса и управляющим конструкциям. После этого рассматривается технология клиент-сервер, как основная сфера приложения языка PHP. Затем переходим к изучению наиболее полезных на наш взгляд встроенных функций и решению с их помощью практических задач. Хотя объектная модель в языке PHP не самая богатая, ее принципиальное наличие позволяет естественным образом описывать объектные модели данных. В качестве базовой модели будет рассмотрена модель документа виртуального музея информатики. После этого будет рассмотрен ряд прикладных аспектов: работа с файловой системой, с БД, строками, сессиями, DOM XML - все это позволит рассмотреть ключевые задачи практического использования языка.
В последние десятилетия технологии коммуникации развивались так бурно, что большинству из нас трудно сейчас представить свою жизнь без мобильной связи и Интернета. Всемирная паутина – это огромная территория без границ и почти без правил. И как и в реальном мире, эту территорию «населяют» не только мирные обыватели, но и преступники всех мастей – от брачных аферистов и мошенников на доверии до наркоторговцев и наемных убийц. О том, какие опасности подстерегают пользователя в Интернете и как они проникают в нашу повседневную жизнь, расскажет эта книга, написанная легким, доступным языком с привлечением множества примеров, в том числе из личного опыта автора.

Знакомства в Интернете: как обезопасить себя на первом свидании;

Как защитить свои личные данные от фишинга;

Почему сетевая анонимность – это миф;

Для чего нужен родительский контроль;

Чем опасна игровая зависимость;

Нужна ли нам киберполиция.

Филипп Гросс-Днепров – блогер, интернет-деятель, постоянный гость передачи Владимира Соловьева «Полный контакт» на радио «Вести-FM». Соучредитель и вице-президент компании REG.RU – одного из крупнейших в Европе регистраторов доменных имен. Занимает активную социальную позицию по защите прав и свобод человека, выступает активным участником движения за соблюдение правового порядка в российском сегменте сети Интернет.

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

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

Глава 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 требует длинных инструкций и не рассматривается здесь. (Не очень эффективно вводить все эти команды вручную.)

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