PHP生成随机字符串程序代码

 更新时间:2016年11月25日 17:28  点击:1777
因为工具需我们需要写一个可以随机字符串生成了函数,这个我在想网上应该很多这类生成随机字符串函数,百度了一下一大堆下面我来给各位总结这些不错的php函数。

利用for循环把我们定义好的字符遍历即可

 代码如下 复制代码


<?php
/* Generate Password
* Length : 8
*/
$str = “0123456789abcdefghijklmnopqrstuvwxyz”;   //   输出字符集
$n = 8;   //   输出串长度
$len = strlen($str)-1;
for($i=0 ; $i<$n; $i++){
$s .=  $str[rand(0,$len)];
}
echo $s . “<br/>”;
?>


可以生成指定长度的纯数字字符串、字符字符串等等。
(大写、小写、大小写及大小写与数字的组合,还可以根据喜好进行扩充)。

下面的$length=5,如果你改成10就是10位。
把$str = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' 改成$str = '0123456789' 就是纯数字字符串。

 代码如下 复制代码

<?php
function getRandStr($length) { 
$str = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randString = '';
$len = strlen($str)-1;
for($i = 0;$i < $length;$i ++){
$num = mt_rand(0, $len);
$randString .= $str[$num];
}
return $randString ; 
}

//使用方法如下
$test=getRandStr($length=5);
echo $test;
?>

或使用while

 代码如下 复制代码

<?php
 /**
  */
 function createRandomStr($length){
  $str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';//62个字符
  $strlen = 62;
  while($length > $strlen){
   $str .= $str;
   $strlen += 62;
  }
  $str = str_shuffle($str);
  return substr($str,0,$length);
 }
echo createRandomStr(10);

?>

利用数组和字符转换的思想:

 代码如下 复制代码

<?php
 /**
  *@blog <www.111cn.net>
  */
 function createRandomStr($length){
  $str = array_merge(range(0,9),range('a','z'),range('A','Z'));
  shuffle($str);
  $str = implode('',array_slice($str,0,$length));
  return $str;
 }
 echo createRandomStr(10);
?>

在php中JSON数据处理最常用的就是直接使用json_encode()与json_decode()函数进行处理,他下我就这两个json处理函数给各位同学详细介绍json在应用中的各种用法,希望对大家所有帮助。

json_encode() ,PHP数据->JSON

json_encode只有一个参数,参数除了resource 类型之外,可以为任何数据类型。但是我们一般是传入数组,如下例子

 代码如下 复制代码

$arr = array(
    "name" => "manson",
    "age" => 23,
    "sex" => 1
);
 
$json_str = json_encode($arr);
var_dump($json_str);

得出的是json字符串


{"name":"manson","age":23,"sex":1}

这时一般是把转换后的字符串输出到前端处理,常用于ajax做数据交互,或者一些前端模板的数据输出。json_encode需要注意的一个问题就是中文的编码问题,假如PHP页面的编码是非utf-8的,在json_encode之前,必须把有中文内容的部分转换成utf-8编码,否则输出到前端的时候会乱码。解决的方法网上有很多,这里举一个简单的编码转换例子

 

 代码如下 复制代码
$arr = array(
    "name" => "张三",
    "age" => 23,
    "sex" => 1
);
 
$arr['name'] = iconv("gbk","utf-8",$arr['name']);
 
$json_str = json_encode($arr);

PHP数据

json_decode有两个参数,第一个参数是待解码的json字符串,传入的一定要是一个合符规范的json格式,其实json_decode就是json_encode的逆过程

 代码如下 复制代码

$json_str = '{"name":"manson","age":23,"sex":1}';
 
$arr = json_decode($json_str,true);
var_dump($arr);


这里需要注意的是,json_decode的第2个参数传的是true,意思是解码后返回数组格式,假如传false或是不传第2个参数,解码后将返回对象格式,例如上面的代码返回对象格式是

 

 代码如下 复制代码
object(stdClass)#1 (3) {
  ["name"]=>
  string(6) "manson"
  ["age"]=>
  int(23)
  ["sex"]=>
  int(1)
}

对象格式相对于数组格式来说,取得对应数据的难度会增大,特别对于多层级数据结构,还是转换成数组形式为好,也就是json_decode第2个参数记得传true。

处理提交的JSON数据

POST方式(GET方式也要注意)向PHP提交了一个JSON数据,比如:

 代码如下 复制代码

{"a":1,"b":2}

在PHP中取出这个数据:

 代码如下 复制代码

$s=$_POST['data'] ;//or $_GET['data']

然后这个串取出后是被转义的:

 代码如下 复制代码

 {"a":1,"b":2}

如果直接调用:

 代码如下 复制代码

$obj = json_decode($s); 

print_r($obj); 
echo $obj->a;

 

 是错误的,会报告错误.

