2009-04-01 18 views

Respuesta

13

PHP es de diseño modular - se compone del "motor" y muchas extensiones, algunas de las cuales son esenciales (por ejemplo, extensión "estándar") y algunos son opcionales. Se pueden compilar o cargar dinámicamente (a través de la configuración php.ini o la función dl()).

Puede escribir fácilmente su propia extensión de PHP en C/C++, si está dispuesto a aprender la API. Comience con la documentación sobre cómo "hack the Zend Engine".

7

Puede usar el código compilado en C++ dentro de php utilizando la función system() y llamando a su programa a través del sistema operativo (tal como lo haría en la línea de comandos).

+2

¿Por qué esto obtuvo un voto negativo? ¡Es factible y podría resolver el problema! Voto abajo eliminado. – karim79

+2

¿es posible escribir la biblioteca php usando C y C++? ¿El sistema() llama REALMENTE la respuesta? ;)) – nothrow

+1

He visto el argumento de que los programas separados son una forma mejor de compartir el código que las bibliotecas. Incluso puede tener sentido bajo ciertas circunstancias, y la creación del proceso es lo suficientemente liviana en Unix para que funcione lo suficientemente bien. – RBerteig

3

Es posible escribir extensiones php en C++ (pero también debe escribir C fachada). No es trivial, y yo diría, que si preguntas en lugar de buscar en el código PHP, no estás tan familiarizado con C y cómo funciona PHP dentro, y debido a su mala documentación, es una mala idea para ti. para escribir la biblioteca en C.

EDITAR: hay un ... un tutorial básico sobre zend. http://devzone.zend.com/node/view/id/1021, como lo estoy buscando, tal vez la documentación cambió desde mi PHP veces :)

0

PHP está llamando funciones de bibliotecas preconstruidas para muchas de las cosas que hace. Si tiene una biblioteca propia, escrita en C o C++, puede crear enlaces PHP para ella y luego llamarla desde el resto de su código PHP como lo haría con cualquier otra función de PHP.

Tome la función Mcrypt por ejemplo, esto será simplemente un envoltorio PHP a la biblioteca libMyCrypt.

Es interesante que diga "porque realmente es necesario en aplicaciones empresariales". ¿Qué le falta al conjunto de la biblioteca actual de PHP que necesita?

+1

A veces tienes un algoritmo que se debe hacer en prallel, por ejemplo, y el rendimiento es un gran problema y quieres usarlo en php, puedes escribirlo en C y usarlo en php – Pooria

3

Puede escribir extensiones en casi cualquier idioma y usarlas con PHP a través de una biblioteca enlazada dinámicamente.

2

Puede construir extensiones de objetos compartidos que php puede cargar. Hay un breve tutorial al respecto en http://devzone.zend.com/node/view/id/1021

+0

Falta el enlace ¿Puedo obtener el enlace? . Esto es lo que estoy esperando. – 2vision2

1

Puede escribir su código en C/C++ y compilarlo en un EXE. Luego puede llamar a exec(); desde PHP y ejecuta el código.

11

Es posible que desee comprobar SWIG, una herramienta general para envolver bibliotecas para que puedan ser llamadas desde una variedad de idiomas. PHP es compatible con SWIG, al igual que Perl y Lua (los objetivos que he utilizado personalmente).Citando de la lista de características en el SWIG website:

TRAGO actualmente genera código de contenedor durante dieciocho diferentes objetivo idiomas:

  • Allegro CL
  • C#
  • CFFI
  • CLISP
  • Pollo
  • Guile
  • Java
  • Lua
  • Modula-3
  • MzScheme
  • ocaml
  • Octave
  • Perl
  • PHP
  • Python
  • R
  • Rubí
  • Tcl
  • UFFI

Además de esto, el árbol de análisis sintáctico se puede exportar como XML y Lisp s-expresiones. El trabajo experimental es también disponible para un módulo de Pike.

Algunas de sus características dependen del soporte de fondo en los generadores de envoltorio por idioma, pero en general proporciona envoltorios fáciles de usar para pasar todos los tipos de valores de datos simples dentro y fuera de funciones. Cuando el idioma meta tiene el concepto, generalmente también puede mapear modelos de objetos.

Cuestiones relacionadas