Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find Windows 32 or 64 bit using PHP

Tags:

php

windows

Is it possible to get the window processor bit?? I want to find the window processor bit using php?? I have coding to find the operating system and other properties. Kindly advice. Thanks - Haan

like image 960
hjaffer2001 Avatar asked Jun 10 '11 07:06

hjaffer2001


4 Answers

<?php
switch(PHP_INT_SIZE) {
    case 4:
        echo '32-bit version of PHP';
        break;
    case 8:
        echo '64-bit version of PHP';
        break;
    default:
        echo 'PHP_INT_SIZE is ' . PHP_INT_SIZE;
}

This code snippet will at-least tell you if a 32/64 bit version of PHP is running.

like image 153
Salman A Avatar answered Oct 18 '22 20:10

Salman A


A slightly shorter and more robust way to get the number of bits.

    strlen(decbin(~0));

How this works:

The bitwise complement operator, the tilde, ~, flips every bit.

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

Using this on 0 switches on every bit for an integer.

This gives you the largest number that your PHP install can handle.

Then using decbin() will give you a string representation of this number in its binary form

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

and strlen will give you the count of bits.

Here is it in a usable function

function is64Bits() {
    return strlen(decbin(~0)) == 64;
}
like image 7
Chris0 Avatar answered Oct 18 '22 19:10

Chris0


If you have the COM extension installed (in php.ini) you can call the windows WMI service.

(Remember though that you event if you have a 64-bit processor, 64-bit OS and 64-bit PHP, your integers are still going to be 32-bit due to a limitation in x64-PHP on Windows.)

Anyway...

To check the OS:

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";
}

or, check the physical processor:

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";
}
like image 2
doublehelix Avatar answered Oct 18 '22 20:10

doublehelix


You could write a function like this:

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

Then you could use it like this:

if( is_32bit() ) {
    // do 32 bit stuffs
}
like image 1
Tim Penner Avatar answered Oct 18 '22 20:10

Tim Penner