versiones - Forzar al compositor a requerir la versión PHP entre la versión X y la versión Y
ref php (6)
Tenemos una combinación de diferentes versiones de PHP que se ejecutan en sus servidores (máximo 5.3.5) y máquinas de desarrollo (máximo 5.5.9).
Ahora nos encontramos con el problema de que hicimos una "actualización del compositor" para obtener la última versión de algunos paquetes externos. Como su composer.json se parece
"require": {
"php": ">=5.3.3",
.....
},
obtenemos algunos paquetes que requieren PHP 5.5. No hay problema en nuestras máquinas de desarrollo, pero en el servidor :(
¿Hay alguna posibilidad de decirle al compositor que requiera una versión PHP entre 5.3.3 y 5.3.5? ¿O una versión máxima disponible?
Lo intenté
"require": {
"php": ">=5.3.3, <=5.3.5",
.....
},
y
"require": {
"php": "<=5.3.5",
.....
},
pero ambos no funcionaron. Recibo el mensaje "El paquete php solicitado no se pudo encontrar en ninguna versión, puede haber un error tipográfico en el nombre del paquete". Error.
¿Algunas ideas? Gracias por adelantado
¿Hay alguna posibilidad de decirle al compositor que requiera una versión PHP entre 5.3.3 y 5.3.5?
Sí, ahí está uno:
Rango de versión con guiones (-)
Conjunto inclusivo de versiones. Las versiones parciales a la derecha incluyen se completan con un comodín. Por ejemplo, 1.0 - 2.0 es equivalente a> = 1.0.0 <2.1 ya que 2.0 se convierte en 2.0. *. Por otro lado 1.0.0 - 2.1.0 es equivalente a> = 1.0.0 <= 2.1.0.
Ejemplo: 1.0 - 2.0
https://getcomposer.org/doc/articles/versions.md#hyphenated-version-range-
PD: Llegué aquí desde el motor de búsqueda pero no encontré una respuesta aquí, así que cuando lo encontré en el sitio de Composer decidí publicarlo aquí. Espero que esto ayude a alguien que llegó aquí como lo hice yo.
¿Qué hay de probar el operador tilde
Tilde Operator ~ 1.2 Muy útil para proyectos que siguen versiones semánticas. ~ 1.2 es equivalente a> = 1.2, <2.0. Para más detalles, lea la siguiente sección a continuación.
Próximo lanzamiento significativo (operador de Tilde) #
El operador ~ se explica mejor con un ejemplo: ~ 1.2 es equivalente a
= 1.2, <2.0, mientras que ~ 1.2.3 es equivalente a> = 1.2.3, <1.3. Como puede ver, es principalmente útil para proyectos que respetan versiones semánticas. Un uso común sería marcar la versión mínima mínima de la que depende, como ~ 1.2 (que permite cualquier cosa hasta, pero sin incluir, 2.0). Como en teoría no debería haber interrupciones de compatibilidad con versiones anteriores hasta 2.0, eso funciona bien. Otra forma de verlo es que usar ~ especifica una versión mínima, pero permite que el último dígito especificado suba.
Nota: Aunque 2.0-beta.1 es estrictamente anterior a 2.0, una restricción de versión como ~ 1.2 no lo instalaría. Como se dijo anteriormente ~ 1.2 solo significa que .2 puede cambiar pero la parte 1. es fija.
Nota: El operador ~ tiene una excepción en su comportamiento para el número de versión principal. Esto significa, por ejemplo, que ~ 1 es igual a ~ 1.0, ya que no permitirá que el número mayor aumente tratando de mantener la compatibilidad con versiones anteriores.
Dado que el parámetro de configuración en composer.json está disponible. Podrías algo como esto:
{
"name": ".../...",
"config": {
"platform": {
"php": "5.3.5"
}
},
"require": {
...
}
}
Elimine su composer.lock y el directorio de proveedores .
Ahora coloque la opción de plataforma para composer.json
"config": {
"platform": {
"php": "7.0"
}
},
y finalmente, ejecute el comando composer install
Me parece cuestionable decir lo menos que está desarrollando con el PHP más reciente disponible y está ejecutando la producción con una versión muy desactualizada. Habrá muchos problemas posibles derivados de esto, no solo por los parches de seguridad que te faltarían, sino más importante debido a las correcciones de errores de PHP que se introdujeron principalmente en las versiones 5.3.9 y 5.3.23 que cambian el comportamiento de PHP en algunos detalles bastante fundamentalmente. No hablar sobre el riesgo de usar accidentalmente características de 5.4 o 5.5.
Y realmente no hay forma de hacer que Composer lidie con esta situación.
La versión de PHP que se utiliza cuando se ejecuta la
composer update
determina la resolución de las dependencias, influenciada por la versión de PHP y las extensiones de PHP instaladas.
No puede definir que un paquete solo debe usarse para versiones de PHP entre 5.3.3 y 5.3.5 si el PHP que está utilizando para la actualización no cumple con este requisito de versión. Debido a que la versión de PHP utilizada excede la restricción de la versión superior, dicho paquete no es elegible para cumplir con el requisito de versión, y Composer informa que no se ha encontrado ningún paquete (sin decir que ha visto los paquetes, pero tuvieron que ignorarse debido a la restricción de versión).
Probablemente hay tres salidas obvias:
-
Reduzca su entorno de desarrollo a la versión de producción que realmente está utilizando. Si se usa más de uno: El más antiguo. De esa forma, se cumplirán todos los requisitos para las versiones de PHP. Ejecute la
composer update
y listo. -
Actualice su entorno de producción. No necesita más explicaciones, pero debo mencionar que no solo te faltan muchas características PHP muy agradables, sino que también te falta un aumento sustancial del rendimiento, porque PHP 5.5 es realmente mucho más rápido que 5.3.
-
Agregue una configuración "platform.php" al composer.json global o del proyecto. Esto le indicará a Composer que anule la versión de PHP que ejecuta Composer y, en su lugar, calcule las dependencias con esa versión de PHP diferente.
composer config -g platform.php 5.3.5
para la configuración global (afectará a todas las ejecuciones posteriores de Composer), sin-g
para la configuración local (solo afectará las operaciones de Composer en ese proyecto, en caso de que desarrolle en más de un proyecto con producción diferente versiones de PHP).
Pruebe esto (elimine la coma):
"require": {
"php": ">=5.3.3 <=5.3.5",
.....
},