Omitir el requisito de PHP del compositor

117

Estamos usando PHPCI y composer. El servidor que ejecuta PHPCI está en PHP 5.3.

Para un proyecto, agregamos el SDK PHP de Facebook, usando composer. Requiere PHP 5.4. Composer se activa con PHPCI y se ejecuta. Pero debido a que el servidor CI acaba de obtener PHP 5.3, el compositor falló con el mensaje de error:

facebook/php-sdk-v4 4.0.9 requires php >=5.4.0 -> no matching package found.

Esto dejó fallar mi compilación en PHPCI, por supuesto.

¿Existe la posibilidad de omitir este requisito? ¿Quizás agregando una opción a composer.json? ¿O un parámetro para llamar a composer.phar?

Armin
fuente

Respuestas:

284

He encontrado la opción:

composer install --ignore-platform-reqs

Ignore los requisitos de la plataforma (paquetes php y ext-).


Editar: Puede omitir las verificaciones de la plataforma con esto, pero Composer buscará paquetes basados ​​en la versión de PHP dada. Entonces, cuando necesite que el compositor también emule una versión de PHP durante la resolución de dependencia, puede (¡y debe!) Usar esto en su composer.json:

{
    "config": {
       "platform": {
           "php": "5.6.6"
       }
    }
}

https://getcomposer.org/doc/06-config.md#platform

Armin
fuente
¿Cómo puedo ignorar el repositorio privado? Algunos paquetes requieren un repositorio privado.
dungphanxuan
Increíble. Es útil cuando php cli aún no refleja un cambio de versión.
giovannipds
En Composer 2 hay un nuevo comando, que se puede usar: php.watch/articles/composer-ignore-platform-req
Armin
3

Para muchos comandos, puede decirle al compositor que omita la verificación de la versión de PHP, con el parámetro " --ignore-platform-reqs":

composer COMMAND --ignore-platform-reqs

esto evitará la especificación de la versión de PHP.

Tenga en cuenta que el software puede funcionar o no: la especificación de la versión de php está ahí porque en algún lugar del código se necesita al menos la versión de php especificada, por lo que si usa ese código, el software se romperá.

Luca C.
fuente
--ignore-platform-reqsno es para todos los comandos disponibles, como su respuesta implica.
Armin
-11

Si algo requiere una versión específica de PHP, no se ejecutará en una versión inferior de PHP. De forma adecuada, seguirá recibiendo errores al omitir el requisito de PHP.

Por cierto, PHP 5.3 ya no se mantiene, recomiendo encarecidamente actualizar el servidor PHPCI.

Wouter J
fuente
3
Primero me gustaría saber cómo omitir el requisito de PHP.
Armin
No puede y no lo hará, ya que el código no funcionará en una versión de php inferior
Wouter J
3
Va a. Solo el servidor CI obtuvo la versión baja de PHP. El servidor que contiene el SDK de Facebook se ejecuta en PHP 5.4. Se trata solo del servidor ci, que empaqueta todo en un agradable archivo zip desplegable.
Armin
Aunque PHP 5.3 ya no es mantenido por los desarrolladores centrales de PHP, algunas versiones de Linux todavía lo admiten y lo harán por un tiempo. Ubuntu 12.04 LTS se envía con 5.3 y es compatible hasta abril de 2017 ( wiki.ubuntu.com/LTS ). Pasar a 14.04 es la mejor ruta de actualización, pero hay cambios importantes que requieren una cantidad de trabajo para solucionarlos (Apache 2.4, php-fpm, etc.). Por lo tanto, gran parte de Internet todavía usa 5.3.x.
Andrew McCombe
cierto, lamentablemente el 99% de los paquetes, incluso los que cuentan con un buen soporte, no tienen los requisitos adecuados. Es más un indicador de lo que está usando el desarrollador que cualquier otra cosa.
mschuett