Composer usa una versión de php incorrecta, pero php -v muestra la correcta (Ubuntu)

4 minutos de lectura

Estoy tratando de instalar mis paquetes de compositor, pero me da esto:

This package requires php >=7.0.0 but your PHP version (5.5.9)

Pero php -v me da esto: PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )

Estoy ejecutando una máquina Ubuntu 16.04.3 LTS, encontré algunas soluciones para Mac y Windows, pero nadie parece tener el problema en Linux.

  • ¿Qué hace un phpinfo(); show de llamadas en su navegador? ¿Tenías previamente 5.5.9 instalado antes de instalar 7.x?

    – alarde de

    28 de agosto de 2017 a las 7:48

  • Tenga cuidado, porque la versión CLI puede ser diferente a la que muestra phpinfo().

    – Víctor

    28 de agosto de 2017 a las 7:54

  • necesita usar el comando alias php solo para pasar la sesión

    – Malek Zarkuna

    28 de agosto de 2017 a las 8:27

prueba esto:

composer install --ignore-platform-reqs

o esto en composer.json

"config": {
    "preferred-install": "dist",
    "platform": {
        "php": "7.0.0"
    }
}

en la segunda solución básicamente estás falsificando una plataforma y ejecutas composer.phar update después de este

  • esto funciona, pero ¿cuál es la causa de esto? which php espectáculos /usr/bin/php y /usr/bin/php -v espectáculos 7.0.22 también…

    – PrimuS

    28 de agosto de 2017 a las 8:08

  • @PrimuS, no sé, puede ser un composererror de . Siempre tuvo problemas con las versiones de PHP. Así que haz que lo acepte. Está bien

    – usuario10089632

    28 de agosto de 2017 a las 8:11


  • No, ignorar los requisitos de la plataforma es simplemente incorrecto y oculta el problema real en sí. Asegúrese de tener solo una versión de PHP instalada. Entonces esto debería solucionar el problema. Vea mi respuesta a continuación.

    – roland

    15 de enero de 2020 a las 14:23

  • @Roland tiene razón, esta no es una respuesta de ninguna manera. & @Roland está ligeramente equivocado, OP puede tener varias versiones de PHP pero ha configurado la deseada como predeterminada. En ubuntu OP puede usar sudo apt update-alternative --config php para eso

    – APu

    14 de noviembre de 2021 a las 12:24

  • Es por eso que no podemos tener cosas bonitas – hackjobs…

    –Jacob Thomason

    17 de marzo a las 22:44


Si está usando sistemas basados ​​en Debian, puede pedirle que use globalmente una versión específica con el siguiente comando (dependiendo de cómo y dónde estén instaladas sus versiones de php):

sudo update-alternatives --set php /usr/bin/php7.2

update-alternatives crea, elimina, mantiene y muestra información sobre los enlaces simbólicos que componen el sistema de alternativas de Debian.

Avatar de usuario de Malek Zarkouna
malek zarkouna

Prueba esto a mi me funciono:

  alias php='/usr/local/php7/bin/php'

php composer.phar install

Avatar de usuario de Roland
roland

composerhace referencia al ejecutable de PHP aquí de la siguiente manera:

#!/usr/bin/env php

Cuando lo hago which php yo obtengo /c/Program Files/php-7.1/php bajo GIT-Bash (Windows 10).

Bajo Linux (en casa tengo Debian), php puede ser un enlace simbólico a un binario PHP real.

Así que haz lo siguiente:

  • Comprueba dos veces dicho php con ls -l `which php`
  • Asegúrese de tener solo una versión de PHP instalada, esto puede causar que se mezclen versiones incompatibles que pueden ser la causa raíz de su problema

Eso debería ayudarte a encontrar la causa raíz.

Solo comparto aquí porque tuve el mismo problema y encontré este hilo primero mientras buscaba. Para mi tenia un servidor Windows con PHP 5.6.? en él, así como PHP 7.2.? en eso. Había configurado IIS para usar 7.2 pero 5.6 todavía estaba en las variables de entorno en la ruta. Abra Propiedades del sistema>pestaña Avanzado> “Variables de entorno…”. Edite “ruta” y elimine la referencia a “C:/archivos de programa (x86)/PHP/v5.6” de la ruta y guárdela. Reinicie su terminal y debería estar listo. Espero que eso ayude a alguien.

Avatar de usuario de MC Emperor
Emperador MC

Recientemente me encontré con el mismo problema. php --version devuelto 7.4.30pero Composer dijo que estaba usando PHP 8.0.18.

Resulta que Composer está usando su propia versión de PHP. los composer script contiene una ruta codificada a PHP 8. (Para mí, este es un error del compositor, ya que Composer debe respetar el valor de la config.platform.php propiedad de la composer.json expediente.)

  1. Una opción puede ser alias composer:

    alias composer="/usr/local/bin/php /usr/bin/composer.phar
    
  2. Otra opción puede ser reescribir composer:

    cat /usr/bin/composer \
        | sed "s~/usr/bin/php8~/usr/local/bin/php~g' \
        > /usr/bin/composer.tmp
    mv /usr/bin/composer.tmp /usr/bin/composer
    

Así es como me enteré. Primero, quería encontrar la ubicación de composer. Mediante el uso whereis composeruno puede encontrar el camino de la composer dominio. Para mí, volvió

composer: /usr/bin/composer

Luego quise ver el contenido de /usr/bin/composerpara poder averiguar cuál es el composer comando estaba haciendo bajo el capó. Mediante el uso cat /usr/bin/composerel contenido de la composer se imprime el guión. Para mí, volvió

#!/bin/sh

/usr/bin/php8 /usr/bin/composer.phar "$@"

Ahí está. los composer el comando usa codificado /usr/bin/php8 para ejecutar el composer.phar expediente.

Avatar de usuario de Yuri Tinyukov
Yuri Tinyukov

Bueno, esto funcionó para mí.

$ alias composer="php /usr/bin/composer.phar"
$ composer install

Use el binario php exacto en el alias, por ejemplo

$ alias composer="php8.1 /usr/bin/composer.phar"

¿Ha sido útil esta solución?