Sunucu os 64-bit eğer PHP söyleyebilir misiniz?

7 Cevap php

Ben burada Windows ile uğraşıyorum.

Ben sayfayı görüntülerken tarayıcının işletim algılamak için $ _SERVER ['HTTP_USER_AGENT'] değişkeni kullanabilirsiniz biliyorum, ama PHP sunucunun işletim algılayabilir herhangi bir yolu var mı?

Benim programın UI için ben bir php web sayfasını kullanıyorum. Ben bir 64-bit işletim sistemi üzerinde farklı bir yere (Bu 'Wow6432Node' Key altında) olan kayıt defterindeki bir anahtar okumak gerekir.

Üzerinde çalıştığı hangi işletim söyleyebilir PHP miyim? OS 64-bit veya 32-bit olup olmadığını PHP söyleyebilir misiniz?

Yardımlarınız için şimdiden teşekkür ederiz.

7 Cevap

Note: This solution is a bit less convenient and slower than @Salman A's answer. Ben onun çözümü kullanmak ve kontrol etmek için tavsiye ediyorum PHP_INT_SIZE == 8 to see if you're on a 64bit os.

Sadece 32bit/64bit soru, böyle bir sinsi küçük bir işlev hile yapacağını cevap istiyorsanız (32/64 bit tabanlı İnts taşıma intval işlevin şekilde yararlanarak.)

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

Burada eylem kodu görebilirsiniz: http://ideone.com/JWKIf

Note: If the OS is 64bit but running a 32 bit version of php, the function will return false (32 bit)...

Tamsayı boyutunu (4/8 bayt) kontrol etmek için size PHP_INT_SIZE sabiti kullanabilirsiniz. PHP_INT_SIZE===8 sonra PHP 64-bit sürümü var. PHP_INT_SIZE===4 PHP bir 32-bit sürümü kullanılmakta olduğunu ima ancak bu işletim sistemi ve / veya İşlemci 32-bit olduğu anlamına gelmez.

, Windows + On içeren bir $_SERVER["PROCESSOR_ARCHITECTURE"] değişken olduğunda IIS x86 Benim sistem (WinXP-32bit) üzerinde test edildiğinde. Ben bir 64bit işletim sistemi üzerinde çalıştırırken x64 içerecektir düşünüyorum.

php_uname işlevini kullanarak deneyin ...

<?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 */
?>

Source - İşletim Sistemi belirleyin - http://www.sitepoint.com/forums/showthread.php?t=510565

Başka bir yöntem kullanmak için ...

 echo $_SERVER['SERVER_SOFTWARE']; 

Bu Win 7 (64bit) çalışan benim ibm T400 üzerinde aşağıdaki dizeyi döndürür ...

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

Ben apache 32bit sürümünü koşuyorum çünkü ne yazık ki, onun WİN32 dönen.

Sen cmd kullanarak, (* nix sunucu üzerinde) genel işlemci bilgi alabilirsiniz ...

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

Birçok farklı işletim sistemleri destekleyen planlıyorsanız muhtemelen yöntemleri bir arada kullanmak gerekir.

Veya WMI aramak için PHP COM kullanmak

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

Bit sayısını almak için biraz daha kısa ve daha sağlam bir yoldur.

    strlen(decbin(~0));

Bu nasıl çalışır:

Bitsel tamamlayıcısı operatörü, tilde, ~, her bit çevirir.

@ Görmek http://php.net/manual/en/language.operators.bitwise.php

0 bu kullanarak bir tamsayı için her bit açılır.

Bu size PHP kurulumunu işleyebilir büyük sayıyı verir.

Sonra (), onun ikili formda bu sayının bir dize temsilini verecek decbin kullanarak

@ Görmek http://php.net/manual/en/function.decbin.php

ve strlen size bit sayısını verecektir.

Burada kullanılabilir bir işlevi olduğunu

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

Eğer çıkış Os türü için bazı komut dosyasını kullanabilirsiniz

here WMI kullanarak bu bilgileri almak için nasıl bir örnek vardır.

Sen exec kullanarak bu komut dosyası çağırın ve çıkış okuyabilirsiniz.

Ben bit kayması ile şans vardı ve avantaj boolean döküm alarak ettik.

function is64bit()
{
  return (bool)((1<<32)-1);
}