Рубрики
Uncategorized

Краткое изложение расширенного написания PHP

Автор оригинала: David Wong.

Почему? расширять с помощью C

C статически скомпилирован, и эффективность его выполнения намного выше, чем у PHP-кода. Производительность одного и того же кода операции, разработанного на языке Си, будет в сотни раз выше, чем у PHP. Операции ввода-вывода, такие как curl, поскольку отнимают много времени в основном на iowait, расширение C не имеет очевидных преимуществ.

Кроме того, расширение C загружается при запуске процесса. PHP – код может работать только с данными жизненного цикла запроса. Расширение C имеет более широкий диапазон работоспособности.

Первый шаг

Загрузите исходный код PHP, например php -5.4.16. После распаковки введите каталог php-5.4.16 \ ext. Введите./ext_skel –. Мое следующее – это название расширения. После выполнения создается следующий каталог.

Ext_skel-это официальный PHP-инструмент для создания кода скелета расширения PHP.

Компакт-диск мой текст. Вы можете увидеть php_my следующим. Х, мой друг. C, config.m4 и другие файлы. Config.m4-это файл конфигурации инструмента Autoconf, который используется для изменения различных параметров компиляции.

Второй шаг

Измените файл config.m4 на

dnl PHP_ARG_WITH(myext, for myext support,

dnl Make sure that the comment is aligned:

dnl [ --with-myext       Include myext support])

Изменено на

PHP_ARG_WITH(myext, for myext support,

[ --with-myext       Include myext support])

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

Третий шаг

Измените PHP ﹣ myext. H, и смотрите PHP ﹣ функцию (подтверждение ﹣ myext ﹣ скомпилировано); вот часть объявления функции расширения, вы можете добавить строку PHP ﹣ функции (myext ﹣ HelloWorld); это означает, что объявлена функция расширения myext ﹣ HelloWorld.

Затем измените мой внешний вид. C, который является частью реализации функции расширения.

const zend_function_entry myext_functions[] = {

    PHP_FE(confirm_myext_compiled, NULL)      /* For testing, remove later. */

    PHP_FE(myext_helloworld, NULL)

    PHP_FE_END   /* Must be the last line in myext_functions[] */

};

Этот код регистрирует указатель функции на движок Zend, добавляя строку php_fe (mytext_hello world, null) (без точки с запятой после этого).

Четвертый шаг

В конце моего пребывания. C, добавьте код выполнения моего ext? Адский мир.

PHP_FUNCTION(myext_helloworld)

{

    char *arg = NULL;

  int arg_len, len;

  char *strg;

  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {

    return;

  }

  php_printf("Hello World!\n");

  RETRUN_TRUE;

}

Zend_parse_parameters используется для приема параметров, передаваемых PHP, а макрос return_xxx используется для возврата данных PHP.

Пятый шаг

В каталоге my ext выполните команду phpize,./настройка, создание и установка. Затем измените php.ini на add.so

Выполнить PHP – R “мой текст? Привет, мир (“тест”);”, и выведите Привет, мир!