1. 犀牛前端部落首页
  2. PHP百科

php随机变量

本教程解释了通过PHP获取随机项的多种方法:数字、字符串、密码、nonces、图片等。

俺将各种项目中,使用这些技术,俺将俺遇到的一些PHP随机变量的问题,全部总结整理与这篇文章中。

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 '<input type="hidden" name="sac_js_nonce" value="'. $nonce .'" />';

然后,在处理Ajax请求时,我可以通过根据已知的$nonces集合检查提交的nonce值来验证用户。

注意,这种技术并不是真正推荐的;我把它放在这里是因为它适合这个主题,也因为它可以帮助那些从事类似项目的人产生一些想法。

原创文章,作者:我心飞翔,如若转载,请注明出处:https://www.pipipi.net/3772.html

发表评论

登录后才能评论