php的随机字符串函数

随机字符串在Web 开发中用得非常广泛,比如生成用户身份认证令牌等,随机字符串一般是由大小写字母和数字等组成,长度可以自定义。

PHP 原生提供了rand() 和 mt_rand() 函数,可以用来生成伪随机数,但是生成的数值有一定的规律性,不足以被作为随机字符串使用。

为此,PHP 提供了更为强大的函数 random_bytes() 和 random_int(),它们使用真正的随机数生成器,生成的随机数可以更好的保证安全性。

PHP 7 以前的版本没有提供 random_bytes() 函数,需要通过扩展或外部库实现。可以使用 OpenSSL 扩展或 Mcrypt 扩展来生成随机字节串。

使用 OpenSSL 扩展

要使用 OpenSSL 扩展,首先要安装 OpenSSL 库和 PHP 的 OpenSSL 扩展。可以使用以下命令来检查系统是否已经安装了 OpenSSL:

```

openssl version

```

如果返回了 OpenSSL 的版本号,则表示已经安装。否则可以使用以下命令安装:

```

sudo apt-get update

sudo apt-get install openssl libssl-dev

```

可以使用以下命令来检查 PHP 是否已经安装了 OpenSSL 扩展:

```

php -m | grep openssl

```

如果有返回,则表示已经安装。否则需要使用以下命令安装:

```

sudo apt-get update

sudo apt-get install php-openssl

```

具体代码如下:

```php

function random_str($length)

{

$str = '';

if (function_exists('random_bytes')) {

$bytes = random_bytes(ceil($length / 2));

$str = substr(bin2hex($bytes), 0, $length);

} elseif (function_exists('openssl_random_pseudo_bytes')) {

$bytes = openssl_random_pseudo_bytes(ceil($length / 2));

$str = substr(bin2hex($bytes), 0, $length);

} elseif (function_exists('mcrypt_create_iv')) {

$bytes = mcrypt_create_iv(ceil($length / 2), MCRYPT_DEV_URANDOM);

$str = substr(bin2hex($bytes), 0, $length);

} else {

for ($i = 0; $i < $length; $i++) {

$str .= chr(mt_rand(97, 122));

}

}

return $str;

}

echo random_str(16);

```

这个函数首先尝试使用随机字节串生成器 random_bytes() 来生成随机字符串,如果不可用,则尝试使用 OpenSSL 扩展提供的函数 openssl_random_pseudo_bytes() 或 Mcrypt 扩展提供的函数 mcrypt_create_iv() 生成随机字符串,如果这两个扩展也不可用,则使用 mt_rand() 函数生成随机字符串。

使用 random_bytes() 函数生成的随机字符串安全性最高,如果可用则优先使用。

PHP date() 函数可以返回当前日期和时间。该函数的第一个参数是格式字符串,用于指定输出的格式。

格式字符串可以使用各种符号和字符来指定日期和时间的格式,这些符号和字符的含义列举如下:

- d:表示月份中的第几天,带前导零(01-31)

- D:表示星期中的缩写名称(Mon-Sun)

- j:表示月份中的第几天(1-31)

- l:表示星期的完整名称(Monday-Sunday)

- N:表示星期中的数字形式(1-7)

- S:表示月份中的英文后缀(st, nd, rd, th)

- w:表示星期中的数字形式(0-6)

- z:表示年份中的天数(0-365)

- F:表示月份的完整名称(January-December)

- m:表示月份,带前导零(01-12)

- M:表示月份的缩写名称(Jan-Dec)

- n:表示月份(1-12)

- t:表示指定月份的天数(28-31)

- L:表示是否为闰年(1为是,0为否)

- Y:表示四位数的年份(如:2019)

- y:表示两位数的年份(如:19)

- a:表示上午或下午的小写字母形式(am, pm)

- A:表示上午或下午的大写字母形式(AM, PM)

- g:表示小时,12 小时制(1-12)

- G:表示小时,24 小时制(0-23)

- h:表示小时,12 小时制,带前导零(01-12)

- H:表示小时,24 小时制,带前导零(00-23)

- i:表示分钟,带前导零(00-59)

- s:表示秒数,带前导零(00-59)

- O:表示与格林威治标准时间(GMT)的时差(如:+0800)

- P:表示与格林威治标准时间(GMT)的时差,格式为:±HH:MM(如:+08:00)

- T:表示时区的缩写名称(如:CST)

- Z:表示与格林威治标准时间(GMT)的秒差(如:28800)

使用 date() 函数可以输出各种格式的日期和时间。例如:

```php

echo date("Y-m-d H:i:s"); // 输出:2019-11-23 10:50:00

echo date("l"); // 输出:Saturday

echo date("l, F jS, Y"); // 输出:Saturday, November 23rd, 2019

```

当然,还可以使用更为复杂的格式字符串来自定义输出的格式,例如:

```php

echo date('D, j M Y G:i:s T'); // 输出:Sat, 23 Nov 2019 10:50:00 CST

```

PHP 还提供了一些关于日期和时间的处理函数,比如 strtotime() 函数可以将任何字符串转换为 Unix 时间戳,而 time() 函数可以返回当前的 Unix 时间戳。

例如:

```php

echo strtotime("10 September 2000"); // 输出:968064000

echo time(); // 输出:1574483400

```

在需要处理日期和时间的场景中,这些函数能够帮助我们快速地实现效果,并且方便易用。

总之,PHP 提供了丰富的函数和扩展库来处理字符串、日期和时间等常见需求,开发者只需要根据实际情况选择合适的函数即可。在编写代码时,要注意考虑安全性和效率,尽可能选择安全性更高、效率更快的函数。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(26) 打赏

评论列表 共有 1 条评论

让眼泪放纵 2年前 回复TA

自己种下的是葵花,秋天自己将收获一片金黄;如果自己种下的是小树,夏天自己将收获一片绿荫;如果自己种下的是刻苦,来年自己将收获一份成功!

立即
投稿
发表
评论
返回
顶部