|
|
|
| Доброго дня!
Сразу оговорюсь:
платформа i7 core intel 920 2.67 ГГц Windows Web Server 2008 R2 64bit
Столкнулся с переполнением в php. Код переписывался с си подобного языка. Вычисления содержат очень много битовых операций. В оригинале использовался unsigned int, в php аналога нет, поэтому используется просто int, который ограничивается на 32 bit платформе числом 2147483647. Но даже пляски с бубном не помогли ограничится платформой 32 bit. Перелопатил кучу информации и выяснил, что можно поставить php 64 bit + apache 64 bit и тогда int примет максимальное значение 9223372036854775807, что, как говорится, для меня за глаза. На данный момент официально только Mysql имеет 64 bit, пришлось найти любительские сборки php+apache 64 bit. Гугл говорит - здесь есть - http://www.anindya.com/. Скачал поставил, в информации phpinfo:
Build Date May 13 2010 21:36:58
Compiler MSVC9 (Visual C++ 2008)
Architecture x64
Configure Command cscript /nologo configure.js "--with-xsl" "--with-xmlrpc" "--with-sqlite" "--enable-soap" "--with-pdo-sqlite" "--with-pdo-pgsql" "--with-pdo-odbc" "--with-pdo-mysql" "--enable-pdo" "--with-mysqli" "--with-mysql" "--enable-exif" "--with-tidy" "--with-sqlite3" "--enable-sockets" "--enable-shmop" "--with-pgsql" "--with-openssl" "--with-mcrypt" "--enable-mbregex" "--enable-mbstring" "--with-ldap" "--enable-intl" "--with-gettext" "--without-t1lib" "--enable-fileinfo" "--with-curl" "--enable-apache2-2handler" "--with-snapshot-template=..\deps\template" "--enable-http"
PROCESSOR_ARCHITECTURE AMD64
PROCESSOR_IDENTIFIER Intel64 Family 6 Model 26 Stepping 5, GenuineIntel
Все вроде 64 bit, но php имеет опять 32 разряда что подтверждается кодом:
<?php
print "PHP_INT_MAX: " . PHP_INT_MAX . "\n";
print "PHP_INT_SIZE: " . PHP_INT_SIZE . " bytes (" . (PHP_INT_SIZE * 8) . " bits)\n";
?>
|
результат:
PHP_INT_MAX: 2147483647
PHP_INT_SIZE: 4 bytes (32 bits)
пляски с переставлением различных версий php и апача от разных сборщиков большего результата не дали.
Может кто имел опыт установки 64 bit платформы под виндой. К сожалению на сервере крутятся 2 windows приложения и перейти под линукс не получится. Помогите советом. | |
|
|
|
|
|
|
|
для: Director_Of_Zoo
(06.11.2011 в 11:38)
| | А если ориентироваться не на PHP_INT_MAX, а на фактический размер, результат тоже в 2147483647 упирается? | |
|
|
|
|
|
|
|
для: cheops
(06.11.2011 в 12:57)
| | именно так | |
|
|
|
|
|
|
|
для: Director_Of_Zoo
(06.11.2011 в 11:38)
| | Сам решил проблемы:
на сервере с Windows Web Server 2008 поднял Хост виртуальный машины с предустановленым linux ubuntu 64 bit / apache 64 bit / php 64 bit. Сделал шару папку в винде и подмонтировал её в линукс машине как рабочую папку для апача. вот и всё. хост висит на 80 порту и слушает запросы. Конечно это съело часть ресурсов системы, но зато работает как нужно, тем более щас сервера с безумными ресурсами по железу стали.
Инт теперь имеет предел 9223372036854775807 | |
|
|
|