Как сделать расширение PHP

Я знаю, что вы можете технически сделать расширение PHP, просто создав файл PHP и используя require_once .

Но оптимизировала бы производительность, если бы вы написали расширение на C или C ++.

Если да, то как бы вы сделали для этого «привет-мир»?

Solutions Collecting From Web of "Как сделать расширение PHP"

Вы можете включить автономную программу C / C ++ на свой сайт PHP, просто выполнив ее и передав вывод в браузер. Что касается действительно взаимодействия, то не стоит тратить время на создание библиотеки, содержащей специфические для сайта функции. Это просто не делается, кроме как взаимодействовать с другими существующими библиотеками (MySQL, imagemagick и т. Д.).

Программирование для Интернета не похоже на разработку приложений. Оптимизация битов вашего кода путем написания их на «более быстрых» языках (аналогично написанию небольших, жестких битов цикла вашей C ++-программы в сборке) не стоит времени разработки. Вам лучше поддерживать ваше приложение легко поддерживаемым, поэтому языки сценариев доминируют в Интернете.

Программное обеспечение, написанное на C / C ++, конечно, работает быстрее, чем код в PHP. И вы можете написать расширение в C / C ++ и связать его с PHP. Руководство по PHP охватывает это здесь: http://php.net/manual/en/internals2.php

Другие ответы дают ссылки на другие руководства для написания расширений PHP, и вы можете google для «учебника по расширению PHP», чтобы найти больше.

Но стоит ли это делать в вашем приложении, это еще одна история. Большинство экспертов согласны с тем, что PHP работает очень хорошо, достаточно быстро для 98% приложений. Экземпляры, в которых PHP недостаточно быстро, в общем не связаны с языком, но неэффективная архитектура приложения, созданная программистом. Это слабость, которая не может быть устранена путем перезаписи частей вашего приложения на C / C ++.

Я знаю, что вы можете технически сделать расширение PHP, просто создав файл PHP и используя require_once .

Основой этой функциональности является оператор include , который включает и оценивает указанный файл. Расширение не является правильным термином, потому что вы просто включаете другой файл сценария PHP. Расширения PHP предоставляют дополнительные функции для языка в виде скомпилированного модуля.

Но оптимизировала бы производительность, если бы вы написали расширение на C или C ++.

Да, это оптимизирует производительность. Вот почему были написаны PHP-расширения, такие как CPhalcon или YAF .

Как сделать расширение PHP Hello World?

Я опишу, как вы можете построить PHP-расширение Hello World в пять шагов.

Требуется операционная система на базе Debian, потому что нам нужно получить некоторые инструменты и зависимости с помощью apt-get.

Шаг 1 – Настройка среды сборки / требований

Расширение PHP – это скомпилированный C-код. Нам нужна оболочка (она уже должна быть установлена), редактор (ваш выбор), компилятор (здесь мы будем использовать GCC), сами PHP и зависимости разработки PHP для сборки.

 sudo apt-get install build-essential php7.0 php7.0-dev 

Шаг 2 – Конфигурация

Нам нужно описать наше расширение и файлы, образующие его в базовом файле конфигурации:

Файл: config.m4

 PHP_ARG_ENABLE(php_helloworld, Whether to enable the HelloWorldPHP extension, [ --enable-helloworld-php Enable HelloWorldPHP]) if test "$PHP_HELLOWORLD" != "no"; then PHP_NEW_EXTENSION(php_helloworld, php_helloworld.c, $ext_shared) fi 

Как вы можете видеть, NEW_EXTENSION содержит файл C: php_helloworld.c .

Шаг 3 – Код

Давайте создадим код C для нашего расширения.

Во-первых, мы создаем файл заголовка:

php_helloworld.h

 // we define Module constants #define PHP_HELLOWORLD_EXTNAME "php_helloworld" #define PHP_HELLOWORLD_VERSION "0.0.1" // then we declare the function to be exported PHP_FUNCTION(helloworld_php); 

Во-вторых, мы создаем исходный файл:

php_helloworld.c

 // include the PHP API itself #include <php.h> // then include the header of your extension #include "php_helloworld.h" // register our function to the PHP API // so that PHP knows, which functions are in this module zend_function_entry helloworld_php_functions[] = { PHP_FE(helloworld_php, NULL) {NULL, NULL, NULL} }; // some pieces of information about our module zend_module_entry helloworld_php_module_entry = { STANDARD_MODULE_HEADER, PHP_HELLOWORLD_EXTNAME, helloworld_php_functions, NULL, NULL, NULL, NULL, NULL, PHP_HELLOWORLD_VERSION, STANDARD_MODULE_PROPERTIES }; // use a macro to output additional C code, to make ext dynamically loadable ZEND_GET_MODULE(helloworld_php) // Finally, we implement our "Hello World" function // this function will be made available to PHP // and prints to PHP stdout using printf PHP_FUNCTION(helloworld_php) { php_printf("Hello World! (from our extension)\n"); } 

Шаг 4 – Сборка

Теперь мы готовы построить расширение.

Сначала мы создаем среду сборки для расширения PHP:

 phpize 

Затем мы настраиваем сборку и включаем наше расширение:

 ./configure --enable-php-helloworld 

Наконец, мы можем его построить:

 make sudo make install 

Шаг 5 – Тест

Чтобы протестировать наше расширение PHP, загрузите helloworld_php.so расширения helloworld_php.so и выполните нашу функцию helloworld_php() :

php -d extension=php_helloworld.so -r 'helloworld_php();'

Готово 🙂


Основываясь на Windows

Если вы попытаетесь создать Windows (YIKES!), Вам нужно немного отрегулировать шаги:

Шаг 2 – Конфигурация

Файл: config.w32

 ARG_ENABLE("helloworld", "helloworld support", "yes"); if (PHP_HELLOWORLD == "yes") { EXTENSION("helloworld", "php_helloworld.c"); } 

Шаг 4 – Сборка

Используйте nmake вместо make .


Список полезных ресурсов:

Вот учебник по расширениям PHP. Будет ли он оптимизировать производительность или нет, это зависит от того, что вы пытаетесь обернуть на своем расширении. Но я бы не писал PHP-расширение только для целей оптимизации. Я бы написал один, если у меня нет выбора. IE Обтекание общей библиотеки C, чтобы сделать ее доступной непосредственно в PHP …