У меня есть PHP-скрипт, который должен рандомизировать массив с единообразными результатами, чтобы он мог представить первые несколько элементов пользователю, а затем он мог бы получить больше результатов из того же перемешанного набора, если они этого хотят.
В настоящее время я использую следующее (основываясь на алгоритме Фишера Йетса, как мне кажется):
function shuffle(&$array, $seed)
{
mt_srand($seed);
for ($a=count($array)-1; $a>0; $a--) {
$b = mt_rand(0, $a);
$temp = $array[$a];
$array[$a] = $array[$b];
$array[$b] = $temp;
}
}
Что отлично работает на моей локальной установке, но на сервере, на котором он должен работать, установлен Suhosin, который переопределяет mt_srand, что означает, что начальное число игнорируется, массив просто случайным образом перемешивается, и пользователь получает дублированные результаты.
Все, что я нашел в Google, предполагает, что мне нужно отключить suhosin.mt_srand.ignore (и suhosin.srand.ignore, хотя и не уверен, что последний актуален), поэтому я добавил в .htaccess следующее:
php_flag suhosin.mt_srand.ignore Off
php_flag suhosin.srand.ignore Off
У меня нет доступа к php.ini на этом сервере, так что AFAIK - это единственный способ, которым я могу это сделать. Проблема в том, что ничего не дает - phpinfo () по-прежнему показывает обе настройки как On, тогда как я могу изменить другие настройки Suhosin с помощью .htaccess без проблем.
Итак, я полагаю, что я ищу способ либо фактически отключить suhosin.mt_srand.ignore (или причину, по которой он не работает), либо обходной путь для генерации генератора случайных чисел из PHP. Или мне просто придется самому внедрить еще один ГСЧ?
Любая помощь будет высоко ценится. Спасибо!