如果$s直接定义:

 代码如下 复制代码

$s='{"a":1,"b":2}';

则没有问题.

所以在PHP中处理JSON时需要进行一下转义处理:

 代码如下 复制代码

$s=stripslashes($_POST['data']) ;

这样再进行json解码就可以了.

PHP 获取接口内容


假设接口文件页面为:/api.php?action=open_getBlogList&only_recommend=1&limit=5 ,那么我们可以使用下面语句获取这个接口文件内容:

 代码如下 复制代码
$handle = fopen("/api.php?action=open_getBlogList&only_recommend=1&limit=5","rb");
$content = "";
while (!feof($handle)) {
    $content .= fread($handle, 10000);
}
fclose($handle);

这样 content 保存的就是 JSON api 内容。

PHP 解析 JSON 并显示
原始的内容是无法直接调用的,必须被 PHP 进行进一步处理,才能被调用显示在网页中。在 PHP 5.2 及后续版本中,使用 json_decode() 函数来解析 JSON 数据,将其转换成 PHP 可以调用的数据格式。例如:

 代码如下 复制代码
$content = json_decode($content);

解析之后呢,我们就可以按照 PHP 中调用数组数据的方法一样的调用 JSON 中的数据。这个调用方法需要按照具体的 JSON 数据格式来写,演示请看下面。关于 json_decode 函数的使用,具体看 PHP 手册,这里不再赘述:http://php.net/manual/en/function.json-decode.php

实战 api


细心的朋友会发现 潜行者m 博客的边栏最下面多了一个“友文推荐”模块,里面推荐了一些琼台博客的文章。

友文推荐是琼台博客倡议的一种博客之间交流方式,比传统的友情链接更有效,同时实现了博客内容互补。由于琼台博客的博客程序是他自己本人编写的,所以他提供了 JSON api 接口,可以获取到最新的可推荐的文章。

本人使用 PHP 获取这个 JSON 接口,然后输出到自己博客的边栏中,下面来实战操作一下。

第一步,查看 api 调用方式


根据文档,我使用了 /api.php?action=open_getBlogList&only_recommend=1&limit=5 这样的参数,意思就是调用五条他推荐的文章。

第二步,获取 api 结构数据
很简单,上面说过了,具体代码如下:

 代码如下 复制代码
$handle = fopen("/api.php?action=open_getBlogList&only_recommend=1&limit=5","rb");
$content = "";
while (!feof($handle)) {
    $content .= fread($handle, 10000);
}

fclose($handle);先打开这数据文件,然后把所有内容保存到 content 变量中,因为可以肯定 api 数据不会超过 10000个字符,所以用 10000 作为 fread 函数的第二个参数。这样,api 返回的 JSON 数据就保存在了 content 变量中。

第三步,解析并输出内容
使用下面代码解析数据,然后调用输出

 代码如下 复制代码

$content = json_decode($content);
foreach ($content->data as $key) {
    echo '<li><a target="_blank" href="'.$key->b_url.'">'.$key->b_title.'</a></li>';
}

首先对 content 变量中的 JSON  数据处理,然后变成 PHP 可以调用的数据,再使用 foreach 遍历输出这五条内容,按照我需要的 HTML 格式,将内容插入进去即可。

http请求包括两种,一种是我们普通的http请求登录,另一种是另一种https请求登录,下面我来分别给各位同学详细介绍利用curl_init来实现http与https进行登录。

备注:使用curl_init函数,必须要打开这个php扩展。

1.打开php.ini,开启extension=php_curl.dll
2.检查php.ini的extension_dir值是哪个目录,检查有无php_curl.dll,没有的请下载php_curl.dll,再把php目录中的libeay32.dll,ssleay32.dll拷到c:/windows/system32里面。

发起http请求

 代码如下 复制代码

function _http_curl_post($url,$data)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4);
    curl_setopt($ch, CURLOPT_TIMEOUT,4);
         
    if($data){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "value=".json_encode($data));  //请求参数转为json格式
    }
    curl_setopt($ch, CURLOPT_HEADER, false);
    $string = curl_exec($ch);
    curl_close($ch);
    return $string;
}

调用方法

 代码如下 复制代码

$params = array();
$params['id']       = 1
$params['web_name']   = '好脚本';
$params['web_url']    = 'http://www.111cn.net/';
$params['web_miaoshu']      = '脚本编程示例';
$data = _curl_post($url,$params);
$arr =json_decode($data);

除了http请求之外还有一个https的请求,上次我做人人网的一键登录,它的接口就是https的url,使用上面的函数,最终报错。如果您也遇到这样的问题,你可以参考下面方法解决。

https请求示例

 代码如下 复制代码

