2014-08-27 2 views
1

Следующий скрипт предоставляет следующий вывод. Я запускаю PHP версии 5.5.12 с Apache/2.2.15 (CentOS) на сервере i386. Примечание. Я запускаю тот же скрипт на моем почти идентичном сервере, который является x86_64, и я не испытываю ошибки.Предупреждение: mt_rand(): max (-1) меньше min (1)

<?php 
$id=mt_rand (1 , 4294967295); 
?> 

Внимание: mt_rand(): макс (-1) меньше мин (1) в /var/www/html/testing/mt_rand.php на линии 2

Что вызывает эту ошибку и как ее исправить?

ответ

2

Вы используете значение, превышающее максимальный максимум. Как указано в What is the maximum value for a int32?, это значение равно 2,147,483,647.

От PHP.net in mt_rand():

Описание

INT mt_rand (аннулируются)

INT mt_rand (интермедиат $ мин, Int $ макс)

Возвращаемые значения

Случайное целочисленное значение между min (или 0) и max (или mt_getrandmax(), включительно), или FALSE, если max меньше min.

Из PHP manual:

Размер целого зависит от платформы, хотя максимальное значение примерно два миллиарда является обычным значением (это 32-битное знаковое). PHP не поддерживает целые числа без знака. Целочисленный размер может быть определен с использованием константы PHP_INT_SIZE и максимального значения с использованием константы PHP_INT_MAX с PHP 4.4.0 и PHP 5.0.5.

Ваш скрипт не работает на 32-битных системах, поскольку вы предоставляете значение, равное ~ 4 миллиардам, а максимальное - ~ 2 миллиарда. Обходным решением может быть изменение PHP_INT_MAX.

+0

нет даже если. что. он SIGNED 32bit, поэтому ~ 2 миллиарда положительных макс. –

+0

@MarcB извините, я не понимаю, что вы имеете в виду. – fedorqui

+0

Я пробовал это несколько раз, поэтому я уверен, что я не просто «случайно» ударил 4294967295. Это, как говорится, я уверен, что вы правы. Я рассмотрю 'PHP_INT_MAX'. – user1032531

3

Если вы хотите значение от 1 до 4294967295, который является независимым от платформы, используйте следующую команду:

$id=2147483648+mt_rand(-2147483647,2147483647); 

Это отвечает часть вопроса, но fedorqui ответил на реальный вопрос о том, что число на некоторых платформах ограничено до +/- 2,147,483,647.

+1

Молодцы! +1 для исследования и поиска обходного пути. – fedorqui

Смежные вопросы