Birisi PHP'de 64 bit tam sayıya sahip olmayı biliyor mu? yapılandırma dosyasıyla değil, bir derleme zamanı seçeneği olabilir ve platforma bağlı gibi görünüyor.PHP'de 64 bit tam sayı nasıl?
cevap
64-bit tamsayı 64 bit donanım VE PHP 64 bit sürümünü gerektirir. 32-bit donanım üzerinde
:
64-bit donanım üzerinde$ php -r 'echo PHP_INT_MAX;'
2147483647
:
$ php -r 'echo PHP_INT_MAX;'
9223372036854775807
Günümüzde çoğu yeni PC'nin 64 -bit Windows Vista? Bu gerekli mi? 64-bit işletim sistemi ve daha sonra 64-bit bir PHP sürümünü yükleyin? PHP'nin indirme sayfasında 64-bit bir versiyonu görmedim. birisi bana bunu işaret edebilir mi? "PHP 5.2.1 x64 Projesi" mi? –
Vista'nın özelliklerini bilmiyorum (ancak, evet, 64-bit işletim sistemine ihtiyacınız var). PHP'nin sitesinde değil, bu derlemede bulunan tek derlenmiş ikili dosyalara benziyor. ilk sonuç "64-bit PHP") Googling zaman: http://www.fusionxlan.com/PHPx64.php ve kaynaktan derleyerek eğer, tek bir sürüm var 32-bit ve 64-bit .. – scotts
yukarıda * sadece * x64 donanımı üzerinde "kurulu" bir PHP'nin (resmi olmayan) x64 sürümü üzerinde çalışır. En son resmi 32 bit sürümü bir x64 işletim sistemine sahip olmak ilk sonucu verir (ve yukarıdaki ifadeyi girmek için çift tırnak kullanmanız gerekebilir). – Bil
PHP int boyutu, platforma bağlıdır. Unpack() olarak adlandırılan ve temelde ikili dizelerden farklı veri türlerini PHP değişkenlerine dönüştüren bir işlev vardır. 64 bit olarak saklamak için tek yol bir dizge olarak saklamak gibi görünüyor. Belki siz de GMP veya BCMath uzantısını kullanabilirsiniz http://www.mysqlperformanceblog.com/2007/03/27/integers-in-php-running-with-scissors-and-portability/
/// portably build 64bit id from 32bit hi and lo parts
function _Make64 ($hi, $lo)
{
// on x64, we can just use int
if (((int)4294967296)!=0)
return (((int)$hi)<<32) + ((int)$lo);
// workaround signed/unsigned braindamage on x32
$hi = sprintf ("%u", $hi);
$lo = sprintf ("%u", $lo);
// use GMP or bcmath if possible
if (function_exists("gmp_mul"))
return gmp_strval (gmp_add (gmp_mul ($hi, "4294967296"), $lo));
if (function_exists("bcmul"))
return bcadd (bcmul ($hi, "4294967296"), $lo);
// compute everything manually
$a = substr ($hi, 0, -5);
$b = substr ($hi, -5);
$ac = $a*42949; // hope that float precision is enough
$bd = $b*67296;
$adbc = $a*67296+$b*42949;
$r4 = substr ($bd, -5) + + substr ($lo, -5);
$r3 = substr ($bd, 0, -5) + substr ($adbc, -5) + substr ($lo, 0, -5);
$r2 = substr ($adbc, 0, -5) + substr ($ac, -5);
$r1 = substr ($ac, 0, -5);
while ($r4>100000) { $r4-=100000; $r3++; }
while ($r3>100000) { $r3-=100000; $r2++; }
while ($r2>100000) { $r2-=100000; $r1++; }
$r = sprintf ("%d%05d%05d%05d", $r1, $r2, $r3, $r4);
$l = strlen($r);
$i = 0;
while ($r[$i]=="0" && $i<$l-1)
$i++;
return substr ($r, $i);
}
list(,$a) = unpack ("N", "\xff\xff\xff\xff");
list(,$b) = unpack ("N", "\xff\xff\xff\xff");
$q = _Make64($a,$b);
var_dump($q);
:
Ben aşağıdaki kodu bulundu.GÜNCELLEME: Artık (Amd Quad Core, Windows 8.1 üzerinde test) yok. Windows üzerinde PHP hiç 64 bit tamsayı desteklemez
Not donanım ve PHP hem 64 bit bile. Detaylar için this link bakınız: pencereler x86_64 üzerinde
, PHP_INT_MAX yatan c-kodunda, uzun 32 bit olmasıdır 2147483647 olduğunu. Tamamen tutarlı 64bit desteği -
Ancak x86_64'lerde linux PHP_INT_MAX 9223372036854775807.
"Şimdi yapar" ile ne demek istiyorsun? Windows 64 üzerindeki PHP 7'nin 64 bitlik tam sayıları desteklediğini görüyorum. Ayrıca bir PHP 5.x sürümü var mı? Eğer öyleyse, nereden aldın? –
Ayrıca, Windows –
64-bit int destek almak için de ilgileniyorum Şu anda PHP 7 anlamına gelir, bu [Tutarlı 64-bit desteği] olarak adlandırılır (http://php.net/releases/7_0_0. pHP). – Benjamin
Şimdi PHP 7 almalısınız olacak kadar uzun bir 64 bit kullanır. Sadece tamsayılar değil, aynı zamanda tüm fstat, IO, vb. Windows üzerinde PHP 7, 64 bittir.
Sadece PHP 7'ye yükseltildim ve 64 bit tamsayılar hala kullanılamıyor. Ne yapabileceğime dair bir fikrin var mı? –
Clifton, 64 bitlik bir yapı kullandığınızdan emin olun. –
Evet, Ubuntu sunucumun sadece 32 bit olduğu ortaya çıkıyor. Yükseltmek zorundaydım. –
- 1. JavaScript yazılan diziler: 64 bit tam sayı?
- 2. Cuda'da 128 bit tam sayı?
- 3. SQL Server'da imzasız 64 bit tam sayıları nasıl depolarsınız?
- 4. C++'da 512 bit bir tam sayı nasıl tanımlarım?
- 5. Windows'ta c ile 128 bit tam sayı?
- 6. Her zaman 32 bit ve 64 bit makinede 64 bit
- 7. SWT, Windows 64 bit
- 8. Microsoft.Office.Interop.Excel, 64 bit
- 9. 64-bit Windows'da 32 ve 64 bit birlikte çalışabilirlik
- 10. Java performansı 64 bit
- 11. 64-bit pencere montajcısı
- 12. Visual Studio 64 bit?
- 13. Windows 7 64 bit
- 14. 64 bit üzerinde uint32_t hizalaması?
- 15. Tcl'de imzasız 32 bit tam sayı temsil edecek şekilde tcl
- 16. PrintDialog neden görüntülenmiyor (64 bit)?
- 17. Installshield 64 bit proje ayarları
- 18. Nasıl 32 bit C# uygulaması bir 64 bit DLL kullanabiliyor
- 19. Pygame'i 64 bit win7'ye nasıl kurabilirim?
- 20. Windows 64 bit üzerinde cmake nasıl kurulur
- 21. 64 bit pencerelerde DirectX uygulaması
- 22. Tek 32/64 bit sürücüleri
- 23. Golang MSSQL sürücüsü 64-bit
- 24. 64 bit işlemcinin avantajları nelerdir?
- 25. Java 64 bit JDK sorusu
- 26. Machine.config'in 64 bit sürümünü alma
- 27. lua 64-bit geçiş sorunu
- 28. C 64-bit İşaretçi Hizalama
- 29. 64 bit makinede 64 bit olarak bir C++ programı nasıl derlenir?
- 30. Bağlantı Noktası 32-Bit 64-Bit Windows sürücüsü Windows
Bir "her bir tamsayı 64 bit çözüm" için daha fazlasını arıyordum, bu yüzden büyük tamsayı için bir modül kullanmamayı tercih ederim. –
Yan Not: bazı 64-bit PHP ikililer bulundu: [? Tamsayılar 64 bit olacak şekilde PHP kurma özelliklerini ne] arasında http://tommymontgomery.com/php64 –
olası yinelenen (http://stackoverflow.com/questions/870401/what-are-the-specifics-of-setting-up-php-so-that-integers-will-be-64-bit) –