parametros - php modo interactivo
Utilice un ejecutable CLI de versiĆ³n de PHP diferente para un comando (5)
Así que tengo el cuadro de Gentoo con tres versiones de PHP instaladas (no importa las razones):
-
/usr/bin/php
->/usr/lib64/php5.4/bin/php
-
/usr/bin/php5.5
->/usr/bin/php5.5
-
/usr/bin/php5.6
->/usr/bin/php5.6
Quiero instalar Laravel framework usando compositor:
$ composer create-project laravel/laravel --prefer-dist
Sin embargo, esto arroja un error porque Laravel requiere PHP> 5.5.9 y el intérprete php
predeterminado es 5.4 . Así que emite 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 entran en juego algunos comandos posteriores a la instalación del composer.json
de Laravel, y la instalación se cuelga.
Esto se debe al hecho de que los comandos composer.json
ven así:
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
Como puede ver, el intérprete "predeterminado" se utiliza de nuevo.
Ahora, los archivos PHP correctos comienzan con siguiente shebang:
#!/usr/bin/env php
Esta es una buena característica ya que el intérprete de PHP se puede encontrar en diferentes ubicaciones en diferentes sistemas. Desafortunadamente, en este caso, el comando env
devuelve la ruta al primer ejecutable que encuentra en la variable de entorno $PATH
.
¿Cómo podría alterar el entorno de sesión actual o qué tipo de truco realizar para que la ejecución del proceso de instalación de Laravel entero; el comando php
invocaría /usr/bin/php5.6
lugar de /usr/bin/php
?
No quiero cambiar la variable $PATH
ni modificar archivos como composer
, composer.json
o la herramienta de CLI de Laravel.
Editar: también asumo que quiero hacer esto desde una cuenta de usuario normal (es decir, sin permisos de root).
¡Tal vez puedas intentar arreglar el entorno!
$ php -v
PHP 5.4.x (cli) ...
$ set PATH="/usr/lib64/php5.6/bin:$PATH"
$ php -v
PHP 5.6.x (cli) ...
O bien, si no desea modificar la RUTA de su sesión de shell, puede limitar el cambio para el comando actual solamente:
$ 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) ...
Desde que apareció PHP7, Debian Linux crea diferentes ejecutables para las versiones de PHP 5 y 7 en / usr / bin de forma predeterminada (si instala ambas versiones).
Llamar a esas versiones diferentes 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á que cambiar la variable PATH.
Para cambiar la versión que usa su servidor Apache, todo lo que tiene que hacer es:
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 quieres usar la versión PHP más baja.
Mencionándolo en caso de que alguien tenga problemas similares en Debian.
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, solo vuelva a vincularlo a otra
$ sudo rm /usr/bin/php
$ sudo ln -s /usr/bin/php5.6 /usr/bin/php
Antes de volver a vincular, debes asegurarte de que esté instalada la versión de PHP objetivo.
Identifique dónde está el comando php
genérico actual y con qué binario apunta con which php
.
Le dará un camino a un enlace simbólico como usted menciona en su pregunta
/usr/bin/php -> /usr/lib64/php5.4/bin/php
Edite el enlace simbólico para que apunte a la versión de php que desee, vea aquí https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks
Cuando hayas terminado, invierte el proceso.
ACTUALIZACIÓN: también puede agregar un alias
para el usuario actual editando ~/.bashrc
y agregando lo siguiente
alias php=''/usr/bin/php5.6''
ver si esto funciona
Para cualquier otra persona que no haya encontrado ninguna solución en lo anterior, ya que usan la composer update
y, de alguna manera, se usa la versión incorrecta de PHP. Al utilizar la composer self-update
obtuve más información y, finalmente, descubrí que en el composer.json
puede especificar una platform
en la sección de config
, que anula la versión de php utilizada por el compositor. Simplemente cambiando este valor o eliminando esta configuración resolvió mi problema.
composer.json "config": { "platform": { "php": "7.1" },