Возможно ли написать некоторый код на C или C ++ и скомпилировать их в двоичные файлы, а затем использовать эти двоичные файлы с php? Можно ли также написать библиотеку php с помощью C и C ++?
Если да, расскажите, как я могу это сделать?
PHP является модульным в дизайне – он состоит из «движка» и многих расширений, некоторые из которых являются существенными (например, «стандартное» расширение), а некоторые необязательны. Они могут быть скомпилированы или загружены динамически (через настройки php.ini или функцию dl()
).
Вы можете легко написать собственное расширение PHP в C / C ++, если вы хотите изучить API. Начните с документации о том, как «взломать Zend Engine» .
Возможно, вы захотите проверить SWIG , общий инструмент для упаковки библиотек, чтобы их можно было вызывать на разных языках. PHP поддерживается SWIG, как и Perl и Lua (цели, которые я лично использовал). Цитата из списка функций на веб-сайте SWIG :
В настоящее время SWIG генерирует код оболочки для восемнадцати различных языков-мишеней:
- Allegro CL
- C #
- CFFI
- CLISP
- Курица
- коварство
- Ява
- Lua
- Модуле-3
- Mzscheme
- OCAML
- октава
- Perl
- PHP
- питон
- р
- Рубин
- Tcl
- КФП
В дополнение к этому дерево синтаксического анализа может быть экспортировано как XML и Lisp s-выражения. Экспериментальная работа также доступна для модуля Pike.
Некоторые из его функций зависят от базовой поддержки в генераторах-оболочках на каждом языке, но в целом он предоставляет простые в использовании обертки для передачи всех типов значений равных данных в и из функций. Там, где целевой язык имеет концепцию, он может также отображать объектные модели.
Вы можете использовать скомпилированный код C ++ внутри php, используя функцию system () и вызывая вашу программу через операционную систему (как и в командной строке).
Возможно писать php-расширения в C ++ (но вы также должны писать C-фасад). Это не тривиально, и я бы сказал, что если вы спросите вместо того, чтобы смотреть в PHP-код, вы не очень знакомы с C и как работает PHP внутри, и из-за плохой документации это плохая идея для вас написать библиотеку в C.
EDIT: есть … некоторый базовый учебник по zend. http://devzone.zend.com/node/view/id/1021 , поскольку я изучаю его, возможно, документация изменилась с моего PHP раза 🙂
Вы можете писать расширения практически на любом языке и использовать их с помощью PHP через динамически связанную библиотеку.
Вы можете создавать расширения общих объектов, которые php может загрузить. На этом коротком учебнике по адресу http://devzone.zend.com/node/view/id/1021
Вы можете написать свой код на C / C ++ и скомпилировать его в EXE. Затем вы можете вызвать exec (); от PHP и выполнить код.
PHP вызывает функции из предварительно построенных библиотек для многих вещей, которые он делает. Если у вас есть собственная библиотека, написанная на C или C ++, вы можете создавать привязки PHP для нее, а затем вызывать ее из остальной части вашего PHP-кода, как и с любой другой функцией PHP.
Возьмем, например, функцию Mcrypt, это будет просто оболочка PHP в библиотеке libMyCrypt.
Интересно, что вы говорите «потому что это действительно необходимо в корпоративных приложениях». Что отсутствует в текущей библиотеке PHP, которую вам нужно?