本教程解释了通过PHP获取随机项的多种方法:数字、字符串、密码、nonces、图片等。
俺将各种项目中,使用这些技术,俺将俺遇到的一些PHP
随机数字
这种技术经常用于向CSS和JavaScript文件追加随机数非常有用
function shapeSpace_randomizer() {
return rand(1000000,9999999);
}
用法:
$random_number = shapeSpace_randomizer();
这只是其中一种方法。返回的数字将介于两个指定的数字之间。您可以根据需要调整范围。
获取随机字符串
如果你需要一个随机的字母数字字符串,试试下面的这个函数:
function shapeSpace_random_string($length) {
$characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$strlength = strlen($characters);
$random = '';
for ($i = 0; $i < $length; $i++) {
$random .= $characters[rand(0, $strlength - 1)];
}
return $random;
}
用法:
$random_string = shapeSpace_random_string(10);
这会得到一个10个字符的随机字符串。将10改为所需的值。下面是该函数的另一种版本:
function shapeSpace_random_string($length) {
$characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$random = substr(str_shuffle($characters), 0, $length);
return $random;
}
用法与前一个函数相同。
另一种随机的字符串
此技术与前一种技术类似,但是试图通过使用srand()函数填充随机数生成器,使字母数字字符串更加随机。
function shapeSpace_random_string($length) {
$characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
srand((double)microtime()*1000000);
$random = '';
for ($i = 0; $i < $length; $i++) {
$random .= $characters[rand() % strlen($characters)];
}
return $random;
}
用法:
$random_string = shapeSpace_random_string(10);
这会得到一个10个字符的随机字符串。将10改为所需的值。
随机的人类可读的字符串
在这里,我们生成了一个仅包含字母的随机字符串,这样访问者就可以读懂这个字符串了。
function shapeSpace_random_string_readable($length) {
$c = array('b','c','d','f','g','h','j','k','l','m','n','p','r','s','t','v','w','x','y','z');
$v = array('a','e','i','o','u'); srand((double)microtime()*1000000);
$max = $length / 2; $random = '';
for ($i = 1; $i <= $max; $i++) {
$random .= $c[rand(0,19)];
$random .= $v[rand(0,4)];
}
return $random;
}
用法:
$random_string = shapeSpace_random_string_readable(10);
这将得到一个随机的、人类可读的10个字符的字符串。将10改为所需的值。
从数组中获取随机项
有很多方法可以做到这一点。目标是从数组中返回随机选择的项。我使用这种技术来显示4个随机广告(来自包含8个广告的数组)。
function shapeSpace_get_random_items($length) {
$items = array( 'item 1', 'item 2', 'item 3', 'item 4', 'item 5', 'item 6', 'item 7', 'item 8', );
$n = array(1, 2, 3, 4, 5, 6, 7, 8);
srand((double)microtime()*1000000);
$rand = array_rand($n, $length);
sort($rand);
$random = '';
foreach ($rand as $r)
$random = $items[$r] .' ';
return $random;
}
用法:
$random_string = shapeSpace_get_random_items(4);
这会得到一个字符串,其中包含四个用空格分隔的随机项目。您可以根据需要调整数量,只要使其小于数组中的项目总数即可。您可以根据需要定制输出字符串。
随机密码字符串
下面是一个使用PHP的随机功能生成密码的示例:
function generatePassword($length=9, $strength=0) {
$vowels = 'aeuy';
$consonants = 'bdghjmnpqrstvz';
if ($strength & 1) {
$consonants .= 'BDGHJLMNPQRSTVWXZ';
}
if ($strength & 2) {
$vowels .= "AEUY";
}
if ($strength & 4) {
$consonants .= '23456789';
}
if ($strength & 8) {
$consonants .= '@#$%';
}
$password = '';
$alt = time() % 2;
for ($i = 0; $i < $length; $i++) {
if ($alt == 1) {
$password .= $consonants[(rand() % strlen($consonants))];
$alt = 0;
} else {
$password .= $vowels[(rand() % strlen($vowels))];
$alt = 1;
}
}
return $password;
}
有许多方法可以生成随机密码,但是这种技术很好,因为您可以控制密码的强度和长度。下面是一个用法示例:
$password = generatePassword(18, 8);
已知随机字符串
这是一种很奇怪的方式,我不建议在一个实时的网站上使用。我在我的公共聊天插件上试验了阻止垃圾邮件的简单方法,并决定尝试一个ajax支持的nonce字段。下面是我用来生成nonce(隐藏输入)的代码:
$nonces = array( 'Y4-B84pY:IN:;th1H$r+O8cF', 'IA/,HwsA^y@V0Rre(jF](^P+', 'kW5oJsj,M4$.}?Zf/GqqZcaz', '=1ekfx)K#_5goJ6HrifbK=Ss', '8#8r)z3=ELR;7Oqwcp3V3Nv!', 'Ei9)OuJaqYRssa]b}wut3;=m', '}TM42oi:-HppFF:XYk0OY{DM', 'z%v3[oRX[:w1pp,3ODHD)m7O', '@.,oe/A3KKJAvdtSc{]kogMA', 'tR7djZB~)hlqs6U*jTcXT+IS', );
$random = array_rand($nonces, 1);
$nonce = isset($nonces[$random]) ? base64_encode($nonces[$random]) : 0;
echo '';
然后,在处理Ajax请求时,我可以通过根据已知的$nonces集合检查提交的nonce值来验证用户。
注意,这种技术并不是真正推荐的;我把它放在这里是因为它适合这个主题,也因为它可以帮助那些从事类似项目的人产生一些想法。
原创文章,作者:我心飞翔,如若转载,请注明出处:https://www.pipipi.net/3772.html