function _https_curl_post($url, $vars) 

    foreach($vars as $key=>$value)
    {
        $fields_string .= $key.'='.$value.'&' ;
    } 
    $fields_string = substr($fields_string,0,(strlen($fields_string)-1)) ;
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  // this line makes it work under https
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POST, count($vars) );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);     
    $data = curl_exec($ch);        
    curl_close($ch);  
       
    if ($data)
    {
        return $data;
    }
    else
    {
        return false;
    }
}

利用php获取数组中重复值元素其实与删除数组中重复元素的方法差不多,下面我来举例说明一下如何快速获取数组中重复元素的具体方法。

1.获取一个数组中重复的元素。代码如下:

a.方法一:

 代码如下 复制代码

function array_repeat($arr)
{
   if(!is_array($arr)) return $arr;
     
   $arr1 = array_count_values($arr);
  
   $newArr = array();
  
   foreach($arr1 as $k=>$v)
   {
      if($v>1) array_push($newArr,$k);  
   }
   return $newArr;
}

b.方法二:

 代码如下 复制代码

function array_repeat($arr)
{
   if(!is_array($arr)) return $arr;
     
   $arr1 = array_unique($arr);
     
   $arr3 = array_diff_key($arr,$arr1); 
  
   return array_unique($arr3);
}

测试方法

 代码如下 复制代码

$arr = array('apple','blue','red','banana','pear','apple','blue','color','color');
print_r(array_repeat($arr));

结果: Array ( [5] => apple [6] => blue [8] => color )

后来代一些删除数组重复元素的方法

array_keys函数来删除数组重复元素。
*/

 代码如下 复制代码

$a=array("red", "green", "blue", "yellow");   
count($a); //得到4   
unset($a[1]); //删除第二个元素   
count($a); //得到3   
echo $a[2]; //数组中仅有三个元素,本想得到最后一个元素,但却得到blue,   
echo $a[1]; //无值

//array array_splice (array input, int offset [, int length [, array replacement]])
//array_splice()其实是替换数组元素的函数,但如果不加替换值就简单的删除元素.下面是array_splice()的用法:
$b=array("red", "green", "blue", "yellow");
array_splice($a,1,1);

//下面看一个比较全面的删除重复值并且删除指定的数组元素

 代码如下 复制代码

$array1 = array(1 => "www.111cn.net", 2 => "菠萝", 4 => "www.111cn.net",3 => "香蕉",4 => "芭乐",5 => "www.111cn.net",6 => "www.111cn.net");

$search_keys = array_keys($array1, "www.111cn.net");

foreach($search_keys as $key) {
 unset($array1[$key]);
}

print_r($array1);

/*
得到结果
array ( [2] => 菠萝 [4] => 芭乐 [3] => 香蕉 )
*/

//删除数组中重复元素的函数
function delmember(&$array, $id)
{
$size = count($array);
for($i = 0; $i <$size - $id - 1; $i ++)
{
$array[$id + $i] = $array[$id + $i + 1];
}
unset($array[$size - 1]);
}

我们有时不想利用自己的数据库存储IP地址,自己的IP库更新慢不及时,我们可以直接使用第三方的IP库来操作,这里介绍利用淘宝IP数据获取用户IP及地理位置实现方法。

在直接在ie浏览器中打开下面地址

http://ip.taobao.com/service/getIpInfo.php?ip=8.8.8.8

返回信息

 代码如下 复制代码

{"code":0,"data":{"country":"u7f8eu56fd","country_id":"US","area":"","area_id":"","region":"","region_id":"","city":"","city_id":"","county":"","county_id":"","isp":"","isp_id":"","ip":"8.8.8.8"}}

上面我们是直接在ie地址输入,这里我们利用php file_get_contents函数来获取

 代码如下 复制代码

/**
 * 获取 IP  地理位置
 * 淘宝IP接口
 * @Return: array
 */
function getCity($ip)
{
$url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
$ip=json_decode(file_get_contents($url));
if((string)$ip->code=='1'){
  return false;
  }
  $data = (array)$ip->data;
return $data;
}


上面原因是通过file_get_contents由淘宝网返回的json格式的数据,我们再利用php json_decode函数转换成数组。

$IP地址需要我们提供,下面提供一个获取用户真实IP地址的函数

 代码如下 复制代码


function getIP()
{
    static $realip;
    if (isset($_SERVER)){
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $realip = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $realip = $_SERVER["REMOTE_ADDR"];
        }
    } else {
        if (getenv("HTTP_X_FORWARDED_FOR")){
            $realip = getenv("HTTP_X_FORWARDED_FOR");
        } else if (getenv("HTTP_CLIENT_IP")) {
            $realip = getenv("HTTP_CLIENT_IP");
        } else {
            $realip = getenv("REMOTE_ADDR");
        }
    }
 
 
    return $realip;
}

[!--infotagslink--]

相关文章

  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24