PHP può dire se il server funziona a 64 bit?

Ho a che fare con Windows qui.

So che puoi utilizzare la variabile $_SERVER['HTTP_USER_AGENT'] per rilevare il sistema operativo del browser che visualizza la pagina, ma è il modo in cui PHP può rilevare il sistema operativo del server?

Per l'interface utente del mio programma sto usando una pagina web PHP. Ho bisogno di leggere una chiave nel registro che si trova in una posizione diversa su un sistema operativo a 64 bit (è sotto la chiave Wow6432Node ).

PHP può dire su quale sistema operativo è in esecuzione? PHP può dire se il sistema operativo è 64-bit o 32-bit?

Nota: questa soluzione è un po 'less comoda e più lenta della risposta di @Salman A. Ti consiglierei di usare la sua soluzione e verificare PHP_INT_SIZE == 8 per vedere se sei su un sistema operativo a 64 bit.

Se vuoi solo rispondere alla domanda a 32 bit / 64 bit, una piccola function subdola come questa farebbe il trucco (sfruttando il modo in cui la function intval gestisce gli inte basati su 32/64 bit).

 <?php function is_64bit() { $int = "9223372036854775807"; $int = intval($int); if ($int == 9223372036854775807) { /* 64bit */ return true; } elseif ($int == 2147483647) { /* 32bit */ return false; } else { /* error */ return "error"; } } ?> 

Puoi vedere il codice in azione qui: http://ideone.com/JWKIf

Nota: se il sistema operativo è a 64 bit ma esegue una versione a 32 bit di php, la function restituirà false (32 bit) …

Per verificare la dimensione del numero integer (4/8 byte) puoi usare la costante PHP_INT_SIZE . Se PHP_INT_SIZE===8 allora hai una versione a 64 bit di PHP. PHP_INT_SIZE===4 implica che venga utilizzata una versione di PHP a 32 bit, ma ciò non implica che il sistema operativo e / o l'elaboratore siano a 32 bit.

Su Windows + IIS c'è una variabile $_SERVER["PROCESSOR_ARCHITECTURE"] che contiene x86 quando viene testata sul mio sistema (WinXP-32bit). Penso che conterrà x64 quando si esegue su un sistema operativo a 64 bit.

Un modo leggermente più breve e più robusto per get il numero di bit.

  strlen(decbin(~0)); 

Come funziona:

L'operatore di complemento bit per bit, la tilde, ~ , si ribalta each bit.

@see http://php.net/manual/en/language.operators.bitwise.php

Usando questo su 0 si triggers each bit per un integer.

Questo ti dà il numero più grande che può gestire l'installazione di PHP.

Quindi usando decbin () otterrai una rappresentazione di string di questo numero nella sua forma binaria

@see http://php.net/manual/en/function.decbin.php

e strlen ti darà il conto dei bit.

Ecco in una function utilizzabile

 function is64Bits() { return strlen(decbin(~0)) == 64; } 

Prova a utilizzare la function php_uname

 <?php echo php_uname('s');/* Operating system name */ echo "<br />"; echo php_uname('n');/* Host name */ echo "<br />"; echo php_uname('r');/* Release name */ echo "<br />"; echo php_uname('v');/* Version information */ echo "<br />"; echo php_uname('m');/* Machine type */ echo "<br />"; echo PHP_OS;/* constant will contain the operating system PHP was built on */ ?> 

Fonte – Determine sistema operativo – http://www.sitepoint.com/forums/showthread.php?t=510565

Un altro metodo è usare …

  echo $_SERVER['SERVER_SOFTWARE']; 

Questo restituisce la seguente string sul mio ibm t400 con Win 7 (64 bit) …

Apache / 2.2.12 (Win32) DAV / 2 mod_ssl / 2.2.12 OpenSSL / 0.9.8k mod_autoindex_color PHP / 5.3.0 mod_perl / 2.0.4 Perl / v5.10.0

Sfortunatamente, restituisce WIN32 perché eseguo la versione a 32 bit di Apache.

È ansible get informazioni generali sul processre (su un server * nix), utilizzando il cmd …

 echo system('cat /proc/cpuinfo'); 

Probabilmente dovrai utilizzare una combinazione dei methods se stai pianificando di supportre molti sisthemes operativi diversi.

Oppure usa PHP COM per call wmi

 $obj = new COM('winmgmts://localhost/root/CIMV2'); $wmi = $obj->ExecQuery('Select * from Win32_OperatingSystem'); foreach($wmi as $wmiCall) { $architecture = $wmiCall->OSArchitecture; } 

Ho avuto fortuna con il bit shifting e il vantaggio del casting boolean.

 function is64bit() { return (bool)((1<<32)-1); } // or function is32bit() { return 1<<32 === 1; } 

puoi usare qualche script per produrre il tipo di Os

qui c'è un esempio di come get quell'informazione usando WMI.

Puoi call questo script usando exec e leggere l'output.

Una risposta un po 'tarda, ma se vuoi solo determinare la dimensione della parola, puoi usare questo: (log(PHP_INT_MAX + 1, 2) + 1)

se hai installato l'estensione COM (in php.ini) puoi call il servizio Windows WMI.

Per controllare il sistema operativo:

 function getOsArchitecture() { $wmi = new COM('winmgmts:{impersonationLevel=impersonate}//./root/cimv2'); $wmi = $obj->ExecQuery('SELECT * FROM Win32_OperatingSystem'); if (!is_object($wmi)) { throw new Exception('No access to WMI. Please enable DCOM in php.ini and allow the current user to access the WMI DCOM object.'); } foreach($wmi as $os) { return $os->OSArchitecture; } return "Unknown"; } 

oppure, controlla il processre fisico:

 function getProcessorArchitecture() { $wmi = new COM('winmgmts:{impersonationLevel=impersonate}//./root/cimv2'); if (!is_object($wmi)) { throw new Exception('No access to WMI. Please enable DCOM in php.ini and allow the current user to access the WMI DCOM object.'); } foreach($wmi->ExecQuery("SELECT Architecture FROM Win32_Processor") as $cpu) { # only need to check the first one (if there is more than one cpu at all) switch($cpu->Architecture) { case 0: return "x86"; case 1: return "MIPS"; case 2: return "Alpha"; case 3: return "PowerPC"; case 6: return "Itanium-based system"; case 9: return "x64"; } } return "Unknown"; } 

Non c'è bisogno di fare calcoli. Basta controllare la costante PHP_INT_SIZE:

 if(PHP_INT_SIZE>4) // 64 bit code else // 32 bit code 

La dimensione dei numbers interi è un buon indicatore, ma non a prova di proiettile. Qualcuno potrebbe eseguire un'applicazione a 32 bit su un sistema a 64 bit.

$ _SERVER ['SERVER_SOFTWARE'] e $ _SERVER ['SERVER_SIGNATURE'] potrebbero dirti qualcosa di utile, a seconda dell'implementazione del server.

Ecco una soluzione a una row per determinare se PHP è in esecuzione in modalità 64 bit o 32 bit:

 empty(strstr(php_uname("m"), '64')) ? $php64bit = false : $php64bit = true; 

Dopo aver eseguito la row di codice sopra la variabile $php64bit sarà impostata su true o false