[QUOTE] написал:
Проблема наблюдается только под windows. Обратитесь в ТП за фиксом.[/QUOTE]
Поддержка зафиксировала обращение, плюс поделилась поправленным файлом (прикладываю код файла (сам файл не крепится), может кому пригодится).
Файл надо заменить: /bitrix/modules/main/lib/security/random.php
Проблема наблюдается только под windows. Обратитесь в ТП за фиксом.[/QUOTE]
Поддержка зафиксировала обращение, плюс поделилась поправленным файлом (прикладываю код файла (сам файл не крепится), может кому пригодится).
Файл надо заменить: /bitrix/modules/main/lib/security/random.php
Скрытый текст |
|---|
| [COLOR=#bbbbbb][FONT="Fira Code", monospace][COLOR=#d55fde]<?php [/COLOR][COLOR=#d55fde] [/COLOR][COLOR=#d55fde]namespace [/COLOR]Bitrix\Main\Security; [COLOR=#d55fde]class [/COLOR][COLOR=#e5c07b]Random [/COLOR]{ [COLOR=#d55fde]const [/COLOR][COLOR=#7f8591]RANDOM_BLOCK_LENGTH [/COLOR]= [COLOR=#d19a66]64[/COLOR]; [COLOR=#5c6370]// ToDo: In future versions (PHP >= 5.6.0) use shift to the left instead this s**t [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]const [/COLOR][COLOR=#7f8591]ALPHABET_NUM [/COLOR]= [COLOR=#d19a66]1[/COLOR]; [COLOR=#d55fde]const [/COLOR][COLOR=#7f8591]ALPHABET_ALPHALOWER [/COLOR]= [COLOR=#d19a66]2[/COLOR]; [COLOR=#d55fde]const [/COLOR][COLOR=#7f8591]ALPHABET_ALPHAUPPER [/COLOR]= [COLOR=#d19a66]4[/COLOR]; [COLOR=#d55fde]const [/COLOR][COLOR=#7f8591]ALPHABET_SPECIAL [/COLOR]= [COLOR=#d19a66]8[/COLOR]; [COLOR=#d55fde]const [/COLOR][COLOR=#7f8591]ALPHABET_ALL [/COLOR]= [COLOR=#d19a66]15[/COLOR]; [COLOR=#d55fde]protected static [/COLOR][COLOR=#ef596f]$alphabet [/COLOR]= [COLOR=#d55fde]array[/COLOR]( [COLOR=#d55fde]self[/COLOR]::[COLOR=#d19a66]ALPHABET_NUM [/COLOR]=> [COLOR=#89ca78]'0123456789'[/COLOR], [COLOR=#d55fde]self[/COLOR]::[COLOR=#d19a66]ALPHABET_ALPHALOWER [/COLOR]=> [COLOR=#89ca78]'abcdefghijklmnopqrstuvwxyz'[/COLOR], [COLOR=#d55fde]self[/COLOR]::[COLOR=#d19a66]ALPHABET_ALPHAUPPER [/COLOR]=> [COLOR=#89ca78]'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[/COLOR], [COLOR=#d55fde]self[/COLOR]::[COLOR=#d19a66]ALPHABET_SPECIAL [/COLOR]=> [COLOR=#89ca78]',.#!*%$:-^@{}[]()_+=<>?&;' [/COLOR][COLOR=#89ca78] [/COLOR]); [COLOR=#5c6370]/** [/COLOR][COLOR=#5c6370] * Returns random integer with the given range [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#d19a66]$min [/COLOR][COLOR=#5c6370]The lower bound of the range. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#d19a66]$max [/COLOR][COLOR=#5c6370]The upper bound of the range. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@return [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@throws [/COLOR][COLOR=#5c6370]\Bitrix\Main\SystemException [/COLOR][COLOR=#5c6370] */ [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]public static function [/COLOR][COLOR=#7f8591]getInt[/COLOR]([COLOR=#d19a66]$min [/COLOR]= [COLOR=#d19a66]0[/COLOR], [COLOR=#d19a66]$max [/COLOR]= [COLOR=#7f8591]\[/COLOR][COLOR=#d19a66]PHP_INT_MAX[/COLOR]) { [COLOR=#d55fde]if [/COLOR]([COLOR=#d19a66]$min [/COLOR]> [COLOR=#d19a66]$max[/COLOR]) { [COLOR=#d55fde]throw new [/COLOR][COLOR=#7f8591]\Bitrix\Main\[/COLOR]ArgumentException( [COLOR=#89ca78]'The min parameter must be lower than max parameter' [/COLOR][COLOR=#89ca78] [/COLOR]); } $range = [COLOR=#d19a66]$max [/COLOR]- [COLOR=#d19a66]$min[/COLOR]; [COLOR=#d55fde]if [/COLOR]($range == [COLOR=#d19a66]0[/COLOR]) [COLOR=#d55fde]return [/COLOR][COLOR=#d19a66]$max[/COLOR]; [COLOR=#d55fde]if [/COLOR]($range > [COLOR=#7f8591]\[/COLOR][COLOR=#d19a66]PHP_INT_MAX [/COLOR]|| [COLOR=#61afef]is_float[/COLOR]($range)) { [COLOR=#d55fde]throw new [/COLOR][COLOR=#7f8591]\Bitrix\Main\[/COLOR]SystemException( [COLOR=#89ca78]'The supplied range is too great' [/COLOR][COLOR=#89ca78] [/COLOR]); } $bits = [COLOR=#d55fde]static[/COLOR]::[COLOR=#61afef]countBits[/COLOR]($range) + [COLOR=#d19a66]1[/COLOR]; $length = ([COLOR=#d55fde]int[/COLOR]) [COLOR=#61afef]max[/COLOR]([COLOR=#61afef]ceil[/COLOR]($bits / [COLOR=#d19a66]8[/COLOR]), [COLOR=#d19a66]1[/COLOR]); $filter = [COLOR=#61afef]pow[/COLOR]([COLOR=#d19a66]2[/COLOR], $bits) - [COLOR=#d19a66]1[/COLOR]; [COLOR=#d55fde]if [/COLOR]($filter >= [COLOR=#7f8591]\[/COLOR][COLOR=#d19a66]PHP_INT_MAX[/COLOR]) $filter = [COLOR=#7f8591]\[/COLOR][COLOR=#d19a66]PHP_INT_MAX[/COLOR]; [COLOR=#d55fde]else [/COLOR][COLOR=#d55fde] [/COLOR]$filter = ([COLOR=#d55fde]int[/COLOR]) $filter; [COLOR=#d55fde]do [/COLOR][COLOR=#d55fde] [/COLOR]{ $rnd = [COLOR=#61afef]hexdec[/COLOR]([COLOR=#61afef]bin2hex[/COLOR]([COLOR=#d55fde]self[/COLOR]::[COLOR=#61afef]getBytes[/COLOR]($length))); $rnd = $rnd & $filter; } [COLOR=#d55fde]while [/COLOR]($rnd > $range); [COLOR=#d55fde]return [/COLOR]([COLOR=#d19a66]$min [/COLOR]+ $rnd); } [COLOR=#5c6370]/** [/COLOR][COLOR=#5c6370] * Returns random (if possible) alphanum string [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#d19a66]$length [/COLOR][COLOR=#5c6370]Result string length. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]bool [/COLOR][COLOR=#d19a66]$caseSensitive [/COLOR][COLOR=#5c6370]Generate case sensitive random string (e.g. `SoMeRandom1`). [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@return [/COLOR][COLOR=#5c6370]string [/COLOR][COLOR=#5c6370] */ [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]public static function [/COLOR][COLOR=#61afef]getString[/COLOR]([COLOR=#d19a66]$length[/COLOR], [COLOR=#d19a66]$caseSensitive [/COLOR]= [COLOR=#d55fde]false[/COLOR]) { $alphabet = [COLOR=#d55fde]self[/COLOR]::[COLOR=#d19a66]ALPHABET_NUM [/COLOR]| [COLOR=#d55fde]self[/COLOR]::[COLOR=#d19a66]ALPHABET_ALPHALOWER[/COLOR]; [COLOR=#d55fde]if [/COLOR]([COLOR=#d19a66]$caseSensitive[/COLOR]) { $alphabet |= [COLOR=#d55fde]self[/COLOR]::[COLOR=#d19a66]ALPHABET_ALPHAUPPER[/COLOR]; } [COLOR=#d55fde]return static[/COLOR]::[COLOR=#61afef]getStringByAlphabet[/COLOR]([COLOR=#d19a66]$length[/COLOR], $alphabet); } [COLOR=#5c6370]/** [/COLOR][COLOR=#5c6370] * Returns random (if possible) ASCII string for a given alphabet mask ([/COLOR][COLOR=#d55fde]@see [/COLOR][COLOR=#5c6370]self::ALPHABET_ALL) [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#d19a66]$length [/COLOR][COLOR=#5c6370]Result string length. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#d19a66]$alphabet [/COLOR][COLOR=#5c6370]Alphabet masks (e.g. Random::ALPHABET_NUM|Random::ALPHABET_ALPHALOWER). [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]bool [/COLOR][COLOR=#d19a66]$requireAll [/COLOR][COLOR=#5c6370]Required chars from all the alphabet masks. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@return [/COLOR][COLOR=#5c6370]string [/COLOR][COLOR=#5c6370] */ [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]public static function [/COLOR][COLOR=#7f8591]getStringByAlphabet[/COLOR]([COLOR=#d19a66]$length[/COLOR], [COLOR=#d19a66]$alphabet[/COLOR], [COLOR=#d19a66]$requireAll [/COLOR]= [COLOR=#d55fde]false[/COLOR]) { $charsetList = [COLOR=#d55fde]static[/COLOR]::[COLOR=#61afef]getCharsetsforAlphabet[/COLOR]([COLOR=#d19a66]$alphabet[/COLOR]); [COLOR=#d55fde]if[/COLOR]([COLOR=#d19a66]$requireAll [/COLOR]&& [COLOR=#61afef]count[/COLOR]($charsetList) > [COLOR=#d19a66]1[/COLOR]) { [COLOR=#d55fde]return static[/COLOR]::[COLOR=#61afef]getStringByArray[/COLOR]([COLOR=#d19a66]$length[/COLOR], $charsetList); } [COLOR=#d55fde]else [/COLOR][COLOR=#d55fde] [/COLOR]{ [COLOR=#d55fde]return static[/COLOR]::[COLOR=#61afef]getStringByCharsets[/COLOR]([COLOR=#d19a66]$length[/COLOR], [COLOR=#61afef]implode[/COLOR]([COLOR=#89ca78]""[/COLOR], $charsetList)); } } [COLOR=#5c6370]/** [/COLOR][COLOR=#5c6370] * Returns random (if possible) string for a given charset list. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#d19a66]$length [/COLOR][COLOR=#5c6370]Result string length. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]string [/COLOR][COLOR=#d19a66]$charsetList [/COLOR][COLOR=#5c6370]Charset list, must be ASCII. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@return [/COLOR][COLOR=#5c6370]string [/COLOR][COLOR=#5c6370] */ [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]public static function [/COLOR][COLOR=#7f8591]getStringByCharsets[/COLOR]([COLOR=#d19a66]$length[/COLOR], [COLOR=#d19a66]$charsetList[/COLOR]) { $charsetVariants = [COLOR=#61afef]strlen[/COLOR]([COLOR=#d19a66]$charsetList[/COLOR]); $randomSequence = [COLOR=#d55fde]static[/COLOR]::[COLOR=#61afef]getBytes[/COLOR]([COLOR=#d19a66]$length[/COLOR]); $result = [COLOR=#89ca78]''[/COLOR]; [COLOR=#d55fde]for [/COLOR]($i = [COLOR=#d19a66]0[/COLOR]; $i < [COLOR=#d19a66]$length[/COLOR]; $i++) { $randomNumber = [COLOR=#61afef]ord[/COLOR]($randomSequence[$i]); $result .= [COLOR=#d19a66]$charsetList[/COLOR][$randomNumber % $charsetVariants]; } [COLOR=#d55fde]return [/COLOR]$result; } [COLOR=#5c6370]/** [/COLOR][COLOR=#5c6370] * This function places chars from every charset into the result string randomly. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#d19a66]$length [/COLOR][COLOR=#5c6370]Result string length. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]array [/COLOR][COLOR=#d19a66]$charsetList [/COLOR][COLOR=#5c6370]Array of charsets. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@return [/COLOR][COLOR=#5c6370]string [/COLOR][COLOR=#5c6370] */ [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]public static function [/COLOR][COLOR=#7f8591]getStringByArray[/COLOR]([COLOR=#d55fde]int [/COLOR][COLOR=#d19a66]$length[/COLOR], [COLOR=#d55fde]array [/COLOR][COLOR=#d19a66]$charsetList[/COLOR]): [COLOR=#d55fde]string [/COLOR][COLOR=#d55fde] [/COLOR]{ $count = [COLOR=#61afef]count[/COLOR]([COLOR=#d19a66]$charsetList[/COLOR]); [COLOR=#5c6370]// take strlen() out of the cycle [/COLOR][COLOR=#5c6370] [/COLOR]$charsets = []; [COLOR=#d55fde]foreach [/COLOR]([COLOR=#d19a66]$charsetList [/COLOR][COLOR=#d55fde]as [/COLOR]$charset) { $charsets[] = [$charset, [COLOR=#61afef]strlen[/COLOR]($charset)]; } $randomSequence = [COLOR=#d55fde]static[/COLOR]::[COLOR=#61afef]getBytes[/COLOR]([COLOR=#d19a66]$length[/COLOR]); $result = [COLOR=#89ca78]''[/COLOR]; [COLOR=#d55fde]for [/COLOR]($i = [COLOR=#d19a66]0[/COLOR]; $i < [COLOR=#d19a66]$length[/COLOR]; $i += $count) { [COLOR=#61afef]shuffle[/COLOR]($charsets); [COLOR=#d55fde]for [/COLOR]($j = [COLOR=#d19a66]0[/COLOR]; $j < $count; $j++) { $randomNumber = [COLOR=#61afef]ord[/COLOR]($randomSequence[$i + $j]); $charset = $charsets[$j][[COLOR=#d19a66]0[/COLOR]]; $charsetVariants = $charsets[$j][[COLOR=#d19a66]1[/COLOR]]; $result .= $charset[$randomNumber % $charsetVariants]; [COLOR=#d55fde]if [/COLOR](($i + $j + [COLOR=#d19a66]1[/COLOR]) == [COLOR=#d19a66]$length[/COLOR]) { [COLOR=#d55fde]break [/COLOR][COLOR=#d19a66]2[/COLOR]; } } } [COLOR=#d55fde]return [/COLOR]$result; } [COLOR=#5c6370]/** [/COLOR][COLOR=#5c6370] * Returns random (if possible) byte string [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#d19a66]$length [/COLOR][COLOR=#5c6370]Result byte string length. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@return [/COLOR][COLOR=#5c6370]string [/COLOR][COLOR=#5c6370] */ [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]public static function [/COLOR][COLOR=#7f8591]getBytes[/COLOR]([COLOR=#d19a66]$length[/COLOR]) { $backup = [COLOR=#d55fde]null[/COLOR]; [COLOR=#d55fde]if [/COLOR]([COLOR=#d19a66]$length [/COLOR]<= [COLOR=#d19a66]0[/COLOR]) { [COLOR=#d19a66]$length [/COLOR]= [COLOR=#d19a66]1[/COLOR]; } $bytes = [COLOR=#61afef]openssl_random_pseudo_bytes[/COLOR]([COLOR=#d19a66]$length[/COLOR], $strong); [COLOR=#d55fde]if [/COLOR]($bytes && [COLOR=#61afef]strlen[/COLOR]($bytes) >= [COLOR=#d19a66]$length[/COLOR]) { [COLOR=#d55fde]if [/COLOR]($strong) { [COLOR=#d55fde]return [/COLOR][COLOR=#61afef]substr[/COLOR]($bytes, [COLOR=#d19a66]0[/COLOR], [COLOR=#d19a66]$length[/COLOR]); } $backup = $bytes; } [COLOR=#d55fde]if [/COLOR]([COLOR=#61afef]file_exists[/COLOR]([COLOR=#89ca78]'/dev/urandom'[/COLOR])) { [COLOR=#d55fde]if [/COLOR]($file = @[COLOR=#61afef]fopen[/COLOR]([COLOR=#89ca78]'/dev/urandom'[/COLOR], [COLOR=#89ca78]'rb'[/COLOR])) { $bytes = @[COLOR=#61afef]fread[/COLOR]($file, [COLOR=#d19a66]$length [/COLOR]+ [COLOR=#d19a66]1[/COLOR]); @[COLOR=#61afef]fclose[/COLOR]($file); [COLOR=#d55fde]if [/COLOR]($bytes && [COLOR=#61afef]strlen[/COLOR]($bytes) >= [COLOR=#d19a66]$length[/COLOR]) { [COLOR=#d55fde]return [/COLOR][COLOR=#61afef]substr[/COLOR]($bytes, [COLOR=#d19a66]0[/COLOR], [COLOR=#d19a66]$length[/COLOR]); } } } [COLOR=#d55fde]if [/COLOR]($backup && [COLOR=#61afef]strlen[/COLOR]($backup) >= [COLOR=#d19a66]$length[/COLOR]) { [COLOR=#d55fde]return [/COLOR][COLOR=#61afef]substr[/COLOR]($backup, [COLOR=#d19a66]0[/COLOR], [COLOR=#d19a66]$length[/COLOR]); } $bytes = [COLOR=#89ca78]''[/COLOR]; [COLOR=#d55fde]while [/COLOR]([COLOR=#61afef]strlen[/COLOR]($bytes) < [COLOR=#d19a66]$length[/COLOR]) { $bytes .= [COLOR=#d55fde]static[/COLOR]::[COLOR=#61afef]getPseudoRandomBlock[/COLOR](); } [COLOR=#d55fde]return [/COLOR][COLOR=#61afef]substr[/COLOR]($bytes, [COLOR=#d19a66]0[/COLOR], [COLOR=#d19a66]$length[/COLOR]); } [COLOR=#5c6370]/** [/COLOR][COLOR=#5c6370] * Returns pseudo random block [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@return [/COLOR][COLOR=#5c6370]string [/COLOR][COLOR=#5c6370] */ [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]protected static function [/COLOR][COLOR=#7f8591]getPseudoRandomBlock[/COLOR]() { $bytes = [COLOR=#61afef]openssl_random_pseudo_bytes[/COLOR]([COLOR=#d55fde]static[/COLOR]::[COLOR=#d19a66]RANDOM_BLOCK_LENGTH[/COLOR]); [COLOR=#d55fde]if [/COLOR]($bytes && [COLOR=#61afef]strlen[/COLOR]($bytes) >= [COLOR=#d55fde]static[/COLOR]::[COLOR=#d19a66]RANDOM_BLOCK_LENGTH[/COLOR]) { [COLOR=#d55fde]return [/COLOR][COLOR=#61afef]substr[/COLOR]($bytes, [COLOR=#d19a66]0[/COLOR], [COLOR=#d55fde]static[/COLOR]::[COLOR=#d19a66]RANDOM_BLOCK_LENGTH[/COLOR]); } $bytes = [COLOR=#89ca78]''[/COLOR]; [COLOR=#d55fde]for [/COLOR]($i=[COLOR=#d19a66]0[/COLOR]; $i < [COLOR=#d55fde]static[/COLOR]::[COLOR=#d19a66]RANDOM_BLOCK_LENGTH[/COLOR]; $i++) { $bytes .= [COLOR=#61afef]pack[/COLOR]([COLOR=#89ca78]'S'[/COLOR], [COLOR=#61afef]mt_rand[/COLOR]([COLOR=#d19a66]0[/COLOR],[COLOR=#d19a66]0xffff[/COLOR])); } [COLOR=#d55fde]return [/COLOR][COLOR=#61afef]hash[/COLOR]([COLOR=#89ca78]'sha512'[/COLOR], $bytes, [COLOR=#d55fde]true[/COLOR]); } [COLOR=#5c6370]/** [/COLOR][COLOR=#5c6370] * Returns strings with charsets based on alpabet mask (see $this->alphabet) [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#5c6370] * Simple example (now arrays!): [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#666666]<code>[/COLOR][COLOR=#666666] [/COLOR][COLOR=#666666] [/COLOR][COLOR=#5c6370]* echo $this->getCharsetsforAlphabet(static::ALPHABET_NUM|static::ALPHABET_ALPHALOWER); [/COLOR][COLOR=#5c6370] * //output: 0123456789abcdefghijklmnopqrstuvwxyz [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#5c6370] * echo $this->getCharsetsforAlphabet(static::ALPHABET_SPECIAL|static::ALPHABET_ALPHAUPPER); [/COLOR][COLOR=#5c6370] * //output:ABCDEFGHIJKLMNOPQRSTUVWXYZ,.#!*%$:-^@{}[]()_+=<>?&; [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#5c6370] * echo $this->getCharsetsforAlphabet(static::ALPHABET_ALL); [/COLOR][COLOR=#5c6370] * //output: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.#!*%$:-^@{}[]()_+=<>?&; [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#666666]</code>[/COLOR][COLOR=#666666] [/COLOR][COLOR=#666666] [/COLOR][COLOR=#5c6370]* [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]string [/COLOR][COLOR=#d19a66]$alphabet [/COLOR][COLOR=#5c6370]Alpabet masks (e.g. static::ALPHABET_NUM|static::ALPHABET_ALPHALOWER). [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@return [/COLOR][COLOR=#5c6370]array [/COLOR][COLOR=#5c6370] */ [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]protected static function [/COLOR][COLOR=#7f8591]getCharsetsForAlphabet[/COLOR]([COLOR=#d19a66]$alphabet[/COLOR]) { $result = []; [COLOR=#d55fde]foreach [/COLOR]([COLOR=#d55fde]static[/COLOR]::[COLOR=#ef596f]$alphabet [/COLOR][COLOR=#d55fde]as [/COLOR]$mask => $value) { [COLOR=#d55fde]if [/COLOR]([COLOR=#d19a66]$alphabet [/COLOR]& $mask) { $result[] = $value; } } [COLOR=#d55fde]return [/COLOR]$result; } [COLOR=#5c6370]/** [/COLOR][COLOR=#5c6370] * Returns number of bits needed to represent an integer [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@param [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#d19a66]$value [/COLOR][COLOR=#5c6370]Integer value for calculate. [/COLOR][COLOR=#5c6370] * [/COLOR][COLOR=#d55fde]@return [/COLOR][COLOR=#5c6370]int [/COLOR][COLOR=#5c6370] */ [/COLOR][COLOR=#5c6370] [/COLOR][COLOR=#d55fde]protected static function [/COLOR][COLOR=#7f8591]countBits[/COLOR]([COLOR=#d19a66]$value[/COLOR]) { $result = [COLOR=#d19a66]0[/COLOR]; [COLOR=#d55fde]while [/COLOR]([COLOR=#d19a66]$value [/COLOR]>>= [COLOR=#d19a66]1[/COLOR]) $result++; [COLOR=#d55fde]return [/COLOR]$result; } } [/FONT][/COLOR] |