Intereting Posts
mysqli error – bind_param: количество переменных не совпадает принудительный доступ к свойствам объекта __PHP_Incomplete_Class Как отлаживать «Неустранимая ошибка: вне памяти (выделено XXX) (пытался выделить XXXXX байты)»? "Exec () отключен из соображений безопасности" & "Неопределенная переменная" PDO Ввод массива с использованием ключа в качестве имени столбца Очистка содержимого текстового файла с помощью php как защитить папку uploads с .htaccess, чтобы разрешать только изображения на сайте wordpress ТВ-руководство, написанное на PHP – проблемы с функциями datetime () и базы данных Преобразовать форматированную дату в unix Почему я не могу проверить свои данные и зарегистрировать свои данные в базе данных? Борьба с загрузкой изображений с моего iOS на мой PHP-сервер Динамическое подключение к базе данных symfony2 $ _POST не содержит всех данных Как вы имеете дело с ', одинарная цитата в именах человека в php, javascript Как сделать таблицу, подобную этой, с помощью FPDF с помощью PHP?

как иметь 64-битное целое число на PHP?

кто-то знает, как иметь 64-битное целое число на PHP? похоже, что это не файл конфигурации, а скорее вариант компиляции, и это зависит от платформы?

    Для собственных 64-битных целых чисел требуется 64-разрядное оборудование и 64-разрядная версия PHP.

    На 32-разрядном оборудовании:

    $ php -r 'echo PHP_INT_MAX;' 2147483647 

    На 64-битном оборудовании:

     $ php -r 'echo PHP_INT_MAX;' 9223372036854775807 

    UPDATE: теперь он (протестирован на Amd Quad Core, Windows 8.1).

    Обратите внимание, что PHP в Windows не поддерживает 64-битные целые числа, даже если оба устройства и PHP 64-разрядные. См. Эту ссылку для получения дополнительной информации:

    В Windows x86_64 PHP_INT_MAX – 2147483647. Это связано с тем, что в базовом c-коде длинный 32-битный.

    Однако linux на x86_64 использует 64-битную длину, поэтому PHP_INT_MAX будет 9223372036854775807.

    Возможно, вы можете использовать расширение GMP или BCMath .

    PHP int size зависит от платформы. Существует функция, называемая unpack (), которая по существу позволяет конвертировать различные типы данных из двоичных строк в переменные PHP. Кажется, это единственный способ сохранить, так как 64-разрядный – хранить его как строку.

    Я нашел следующий код по адресу: 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); 

    Теперь вы должны получить PHP 7 – полностью совместимую 64-битную поддержку. Не только целые числа, но и все fstat, IO и т. Д. PHP 7 на Windows является истинным 64-битным.