2010-05-18 14 views
7

Sto iniziando con PHP per le pagine Web dinamiche. Ho alcune librerie scritte in ANSI C per ottenere/impostare parametri e altre cose proprietarie. Mi chiedo, esiste una soluzione semplice per utilizzare un wrapper all'interno di PHP per chiamare queste funzioni? Esiste una classe/libreria già esistente? Quale sarebbe la migliore pratica per farlo da solo? Non voglio fare chiamate ad applicazioni esterne e usare stdin/stdout!PHP: Come chiamare le funzioni della libreria standard

Esiste un semplice esempio? Per ora non voglio scavare nella documentazione di Zend, ho solo bisogno di un sentimento per la complessità.

+0

Eventuali duplicati di [Calling C/C++ funzione di libreria da PHP] (http://stackoverflow.com/questions/2479402/calling-cc-library-function-from-php) –

risposta

6

È possibile impacchettare le librerie in una DLL? Se è così, puoi chiamarli tramite l'API COM di PHP.

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

esempio di codice:

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

altrimenti si può scrivere un estensione che contiene una funzione wrapper personalizzato (vale a dire, execute_through_wrapper ('yourfunc')). Ecco un doc su funzioni PHP che scrivono in C.

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

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

ecco un breve tutorial su estensioni di scrittura in C. Non dovrebbe essere troppo difficile da scrivere una funzione wrapper. Una volta creata l'estensione, può essere caricata dinamicamente tramite dl() (molto pericoloso e ammortizzato).

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

Quelle sono le uniche opzioni nel tuo caso. Non esiste un equivalente Linux (.so loader) del caricatore dll (è una chiamata API associata a win32).

+0

Ho dimenticato di dire, il nostro esercizio il sistema è Linux per questo progetto.Ma dovrebbe essere possibile costruire una libreria condivisa per queste librerie. – Andi

+0

Grazie John, ci è voluto un po 'di tempo per leggere questo articolo, e immagino che scrivere un'estensione non sia troppo complicato! – Andi

+0

@Andi Np :), buona fortuna! –

2

Si potrebbe anche avere gearman come intermediario.

Gearman fornisce un quadro generico applicazione a coltivare fuori lavoro ad altri macchine o processi che sono meglio adatto per fare il lavoro. Ti permette di fare lo in parallelo, di caricare l'elaborazione del bilanciamento e di chiamare le funzioni tra le lingue. Può essere utilizzato in una varietà di applicazioni, da siti Web ad alta disponibilità a il trasporto di eventi di replica di database . In altre parole, è il sistema nervoso per la modalità di comunicazione dell'elaborazione distribuita.

+0

Wow - questo è completamente nuovo per me! Sembra un leggero framework client/server RPC, non è vero? Forse un po 'eccessivo per una piccola applicazione, ma per un sistema complesso potrebbe essere molto utile. Posso usarlo per la comunicazione tra più processi, scritto in PHP, C, C++, ecc.? – Andi

0

A http://pear.php.net/ Ho trovato un'estensione denominata "inline_c". Purtroppo non sono mantenuto. Ma sembra che questo sarebbe il tipo di cose che preferirei.

Problemi correlati