Почему? расширять с помощью 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 “мой текст? Привет, мир (“тест”);”, и выведите Привет, мир!