2011-08-24 20 views
39

Estoy acostumbrado a utilizar la herramienta virtualenv de python para crear entornos separados que pueden imitar los entornos de implementación de los proyectos que escribo.¿Tiene php un equivalente al virtualenv de python o al sandbox de ruby?

Ahora, voy a estar trabajando en un proyecto de php y me pregunto si hay algo equivalente a eso. Específicamente, espero poder ejecutar un servidor virtual virtual en apache con una versión (anterior) de php, mientras que todo lo demás se ejecuta en la versión normal actualizada.

Mi máquina de desarrollo ejecuta ubuntu 11.04, por lo que las soluciones que funcionan en esa plataforma serían las preferidas.

+0

por qué desea tener algo por el estilo?Usted ve, PHP está hecho para ser compatible con versiones anteriores. Incluso entre las diferentes versiones 5.x, rara vez hay diferencias que serían molestas, e incluso si eso sucede, suelen ser fáciles de solucionar. Por ejemplo, entre PHP 5.3 y 5.2 no muchos cambios hapenned (http://pl2.php.net/manual/en/migration53.incompatible.php) - sólo dos palabras clave nuevas y algo de código no válido ya no funciona ... – xfix

+6

@GlitchMr Intento replicar exactamente un entorno de despliegue en un servidor de desarrollo para que no haya sorpresas cuando implemente, pero no quiero configurar una máquina virtual completamente nueva para cada entorno de despliegue. Si pudiera tener diferentes hosts virtuales en apache, usar diferentes versiones de PHP, sería un largo camino para lograr esto. – Zxaos

+0

Docker es su solución. Vagrant por otra solución. – JREAM

Respuesta

10

Suponiendo que está utilizando mod_php, no hay forma de cargar múltiples versiones diferentes en la misma instancia de Apache. Puede ejecutar múltiples versiones diferentes si está ejecutando PHP como CGI o FastCGI, pero esto mismo introducirá algunas diferencias en el comportamiento de mod_php.

2

(no ha codificado php en años, así que esto podría ser obsoleta)

Por lo que yo recuerde que sólo tenía que apunte a otro directorio donde residen sus bibliotecas (incluya PATH), usando algo como:

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

y en los archivos de PHP:

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

PHP en realidad nunca tuvo un sistema de embalaje robusto y repositorio de biblioteca como perl/Python/ruby ​​tiene, pera estaba tratando de mo En esa dirección, pero está muy cerrado en comparación y era difícil de configurar en entornos multiproyecto.

Phark está intentando construir un puerto brew/bundler para php, https://github.com/lox/phark, aunque no está listo para la implementación.

+0

Esto podría funcionar para la versión de biblioteca, pero no parece que funcionaría cambiar la versión central de PHP utilizada. – Zxaos

+0

cierto. solo estaba diciendo el equivalente virtualenv. (Una alternativa de Pythonbrew es más de lo que estás buscando). – ashwoods

7

Como no parece posible cargar diferentes versiones de php dentro de apache con mod_php, la forma más fácil de imitar las configuraciones de despliegue y desarrollo será con una máquina virtual, que usted indicó que le gustaría evitar.

Una forma de simplificar un poco la carga de vm para desarrolladores es usar algo como vagrant. Con dos archivos (el archivo vagabundo y el archivo chef/títere) puede "versionar" su vm, crearlos fácilmente y destruirlos para cada proyecto y cuando sea necesario.

5

Otra alternativa a las máquinas virtuales es docker.

1

A partir de ahora, no hay una solución inmediata a este problema. La única solución que se acerca es Vagrant y puPHPet.com como se discutió aquí: https://drupal.org/node/2055947 ¿Por qué no podemos tener un entorno como el Virtualenv de Python o el Rbenv de Ruby? Constituye un buen proyecto de código abierto. Varias instancias de PHP pueden ser útiles si queremos probar algunas bibliotecas en entornos limitados en lugar de globalmente. Podemos instalar dependencias para diferentes proyectos usando un administrador de paquetes como Composer.

5

virtPHP es una herramienta para crear y gestionar múltiples entornos aislados PHP en una sola máquina. Es como virtualenv de Python, pero para PHP. (README)

https://github.com/virtphp/virtphp

+1

A partir de julio de 2015, virtPHP solo tiene como objetivo la instancia de línea de comando (php-cli) de php. Lamentablemente, esto no ayudaría con el problema como se dijo. – Zxaos

Cuestiones relacionadas