Usar diferentes versiones de PHP CLI ejecutables para un comando
Así que tengo Gentoo box con tres versiones de PHP instaladas (sin importar las razones):
-
/usr/bin/php
->/usr/lib64/php5.4/bin/php
-
/usr/bin/php5.5
->/usr/lib64/php5.5/bin/php
-
/usr/bin/php5.6
->/usr/lib64/php5.4/bin/php
Quiero instalar Laravel framework usando composer:
$ composer create-project laravel/laravel --prefer-dist
Esto sin embargo arroja un error porque Laravel requiere PHP > 5.5.9 y el intérprete predeterminado php
es 5.4.
Así que emito otro comando:
$ /usr/bin/php5.6 /usr/bin/composer create-project laravel/laravel --prefer-dist
Esto me lleva un paso más allá, pero luego algunos comandos posteriores a la instalación de Laravel composer.json
entran en juego, y la instalación se bloquea.
Esto se debe al hecho de que composer.json
los comandos se ven así:
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
Como puede ver, el intérprete "por defecto" se utiliza de nuevo!
Ahora, los archivos PHP adecuados comienzan con el siguiente shebang:
#!/usr/bin/env php
Esta es una buena característica ya que el intérprete PHP se puede encontrar en diferentes ubicaciones en diferentes sistemas.
Desafortunadamente, en este caso el comando env
devuelve la ruta primer ejecutable que encuentra en $PATH
variable ambiental.
¿Cómo podría alterar el entorno de sesión actual o qué tipo de truco realizar para la ejecución de todo el proceso de instalación de Laravel php
el comando invocaría /usr/bin/php5.6
en lugar de /usr/bin/php
?
No quiero cambiar la variable $PATH
ni modificar archivos como composer
, composer.json
o la utilidad CLI de Laravel artisan
.
Editar: también asume que quiero hacer esto desde una cuenta de usuario normal (es decir, sin root permiso).
5 answers
Tal vez usted puede tratar de arreglar el environnement!
$ php -v
PHP 5.4.x (cli) ...
$ set PATH="/usr/lib64/php5.6/bin:$PATH"
$ php -v
PHP 5.6.x (cli) ...
O, si no desea modificar la ruta de acceso para su sesión de shell, puede limitar el cambio solo para el comando actual:
$ php -v
PHP 5.4.x (cli) ...
$ env PATH="/usr/lib64/php5.6/bin:$PATH" php -v
PHP 5.6.x (cli) ...
$ php -v
PHP 5.4.x (cli) ...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-05 17:27:24
El ejecutable PHP predeterminado se puede encontrar usando:
$ which php
En la mayoría de los casos es un enlace a una versión particular de PHP:
lrwxrwxrwx 1 root root 21 aug 15 2016 /usr/bin/php -> /usr/bin/php7.1
Para cambiarlo a una versión diferente, simplemente vuelva a vincularlo a otra
$ sudo rm /usr/bin/php
$ sudo ln -s /usr/bin/php5.6 /usr/bin/php
Antes de volver a enlazar, debe asegurarse de que la versión de PHP de destino esté instalada.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-24 10:52:51
Identifique dónde está el comando genérico actual php
y a qué binario apunta con which php
.
Te dará una ruta a un enlace simbólico como mencionas en tu pregunta
/usr/bin/php -> /usr/lib64/php5.4/bin/php
Edite el enlace simbólico para apuntar a la versión de php que desee por ahora, vea aquí https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks
Cuando haya terminado, simplemente invierta el proceso.
ACTUALIZAR:
también puede agregar un alias
para el usuario actual editando ~/.bashrc
y añadiendo lo siguiente
alias php='/usr/bin/php5.6'
Ver si esto funciona
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:36:28
Desde que surgió PHP7 Debian Linux crea diferentes ejecutables para las versiones 5 y 7 de PHP en /usr/bin de forma predeterminada (si instala ambas versiones, eso es).
Llamar a esas diferentes versiones desde la línea de comandos es tan simple como siempre:
kkarski@debian:~ $ php5 -v
PHP 5.6.26-0+deb8u1 (cli) (built: Sep 21 2016 12:37:50)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
kkarski@debian:~ $ php -v
PHP 7.0.9-1~dotdeb+8.1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.9-1~dotdeb+8.1, Copyright (c) 1999-2016, by Zend Technologies
Esto obviamente solo es bueno para scripts simples. Para cualquier cosa más grande (compositor, artesano, etc.) tendrás que cambiar la variable PATH.
Para cambiar la versión de su servidor Apache está usando todo lo que tiene que hacer is:
root@debian:~# a2dismod php5 && a2enmod php7.0
Module php5 disabled.
To activate the new configuration, you need to run:
service apache2 restart
Considering conflict php5 for php7.0:
Enabling module php7.0.
To activate the new configuration, you need to run:
service apache2 restart
Y viceversa si desea utilizar la versión más baja de PHP.
Mencionarlo en caso de que alguien tenga problemas similares en Debian.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-17 12:24:09
Para cualquier otra persona que no encontró ninguna solución en lo anterior, porque usan composer update
y de alguna manera se usa la versión incorrecta de PHP. Usando composer self-update
obtuve más información y finalmente descubrí que en el composer.json
puede especificar un platform
en la sección config
, que anula qué versión de php es utilizada por composer. Simplemente cambiar este valor o eliminar esta configuración resolvió mi problema.
Compositor.json
"config": {
"platform": {
"php": "7.1"
},
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-11 08:53:02