Расширение PHP с помощью C ++?

У меня есть интенсивная процедура, написанная на PHP, которую я хотел бы переносить на C ++ для повышения производительности. Есть ли способ написать плагин или расширение или что-то с помощью C ++ и связать его с PHP? БЕЗ ручной редактирования исходного PHP-источника?

Related of "Расширение PHP с помощью C ++?"

Я написал PHP-плагин на C ++ с помощью SWIG . Это выполнимо, но может потребоваться некоторое время, чтобы привыкнуть к циклу компиляции SWIG. Вы можете начать с документов SWIG для PHP .

Обновить
Как уже упоминалось в @therefromhere, я очень рекомендую вам получить книгу « Расширение и внедрение PHP» . Почти нет документации, которую можно найти в Интернете (по крайней мере, в конце 2008 года, начале 2009 года, когда я сделал свой PHP-плагин). Я должен был полагаться на книгу на все. Хотя иногда поиск кода Google полезен для поиска кода примера.

Как говорит Ремус , вы можете расширить PHP с помощью C / C ++ с помощью Zend API. Связанный учебник Sara Golemon – хорошее начало, и книга « Расширение и встраивание PHP тем же автором» охватывает тему гораздо более подробно.

Тем не менее, стоит отметить, что оба этих (и почти все, что я нашел в Интернете) сосредоточены на C и на самом деле не покрывают некоторые настройки, необходимые для работы C ++-расширений.

В файле config.m4 вам необходимо явно ссылаться на стандартную библиотеку C ++:

 PHP_REQUIRE_CXX() PHP_ADD_LIBRARY(stdc++, 1, PHP5CPP_SHARED_LIBADD) 

Любая компиляция библиотеки C ++ в файле config.m4 также потребует ссылки на C ++ lib:

 PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,, [ AC_MSG_ERROR([lib $LIBNAME not found.]) ],[ -lstdc++ -ldl ]) 

EDIT – и вот как указать g ++:

И последнее, и не в последнюю очередь, для выбора C ++, а не компилятора / компоновщика C при создании расширения, 6-й параметр для PHP_NEW_EXTENSION() должен быть "yes" . то есть:

 PHP_NEW_EXTENSION(your_extension, your_extension.cpp, $ext_shared, , "-Wall -Werror -Wno-error=write-strings -Wno-sign-compare", "yes") 

Из руководства по сборке PHP , параметры:

  1. Имя расширения
  2. Список всех исходных файлов, которые являются частью расширения.
  3. (необязательно) $ext_shared , значение, которое было определено configure при вызове PHP_ARG_WITH ()
  4. (необязательно) «SAPI-класс», только полезно для расширений, для которых требуется CGI или CLI SAPI. Во всех остальных случаях его следует оставить пустым.
  5. (необязательно) Список флагов, добавляемых в CFLAGS при построении расширения.
  6. (необязательно) Логическое значение, которое, если «да», заставит все расширение быть построено с использованием $ CXX вместо $ CC.

Я не мог понять, как заставить скрипт configure установить g ++ в качестве компилятора / компоновщика вместо gcc, поэтому закончил взломать Makefile командой sed, чтобы выполнить замену поиска в моем скрипте сборки bash:

 phpize ./configure --with-myextension if [ "$?" == 0 ]; then # Ugly hack to force use of g++ instead of gcc # (otherwise we'll get linking errors at runtime) sed -i 's/gcc/g++/g' Makefile make clean make fi 

Предположительно, есть команда automake , которая сделает этот взлом ненужным.

Сам PHP представляет собой набор свободно связанных библиотек. См. http://devzone.zend.com/article/1021 для учебника, как написать свой собственный.