Я знаю, что вы можете технически сделать расширение PHP, просто создав файл PHP и используя require_once
.
Но оптимизировала бы производительность, если бы вы написали расширение на C или C ++.
Если да, то как бы вы сделали для этого «привет-мир»?
Вы можете включить автономную программу 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 …