2011-03-24 5 views
26

¿Alguien sabe de una forma de verificar dentro de PHP si la secuencia de comandos se ejecuta como 32 bits o 64 bits? Actualmente estoy usando PHP 5.3.5.Comprobando si su código se ejecuta en PHP de 64 bits

Idealmente me gustaría escribir una función por lo que mi código puede tener este aspecto:

if(is_32bit() === true) { 
    do_32bit_workaround(); 
} 
do_everything_else(); 

Alguien tiene alguna idea?

+0

se parece que esta pregunta se responde aquí: http://stackoverflow.com/questions/2353473/can-php-tell-if-the-server-os-it-64-bit –

Respuesta

61

Comprueba la constante PHP_INT_SIZE. Variará según el tamaño del registro (es decir, 32 bits frente a 64 bits).

En sistemas de 32 bits PHP_INT_SIZE debería haber , para 64 bits que debe ser .

Consulte http://www.php.net/manual/en/language.types.integer.php para obtener más información.

+7

No es muy útil. Consulte http://stackoverflow.com/questions/6303241/find-windows-32-or-64-bit-using-php para obtener una mejor respuesta – matb33

+11

@ matb33 ... ¿Es la misma respuesta con una declaración de cambio ...? – coreyward

+1

El problema con esto es que no dice cuál debe ser el valor de 'PHP_INT_SIZE' para 32 bits frente a 64 bits. El enlace de matb33 proporciona esa información. –

0

Miré a mi alrededor y no encontré nada demasiado prometedor. Existe una buena posibilidad de que pueda usar $_SERVER['SERVER_SOFTWARE'] para contar (vea lo que se imprime en su sistema), pero hacer esto portátil y siempre preciso probablemente no sea factible.

0

Prueba esta sencilla función de PHP

<?php 

function maxBit() 
{ 
    list($return, $number) = array(0, 0); 

    // Start process 
    while (true) { 
     // Get number at x bits 
     $numX = intval(bcsub(bcpow('2', "{$return}"), '1')); 
     // Check number 
     if ($numX != 0 && $number == $numX) { 
      break; 
     } 
     // Update number 
     $number = $numX; 
     // Update return value 
     $return++; 
    } 

    return $return; 
} 

// Check is 64bit 
if (maxBit() == 64) { 
    // Write your code here... 
} 
6

Se podría escribir una función como esta:

function is_32bit(){ 
    return PHP_INT_SIZE === 4; 
} 

Posteriormente, se podría utilizar el código de ejemplo informados:

if (is_32bit()) { 
    do_32bit_workaround(); 
} else { 
    do_everything_else(); 
} 
+0

Menos es más, la respuesta corta es siempre la mejor respuesta. – SparK

Cuestiones relacionadas