2010-09-03 13 views
7

Ho una classe PHP che voglio convertire in un'estensione PHP. Ho controllato alcuni tutorial (tuxradar's writing extensions, php.net's extending php e zend's extension writing) ed è un po 'complicato.Convertire una classe in un'estensione

ho trovato l'articolo "How to write PHP extensions" (Ndr: sito è defunta) e volevo sapere se è possibile utilizzare questo per renderlo afferrare una classe PHP da un certo percorso (ad esempio /home/website1/public_html/api/class.php), eseguire e restituisce l'istanza della classe.

In questo modo sarà utilizzabile in altri siti Web che sono ospitati sullo stesso server - ognuno può semplicemente chiamare la funzione e otterrà la propria istanza.

È possibile?

+0

Stai cercando di consentire ad altri di utilizzare la tua classe senza che siano in grado di visualizzare la fonte? Altrimenti, copia semplicemente il file class.php nel filesystem da qualche altra parte dove gli altri siti possono ottenerlo. In caso contrario, solo fare molte copie. In genere non si converte la classe PHP in un'estensione, a meno che non lo si stia facendo per motivi di prestazioni. – bramp

+0

sì, ho bisogno di lasciare che gli altri usino la classe senza veicolare la fonte, grazie per la risposta – Wiika

risposta

0

In una frase: non ci credo, penso che sia molto più lavoro di così.

4

La domanda come ho capito ora è, l'utente ha una classe PHP che vorrebbero condividere con più persone, ma non vuole condividere il codice sorgente.

Ci sono molte soluzioni a questo, generalmente invogliando il codice PHP in una sorta di codice byte e usando un'estensione PHP per eseguire il codice byte. Non ho mai usato una di queste soluzioni, ma mi rendo conto di quanto segue:

Sono sicuro che ce ne sono altri. Solo Google per PHP Compiler o PHP Accelerator.

0

No, non esiste uno strumento che possa farlo.

In ogni caso, ciò che si desidera chiamare è facilmente raggiungibile con auto_prepend_file. Basta fare in modo che la direttiva ini faccia riferimento a un file PHP che abbia la definizione di classe, e quindi sarà disponibile per tutte le applicazioni.

Se non si desidera che gli utenti siano in grado di utilizzare il codice sorgente, è possibile utilizzare una delle numerose estensioni zend che consentono di precompilare il file e utilizzarlo in tale formato.

+0

ho usato auto_prepend_file ma ho avuto un problema con la restrizione open_basedir, c'è qualcosa che posso fare per aggirarlo? – Wiika

+0

@Wikka Sì, è possibile il percorso in cui il file deve aprire_basedir. – Artefacto

+0

puoi dargli maggiori informazioni per favore? – Wiika

0

È possibile estendere le funzioni della libreria C sottostante nello spazio PHP scrivendo PHP extensions. Tuttavia, penso che nel tuo caso non sia necessario scriverne uno.

0

Sono consapevole che questa è una vecchia domanda (essendo del 2012), tuttavia la risposta è cambiata e ora c'è uno strumento che può farlo. Il kit di strumenti di estensione PHP-to-C di Jim Thunderbirds fornisce i mezzi per portare una semplice classe in un file fino a un complicato framework multipliodo con nomi a più livelli e convertirlo in un'estensione C che può quindi essere installata nel PHP server.

Mentre in molti casi d'uso non è necessario farlo in quanto il codice PHP ordinario funzionerà altrettanto bene in alcuni casi si possono verificare miglioramenti significativi delle prestazioni. La pagina delle informazioni mostra che una classe ordinaria (progettata deliberatamente per impiegare molto tempo) ha impiegato 16.802139997482 secondi come semplice PHP di vaniglia e 3.9628620147705 come estensione PHP creata utilizzando lo strumento.

Come ulteriore vantaggio, lo strumento offre anche una funzionalità aggiuntiva. La possibilità di combinare codice PHP (da convertire in C) e codice C nativo all'interno della stessa estensione che può produrre miglioramenti delle prestazioni ancora maggiori. Lo stesso esempio usato sopra solo lo strumento 0.14397192001343 secondi quando gran parte del codice intensivo è stato spostato in un codice C di tipo Bubble e semplicemente richiamandolo dal codice PHP.

Come nota a margine, gli sviluppatori che utilizzano il codice che utilizza l'estensione è molto simile ad avere i file inseriti manualmente nel file PHP in fase di sviluppo, tranne che non deve essere incluso in modo specifico come viene fatto attraverso il componente di estensioni PHP.

(Disclaimer: Non sono affiliato con questo sviluppatore, ma sono contento di averlo visto poiché è così lontano da lavorare per convertire alcune delle mie classi intensive in estensioni PHP senza aver bisogno di sapere C).

Problemi correlati