Можно ли написать код C или С++ и скомпилировать его в двоичные файлы, а затем использовать эти двоичные файлы с php? Можно ли также написать библиотеку php с помощью C и С++?
Если да, расскажите, как я могу это сделать?
Можно ли написать код C или С++ и скомпилировать его в двоичные файлы, а затем использовать эти двоичные файлы с php? Можно ли также написать библиотеку php с помощью C и С++?
Если да, расскажите, как я могу это сделать?
PHP является модульным в дизайне - он состоит из "движка" и многих расширений, некоторые из которых являются существенными (например, "стандартное" расширение), а некоторые необязательны. Они могут быть скомпилированы или загружены динамически (с помощью настроек php.ini или функции dl()
).
Вы можете легко написать собственное расширение PHP в C/С++, если вы хотите изучить API. Начните с документации о том, как "взломать Zend Engine" .
Возможно, вы захотите проверить SWIG, общий инструмент для упаковки библиотек, чтобы они могли быть вызваны с разных языков, PHP поддерживается SWIG, как и Perl и Lua (цели, которые я лично использовал). Цитата из списка функций на веб-сайте SWIG:
В настоящее время SWIG генерирует код оболочки для восемнадцати различных целей Языки:
- Allegro CL
- С#
- CFFI
- CLISP
- Цыпленок
- Коварство
- Java
- Lua
- Модуле-3
- Mzscheme
- OCAML
- Октава
- Perl
- PHP
- Python
- R
- рубин
- Tcl
- UFFI
В дополнение к этому дерево синтаксического анализа могут быть экспортированы как XML и LispS-выражение. Экспериментальная работа также доступен для модуля Pike.
Некоторые из его функций зависят от внутренней поддержки в генераторах на каждом языке, но в целом он предоставляет простые в использовании обертки для передачи всех типов значений равных данных в функциях и из них. Там, где целевой язык имеет концепцию, он обычно может также отображать объектные модели.
Вы можете использовать скомпилированный код С++ внутри php, используя функцию system() и вызывая вашу программу через операционную систему (как и в командной строке).
Можно писать PHP-расширения в С++ (но вы также должны написать 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/С++ и скомпилировать его в EXE. Затем вы можете вызвать exec(); от PHP и выполнить код.
PHP вызывает функции из предварительно построенных библиотек для многих вещей, которые он делает. Если у вас есть собственная библиотека, написанная на C или С++, вы можете создавать привязки PHP для нее, а затем вызывать ее из остальной части вашего PHP-кода, как и с любой другой функцией PHP.
Возьмите функцию Mcrypt, например, это будет просто оболочкой PHP в библиотеке libMyCrypt.
Интересно, что вы говорите "потому что это действительно необходимо в корпоративных приложениях". Что отсутствует в текущей библиотеке PHP, которая вам нужна?