首页 开发编程 正文

php怎么看出字符串

bool$more_entropy=false]])用于获取一个带前缀、基于当前时间微秒数的唯一ID。...

php怎么看出字符串,如何使用PHP生成随机字符串?

引言

我们经常可能会用到邀请码,邮件验证码,或者需要使用unique 字符串标记用户属性的情况。

今天我们且不说高深的“全局唯一ID”的生成方案,我们说一个简单的,如何生成一个唯一的,随机的,数组字母组成的字符串。

学习时间

PHP 有一个内置函数 uniqid,用于生成一个唯一的ID。该函数结构形式:

string uniqid([ string $prefix = ""[, bool $more_entropy = false]] )

用于获取一个带前缀、基于当前时间微秒数的唯一ID。

但是该方法所生成的ID并不是安全的,且依赖于本机的时间戳,有可能在同一微秒生成同一ID。所以安全起见,需要添加上 prefix 参数,以示区别。

more_entropy 参数使生成的ID更具有唯一性,如果设置为 TRUE,uniqid() 会在返回的字符串结尾增加额外的煽(使用combined linear congruential generator)。

这就够了吗?这当然不是最优的解决方法。我们尝试其他解决方案。使用 openssl 带来的加密性和唯一性。

bin2hex(openssl_random_pseudo_bytes($bytes))

使用 openssl_random_pseudo_bytes 函数生成一个伪随机字符串的字节,然后使用 bin2hex 将其格式化为十六进制的字符串。

生成的伪随机字节,其字节数由length参数确定。还指示是否使用了加密功能强的算法来生成伪随机字节,并通过可选的crypto_strongparameter来执行此操作。 此种方法返回的参数,很少情况下会出现false。

美中不足的是,这样生成的数字字符串,只在[0-9][a-z]之间,不够广泛。我们尝试加固这个生成方法,增强其鲁棒性。

上述函数会生成一个区间位于 [$min, $max] 的随机数字。然后调用该函数生成指定长度的字符串。

函数 crypto_rand_secure 函数的实现方法,在PHP标准函数中,可以使用 rand / mt_rand 函数替代。

在PHP 7 中,系统提供了更好的函数,可以替代 crypto_rand_secure 使用,就是 random_bytes 和 random_int。使用内置函数,我们将 getToken 函数改造如下:

当然少不了的测试结果,我们批量生成一些 32 位长度的字符串。

写在最后

本文深入探讨了生成随机数字,进而生成指定长度的字符串,实现函数并进行了测试。大家可以在机器环境进行测试。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

php数组的索引格式?

php数组的索引格式数组可分为三种类型:

1、索引数组,一般表示数组元素在数组中的位置,它由数字组成,下标从 0 开始,数字索引数组默认索引值就是从数字 0 开始的,不需要特别指定,PHP 会自动为索引数组的键名赋一个整数值,然后从这个值开始自动增量,当然,也可以指定从某个位置开始保存数据。

2、关联数组,其下标(键名)由数值和字符串混合的形式组成;

3、多维数组,包含一个或多个数组的数组。

PHP语言怎么把JSON字符串转为对象?

json_decode

PHP JSON_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。

语法

mixed json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])

参数

json_string: 待解码的 JSON 字符串,必须是 UTF-8 编码数据

assoc: 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象。

depth: 整数类型的参数,它指定递归深度

options: 二进制掩码,目前只支持 JSON_BIGINT_AS_STRING 。

php如何获取客户端信息?

代码入下,只做参考

class userPCInfo{

//获取客户端浏览器

public static function get_client_browser(){

$sys = $_SERVER['HTTP_USER_AGENT']; //获取用户代理字符串

if (stripos($sys, "Firefox/") > 0) {

preg_match("/Firefox\/([^;)]+)+/i", $sys, $b);

$exp[0] = "Firefox";

$exp[1] = $b[1]; //获取火狐浏览器的版本号

} elseif (stripos($sys, "Maxthon") > 0) {

preg_match("/Maxthon\/([\d\.]+)/", $sys, $aoyou);

$exp[0] = "傲游";

$exp[1] = $aoyou[1];

} elseif (stripos($sys, "MSIE") > 0) {

preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);

$exp[0] = "IE";

$exp[1] = $ie[1]; //获取IE的版本号

} elseif (stripos($sys, "OPR") > 0) {

preg_match("/OPR\/([\d\.]+)/", $sys, $opera);

$exp[0] = "Opera";

$exp[1] = $opera[1];

} elseif(stripos($sys, "Edge") > 0) {

//win10 Edge浏览器 添加了chrome内核标记 在判断Chrome之前匹配

preg_match("/Edge\/([\d\.]+)/", $sys, $Edge);

$exp[0] = "Edge";

$exp[1] = $Edge[1];

} elseif (stripos($sys, "Chrome") > 0) {

preg_match("/Chrome\/([\d\.]+)/", $sys, $google);

$exp[0] = "Chrome";

$exp[1] = $google[1]; //获取google chrome的版本号

} elseif(stripos($sys,'rv:')>0 && stripos($sys,'Gecko')>0){

preg_match("/rv:([\d\.]+)/", $sys, $IE);

$exp[0] = "IE";

$exp[1] = $IE[1];

}else {

$exp[0] = "未知浏览器";

$exp[1] = "";

}

return $exp;

}

