2011-09-23 18 views
11

Sto sviluppando un'applicazione basata su Web scritta in PHP5, che fondamentalmente è un'interfaccia utente in cima a un database. Per dare agli utenti uno strumento più flessibile, voglio incorporare un linguaggio di scripting, in modo che possano fare cose più complesse come le query di Fire SQL, i cicli di looping e di archiviazione dei dati nelle variabili e così via. Nel mio ambito aziendale Python è ampiamente utilizzato per lo scripting, ma sto anche pensando di creare un linguaggio specifico per il dominio. Lo script deve avvolgere le mie classi PHP esistenti.Incorpora python/dsl per lo scripting in un'applicazione web PHP

Sto cercando consigli su come affrontare questo compito di sviluppo?

Aggiornamento: proverò lo scripting nel database utilizzando PLPGSQL in PostgreSQL. Lo farò per ora, ma non posso usare le mie classi PHP in questo modo. L'approccio Lua è accattivante e sembra quello che voglio (oltre al suo non Python).

+0

Sicurezza? Sarà un'applicazione web? –

+1

PHP è un meraviglioso linguaggio di scripting .. perché non puoi usarlo? –

+0

@tandu: perché PHP non supporta il sandboxing, che probabilmente è ciò che si desidera – aurora

risposta

2

Se non si è vincolati a Python, è possibile utilizzare ad esempio Lua come linguaggio di scripting. Lua è un linguaggio molto leggero, facile da imparare e sviluppato con l'incorporamento in mente. Sono già disponibili almeno due estensioni PHP che incorporano Lua in PHP e offrono quindi la possibilità di consentire l'accesso tra PHP e Lua della propria applicazione.Date un'occhiata a:

http://pecl.php.net/package/lua

Questo ha anche alcuni esempi curato:

http://phplua.3uu.de/

ho già utilizzata quest'ultima uno un po 'per semplici esperimenti e funziona abbastanza bene.

0

Si potrebbe fare senza Python, ad es. analizzare l'input dell'utente per "tag" predefiniti e restituire il risultato.

1

Sicurezza, sicurezza, sicurezza! Volevo solo toglierlo di mezzo. Ciò che sembra provare a fare sembra piuttosto spaventoso, ma è il tuo piede a sparare.

Inoltre, ciò che sembra si stia tentando di fare è mescolare due diversi linguaggi lato server a meno che non ci sia un'implementazione di Python che gira su PHP di cui non sono a conoscenza (PHPython?).

Se desideri che il tuo codice PHP invochi Python in qualche modo, dovresti riuscire a farlo abbastanza facilmente con qualcosa come eval() o exec(). Vedi how to input python code in run time and execute it?

Per quanto riguarda il wrapping delle classi PHP, non sono sicuro che sia possibile farlo esattamente. È possibile eseguire il mirroring delle classi PHP con le classi Python e utilizzare qualcosa come JSON per trasportare i dati tra i due.

+0

Esiste PIP http://www.csh.rit.edu/~jon/projects/pip/ che mira a includere le classi php in python, ma sembra che non sia un progetto molto attivo. –

+0

LOL, avrei dovuto sapere che era là fuori da qualche parte. – ThatAintWorking

0

si hanno due scelte:

  1. fare la tua logica in PHP sul frontend utilizzando un MVC
  2. Rimanda la logica per il backend

se si sta facendo la vostra logica sulla frontend, puoi guardare in un framework PHP5 MVC, come Zend

Se stai rimandando la tua logica, puoi usare qualsiasi linguaggio di scripting che ti piace. Ad esempio, è possibile utilizzare SQLAlchemy con Python per accedere al proprio database.

3

Come eseguire lo script sul client. Ciò garantirà la massima sicurezza e anche il risparmio delle risorse del server.

In altre parole Javascript sarebbe la tua piattaforma di scripting. Quello che fai è esporre la funzionalità del tuo back-end come funzioni javascript. A seconda di come è attualmente scritta la tua app che potrebbe richiedere un lavoro di backend o meno.

Oh e dal modo in cui non sei limitato a javascript per la lingua attuale. Google "compile to javascript" e il primo hit dovrebbe essere un elenco di lingue che è possibile utilizzare.

1

Non conosco nessuna soluzione prefabbricata. Ma pypy, un'implementazione Python scritta in RPython, ha una funzione sandboxing, che consente di eseguire il codice non affidabile.

Ma se è possibile progettare un DSL ovvio per il proprio dominio, questa potrebbe essere la soluzione più semplice.