2010-05-18 28 views
7

Estoy comenzando con PHP para páginas web dinámicas. Tengo algunas bibliotecas escritas en ANSI C para obtener/configurar parámetros y otras cosas de propiedad. Me pregunto, ¿hay una solución simple para usar un contenedor dentro de PHP para llamar a estas funciones? ¿Hay una clase/biblioteca ya existente? ¿Cuál sería la mejor práctica para hacer esto por mi cuenta? No quiero hacer llamadas a aplicaciones externas y usar stdin/stdout!PHP: Cómo llamar a las funciones de la biblioteca estándar

¿Hay un ejemplo simple disponible? No quiero profundizar en la documentación de Zend por ahora, solo necesito una idea de la complejidad.

+0

Posible duplicado de [Llamar a la función de biblioteca C/C++ de PHP] (http://stackoverflow.com/questions/2479402/calling-cc-library-function-from-php) –

Respuesta

6

¿Puede empaquetar sus bibliotecas en una DLL? Si es así, puede llamarlos a través de la API de PHP.

PHP COM Docs: http://us3.php.net/manual/en/book.com.php

Ejemplo de código:

<?php 
$com = new COM("DynamicWrapper"); 
$com->Register("KERNEL32", "Beep", "i=ll", "f=s", "r=l"); 
$com->Beep(800, 10); 

lo contrario se puede escribir una extensión que contiene una función de contenedor personalizado (es decir, execute_through_wrapper ('yourfunc')). Aquí es un documental sobre la escritura de funciones PHP en C

http://php.net/manual/en/internals2.funcs.php

Editar:
http://abhinavsingh.com/blog/2008/12/php-extensions-how-and-why/

aquí es un rápido tutorial sobre cómo escribir extensiones en C. No debería ser demasiado difícil de escribe una función de envoltura. Una vez que haya creado la extensión, puede cargarse dinámicamente a través de dl() (muy peligroso y depreciado).

http://us2.php.net/manual/en/function.dl.php

Esas son las únicas opciones en su caso. No hay un equivalente de Linux (.so loader) del cargador dll (es una llamada api relacionada con win32).

+0

Olvidé mencionar, nuestra operación sistema es Linux para este proyecto.Pero debería ser posible construir una biblioteca compartida para esta libs. – Andi

+0

Gracias John, tomó un tiempo leer estos artículos, ¡y creo que escribir una extensión no es demasiado complicado! – Andi

+0

@Andi Np :), ¡buena suerte! –

2

También podría tener gearman actuar como intermediario.

Gearman proporciona un marco genérico de aplicación de subcontratar el trabajo a otros máquinas o procesos que son mejores adecuado para hacer el trabajo. Le permite hacer el trabajo en paralelo, cargar el proceso de balance y llamar a las funciones entre idiomas. Puede ser utilizado en una variedad de aplicaciones, desde sitios web de alta disponibilidad a el transporte de eventos de replicación de base de datos . En otras palabras, es el sistema nervioso de cómo se comunica el procesamiento distribuido .

+0

Wow - esto es muy nuevo en ¡yo! Parece un marco de cliente/servidor RPC ligero, ¿no? Tal vez un poco exagerado para una aplicación pequeña, pero para un sistema complejo puede ser muy útil. ¿Puedo usarlo para la comunicación entre procesos múltiples, escritos en PHP, C, C++, etc.? – Andi

0

En http://pear.php.net/ Encontré una extensión llamada "inline_c". Lamentablemente, no me mantienen. Pero parece que este sería el kinde de las cosas que preferiría.

Cuestiones relacionadas