//获取客户端操作系统

public static function get_client_os(){

$agent = $_SERVER['HTTP_USER_AGENT'];

$os = false;

if (preg_match('/win/i', $agent) && strpos($agent, '95')){

$os = 'Windows 95';

}else if (preg_match('/win 9x/i', $agent) && strpos($agent, '4.90')){

$os = 'Windows ME';

}else if (preg_match('/win/i', $agent) && preg_match('/98/i', $agent)){

$os = 'Windows 98';

}else if (preg_match('/win/i', $agent) && preg_match('/nt 6.0/i', $agent)){

$os = 'Windows Vista';

}else if (preg_match('/win/i', $agent) && preg_match('/nt 6.1/i', $agent)){

$os = 'Windows 7';

}else if (preg_match('/win/i', $agent) && preg_match('/nt 6.2/i', $agent)){

$os = 'Windows 8';

}else if(preg_match('/win/i', $agent) && preg_match('/nt 10.0/i', $agent)){

$os = 'Windows 10';#添加win10判断

}else if (preg_match('/win/i', $agent) && preg_match('/nt 5.1/i', $agent)){

$os = 'Windows XP';

}else if (preg_match('/win/i', $agent) && preg_match('/nt 5/i', $agent)){

$os = 'Windows 2000';

}else if (preg_match('/win/i', $agent) && preg_match('/nt/i', $agent)){

$os = 'Windows NT';

}else if (preg_match('/win/i', $agent) && preg_match('/32/i', $agent)){

$os = 'Windows 32';

}else if (preg_match('/linux/i', $agent)){

$os = 'Linux';

}else if (preg_match('/unix/i', $agent)){

$os = 'Unix';

}else if (preg_match('/sun/i', $agent) && preg_match('/os/i', $agent)){

$os = 'SunOS';

}else if (preg_match('/ibm/i', $agent) && preg_match('/os/i', $agent)){

$os = 'IBM OS/2';

}else if (preg_match('/Mac/i', $agent) && preg_match('/PC/i', $agent)){

$os = 'Macintosh';

}else if (preg_match('/PowerPC/i', $agent)){

$os = 'PowerPC';

}else if (preg_match('/AIX/i', $agent)){

$os = 'AIX';

}else if (preg_match('/HPUX/i', $agent)){

$os = 'HPUX';

}else if (preg_match('/NetBSD/i', $agent)){

$os = 'NetBSD';

}else if (preg_match('/BSD/i', $agent)){

$os = 'BSD';

}else if (preg_match('/OSF1/i', $agent)){

$os = 'OSF1';

}else if (preg_match('/IRIX/i', $agent)){

$os = 'IRIX';

}else if (preg_match('/FreeBSD/i', $agent)){

$os = 'FreeBSD';

}else if (preg_match('/teleport/i', $agent)){

$os = 'teleport';

}else if (preg_match('/flashget/i', $agent)){

$os = 'flashget';

}else if (preg_match('/webzip/i', $agent)){

$os = 'webzip';

}else if (preg_match('/offline/i', $agent)){

$os = 'offline';

}else{

$os = '未知操作系统';

}

return $os;

}

//获取ip地址

public static function get_ip() {

//判断服务器是否允许$_SERVER

if (isset($_SERVER)) {

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {

$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];

} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {

$realip = $_SERVER['HTTP_CLIENT_IP'];

} else {

$realip = $_SERVER['REMOTE_ADDR'];

}

} else {

//不允许就使用getenv获取

if (getenv("HTTP_X_FORWARDED_FOR")) {

$realip = getenv("HTTP_X_FORWARDED_FOR");

} elseif (getenv("HTTP_CLIENT_IP")) {

$realip = getenv("HTTP_CLIENT_IP");

} else {

$realip = getenv("REMOTE_ADDR");

}

}

return $realip;

}

//获取当前ip所在城市

public static function GetIpLookup($ip = ''){

if(empty($ip)){

return '请输入IP地址';

}

$test= 'http://ip.taobao.com/service/getIpInfo.php?ip='.$ip;

$res = @file_get_contents($test);

return $res;

}

}

php获取日期中的年份?

如果是获取当前日期的年份,可以用date('Y');如果是获取字符串当中的年份,就用字符串截取。

本文转载自互联网,如有侵权,联系删除