Можно ли использовать бинарные файлы C ++ из php - PullRequest
21 голосов
/ 01 апреля 2009

Можно ли написать код на C или C ++ и скомпилировать в двоичные файлы, а затем использовать эти двоичные файлы с php? Можно ли также написать библиотеку php с использованием C и C ++?

Если так, скажите, пожалуйста, как я могу это сделать?

Ответы [ 8 ]

14 голосов
/ 01 апреля 2009

PHP имеет модульный дизайн - он состоит из «движка» и множества расширений, некоторые из которых являются существенными (например, «стандартное» расширение), а некоторые являются необязательными. Они могут быть скомпилированы или загружены динамически (через настройки php.ini или функцию dl()).

Вы можете легко написать собственное расширение PHP на C / C ++, если хотите изучать API. Начните с документации о том, как "взломать Zend Engine" .

12 голосов
/ 02 апреля 2009

Возможно, вы захотите проверить SWIG , общий инструмент для обёртывания библиотек, чтобы их можно было вызывать из разных языков. SWIG поддерживает PHP, как и Perl и Lua (цели, которые я лично использовал). Цитирование из списка функций на веб-сайте SWIG :

SWIG в настоящее время генерирует код оболочки для восемнадцати различных целей Языки:

  • Allegro CL
  • C #
  • CFFI
  • CLISP
  • Куриное
  • Коварство
  • Java
  • Lua
  • Modula-3
  • Mzscheme
  • OCAML
  • Octave
  • Perl
  • PHP
  • Python
  • R
  • рубин
  • Tcl
  • UFFI

В дополнение к этому, дерево разбора можно экспортировать как XML и Lisp S-выражение. Экспериментальная работа также доступно для модуля Pike.

Некоторые его функции зависят от серверной поддержки в генераторах оболочек для каждого языка, но в целом они предоставляют простые в использовании оболочки для передачи всех типов значений простых данных в функции и из функций. Там, где у целевого языка есть концепция, он обычно может отображать и объектные модели.

7 голосов
/ 01 апреля 2009

Вы можете использовать скомпилированный код C ++ внутри php, используя функцию system () и вызывая вашу программу через операционную систему (так же, как в командной строке).

3 голосов
/ 01 апреля 2009

Вы можете писать расширения практически на любом языке и использовать их с PHP через динамически связанную библиотеку.

3 голосов
/ 01 апреля 2009

Можно писать расширения php на C ++ (но вы также должны написать фасад C). Это не тривиально, и я бы сказал, что если вы спросите, вместо того, чтобы изучать код PHP, вы не очень знакомы с C и тем, как работает PHP внутри, и из-за плохой документации это плохая идея написать библиотеку на кл.

РЕДАКТИРОВАТЬ: есть ... базовое руководство по Zend. http://devzone.zend.com/node/view/id/1021, как я понимаю, возможно, документация изменилась со времен моего PHP:)

2 голосов
/ 01 апреля 2009

Вы можете создавать расширения общих объектов, которые затем может загружать php. На это есть краткое руководство по http://devzone.zend.com/node/view/id/1021

1 голос
/ 01 апреля 2009

Вы можете написать свой код на C / C ++ и скомпилировать его в EXE. Затем вы можете вызвать exec (); из PHP и выполнить код.

0 голосов
/ 01 апреля 2009

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

Возьмем, к примеру, функцию Mcrypt, это будет просто оболочка PHP для библиотеки libMyCrypt.

Интересно, что вы говорите, "потому что это действительно необходимо в корпоративных приложениях". Чего не хватает в текущем наборе библиотек PHP, который вам нужен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...