2011-08-25 10 views
8

Estoy creando una lista de verificación previa a la instalación para un programa. El programa requiere PHP5, por lo que necesito el script de la lista de verificación para verificar la disponibilidad de PHP5.
Existe una función como phpversion(), que volverá en el formato de 5.3.6 o similar. Sin embargo, quiero que la lista de verificación sea muy directa y simplemente diga sí o no. Entonces, mostrar la versión actual no me está ayudando demasiado. De acuerdo, una forma es usar el phpversion() y eliminar los comas, etc. ¿Pero no hay una manera más ordenada? (Curiosamente, no hay información sobre esto en ningún lugar)¿Cómo simplemente verificar si la versión PHP de los servidores es 5 o superior?

Así que, ¿Cómo simplemente verificar si la versión PHP de los servidores es 5 o superior?

if (...) { 
    echo 'Server has PHP5 or above!'; 
} else { 
    echo 'Servers PHP version is lower then PHP5'; 
} 

Respuesta

14

Hay una constante predefinida:

echo PHP_MAJOR_VERSION // displays 5 

http://nl.php.net/manual/en/reserved.constants.php#reserved.constants.core

Así:

if (defined('PHP_MAJOR_VERSION') && PHP_MAJOR_VERSION >= 5) 
{ 
    echo 'Server has PHP 5 or above!'; 
} 
else 
{ 
    echo 'Servers PHP version is lower then PHP5'; 
} 

anterior sólo funciona para PHP 5.2.7 <, probar este lugar para las versiones inferiores:

if (strnatcmp(phpversion(),'5.0.0') >= 0) 
{ 
    echo '5 or higher'; 
} 
else 
{ 
    echo '4 or lower'; 
} 

Se sugiere en uno de los comentarios aquí: http://www.php.net/manual/en/function.phpversion.php#91816

+1

Eso sería genial, excepto: 'Disponible desde PHP 5.2.7. ' – timdev

+0

¡Perfecto! ¡Eso era exactamente lo que estaba buscando! Me siento tan avergonzado que no pude resolver esto yo mismo. Pensé que debe haber alguna función extremadamente extraña para esto. ¡¡Gracias!! –

+0

@timdev: Acabas de matar mi felicidad .. ¿No hay una función similar para las versiones inferiores de PHP? –

1
echo 'Current PHP version: ' . phpversion(); 

Puede tener más información en el PHP documentation. Esto está disponible en PHP4 y más.

+1

que en realidad no responder a su pregunta, que parece ser algo así como "¿Cómo puedo saber si la salida del phpversion() es la aversión mayor que o igual a 5.0 – timdev

+0

bien si no puede hacer un IF con el número de phpversion() tenemos un problema ... ¿un poco básico no? –

4

Si el phpversion() es devolverlo al igual que un número consecutivo, se podría hacer:

if (phpversion() >=5) { 
    echo 'Server has PHP5 or above!'; 
} else { 
    echo 'Servers PHP version is lower then PHP5'; 
} 
+0

No devuelve un número sino una cadena que contiene la versión completa. – GolezTrol

+0

Amm, extrañamente, esto funciona. Wow, ¿la respuesta puede ser así de simple? –

+0

@GolezTrol: Eso fue lo primero que pensé, pero técnicamente es solo un número con decimales ... –

1
if (substr(phpversion(),0,1) >= 5) { 
    //php >= 5 
}else{ 
    //php < 5 
} 

Eso no era tan difícil, ¿verdad?

EDIT: Si estamos preocupados por la versión 10 rompiendo el código anterior:

if (strtok(phpversion(),'.') >= 5) { 
    // php >= 5 
}else{ 
    // php < 5 
} 
+0

Sí, eso funcionará una vez que lleguemos a la versión 10. :) Mejor búsqueda del punto. Sé que el desarrollo de PHP no es muy rápido, pero también pensé en Firefox, y ahora han lanzado 3 versiones en un año. – GolezTrol

+0

Buen punto. Ver editar. – timdev

9

Ver http://www.php.net/manual/en/function.version-compare.php para ver un ejemplo:

if (version_compare(PHP_VERSION, '5.0.0', '>=')) { ... 
+0

¡Agradable! ¡Me olvide de eso! – timdev

+0

Sí, sin embargo PHP_VERSION no es compatible con PHP4, luego pierde el punto ...?! –

+0

Si el instalador realmente necesita trabajar en PHP <4.1, puede verificar para asegurarse de que version_compare existe primero. 'if (function_exists ('version_compare') && version_compare (PHP_VERSION, '5.0.0', '> =')))'. Eso debería funcionar de nuevo a 4.0. – mcrumley

18

Algo como esto puede ser capaz de adaptarse:

<?php 
if (version_compare(PHP_VERSION, '6.0.0') >= 0) { 
    echo 'I am at least PHP version 6.0.0, my version: ' . PHP_VERSION . "\n"; 
} 

if (version_compare(PHP_VERSION, '5.3.0') >= 0) { 
    echo 'I am at least PHP version 5.3.0, my version: ' . PHP_VERSION . "\n"; 
} 

if (version_compare(PHP_VERSION, '5.0.0', '>=')) { 
    echo 'I am using PHP 5, my version: ' . PHP_VERSION . "\n"; 
} 

if (version_compare(PHP_VERSION, '5.0.0', '<')) { 
    echo 'I am using PHP 4, my version: ' . PHP_VERSION . "\n"; 
} 
?> 

Puede ver el documentation here.

+1

Buena solución. Especialmente porque PHP_VERSION está disponible mientras PHP_MAJOR_VERSION como lo mencionaron otros, solo está disponible desde 5.2. – GolezTrol

+0

Sí iba a sugerir PHP_MAJOR_VERSIÓN pero vi esa pequeña propaganda en la documentación. –

1
$version = explode('.', phpversion()); 
$major = (int)$version[0]; 
$minor = (int)$version[1]; 
$release = (int)$version[2]; 
0

En realidad, Symfony2 ya incluye una secuencia de comandos. Está en app/check.php. Comprueba un mínimo de PHP 5.3.2 y también muchas otras cosas.

Le sugiero que solo use eso.

0

echo PHP_VERSION_ID;
//You use version 5.3.7 the output like 50307

or echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION.PHP_RELEASE_VERSION; //You use version 5.3.7 the output like 537

+0

El objetivo de la verificación de versión era eliminar los servidores, que están desactualizados. If y 'PHP_VERSION_ID' es desde 5.2.7. versión. Entonces, si el php es la versión 4 ... habrá un error. –

+0

También parece que PHP_VERSION_ID debe estar predefinido en su código, no proviene del servidor http://ee1.php.net/phpversion –

Cuestiones relacionadas