2011-08-24 9 views
39

Sono abituato a utilizzare lo strumento virtualenv di python per creare ambienti separati che possono imitare gli ambienti di distribuzione per i progetti che scrivo.php ha un equivalente a virtualenv di python o sandbox di ruby?

Ora, ho intenzione di lavorare su un progetto di php e mi chiedo se c'è qualcosa di simile a questo? Nello specifico spero di essere in grado di eseguire un virtualhost su apache con una (più vecchia) versione di php, mentre tutto il resto funziona sulla versione normale aggiornata.

La mia macchina di sviluppo utilizza Ubuntu 11.04, quindi le soluzioni che funzionano su quella piattaforma sarebbero preferite.

+0

Perché si vuole avere qualcosa di simile?Vedete, PHP è fatto per essere compatibile con le versioni precedenti. Anche tra le diverse versioni 5.x, raramente ci sono differenze che sarebbero fastidiose, e anche se succedono, quelle sono di solito facili da risolvere. Ad esempio tra PHP 5.3 e 5.2 non sono state apportate molte modifiche (http://pl2.php.net/manual/en/migration53.incompatible.php) - solo due nuove parole chiave e alcuni codici non validi non funzionano più ... – xfix

+6

@GlitchMr Sto provando a replicare esattamente un ambiente di distribuzione su un server di sviluppo in modo che non ci siano sorprese durante la distribuzione, ma non voglio impostare una macchina virtuale completamente nuova per ogni ambiente di distribuzione. Se potessi avere un diverso virtualhost in apache usare diverse versioni di PHP, sarei un lungo cammino verso la realizzazione di questo. – Zxaos

+0

Docker è la soluzione. Vagrant per un'altra soluzione. – JREAM

risposta

10

Supponendo che si stia utilizzando mod_php, non è possibile caricare più versioni diverse nella stessa istanza di Apache. È possibile eseguire più versioni diverse se si esegue PHP come CGI o FastCGI, ma questo introdurrà alcune differenze di comportamento da mod_php.

2

(non hanno codificato php negli anni, quindi questo potrebbe essere obsoleto)

Per quanto mi ricordo hai appena avuto per puntare a un'altra directory in cui risiedono le librerie (includere PATH), usando qualcosa come:

include_path = .:/usr/local/lib/php:./include (this goes in php.ini, default libararies) 

e nei file PHP:

ini_set("include_path", ".:../:./include:../include"); 

PHP mai avuto un sistema di imballaggio robusto e repository biblioteca come perl/Python/ruby ​​ha, PEAR stava cercando di mo In quella direzione, ma è molto chiuso in confronto ed era difficile da configurare in ambienti multiprogetto.

Phark sta cercando di creare una porta brew/bundler per php, https://github.com/lox/phark, anche se non è pronto per l'implementazione.

+0

Questo potrebbe funzionare per la versione di libreria, ma non sembra che funzioni per modificare la versione di PHP utilizzata. – Zxaos

+0

vero. Stavo solo affermando l'equivalente di virtualenv. (un'alternativa pythonbrew è più quella che stai cercando). – ashwoods

7

Poiché caricare diverse versioni di php all'interno di apache con mod_php non sembra essere possibile, il modo più semplice di imitare la distribuzione e le impostazioni di sviluppo sarà con una macchina virtuale, che hai affermato di voler evitare.

Un modo per rendere un po 'più facile l'onere di VM per gli sviluppatori consiste nell'utilizzare qualcosa come vagrant. Con due file (il file vagabondo e il file chef/burattino) puoi "eseguire la versione" dei tuoi vm, facilmente crearli e distruggerli per ogni progetto e quando necessario.

5

Un'altra alternativa alle macchine virtuali è docker.

1

A partire da ora, non esiste una soluzione pronta per questo problema. L'unica soluzione che si avvicina è Vagrant e puPHPet.com come discusso qui: https://drupal.org/node/2055947 Perché non possiamo avere un ambiente come virtualenv o ruben's rbenv di python? È un bel progetto open source. Più istanze di PHP possono essere utili se vogliamo testare alcune librerie in sandbox anziché a livello globale. Possiamo installare dipendenze per diversi progetti usando un gestore di pacchetti come Composer.

5

virtPHP è uno strumento per la creazione e la gestione di più ambienti isolati PHP su una singola macchina. È come virtualenv di Python, ma per PHP. (README)

https://github.com/virtphp/virtphp

+1

A luglio 2015, tuttavia, virtPHP ha come target solo l'istanza della riga di comando (php-cli) di php. Sfortunatamente questo non aiuterebbe il problema come affermato. – Zxaos