如何使用PHP在服务器中动态生成无规则的用户名与密码? $tmp = md5(md5(micrototime()));$UserID = substr($tmp,1,6);$Passwd = substr($tmp,7,10); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最重要的是第一个问题!谢谢hahawen(变态的大龄青年) ( ) !!!怎么才能完成10000个这样的用户名与密码 使用get_unique_user_password_array就可以了, $array_size是数量。字段名一般是用下划线的c方式,如果公司规范是用java的大小写区分就按照公司的。function get_unique_user_password_array( $array_size ){ static $code_array = array(); $count_size = 1.5 * $array_size; for( $count = 0; $count < $count_size; $count++ ) { $code_array[] = get_user_password(); } $code_array = array_unique( $code_array ); if ( count( $code_array ) >= $array_size ) { return array_slice( $code_array, 0, $array_size ); } else { return false; }}function get_user_password(){ $tmp = md5(md5(micrototime())); $arr['UserID'] = substr($tmp,1,6); $arr['Passwd'] = substr($tmp,7,10); return $arr;} 不好意思,可能是我的标题写的不准确,我想要说的意思是: 生成一个用户名与密码的做法很好,我谢过了,============================= 但是如何在服务器端生成10000个这样的用户名并把10000个记录存放到mysql数据库呢?现在问题出在如何把这10000条记录插入到数据库中,哪一位做过? 这么吧,我把使用环境也跟大家说说吧,看看有没有更好的解决办法: 现在要在网站中生成100000个用户名与密码,做为网站的会员,我们要把这100000个用户名与密码送出去(当然是付在其它的产品中),那么要在服务器上生成这些账号与密码,怎么办?使用两位的方法可以生成一个账号与密码,怎么才能插入到数据库中就是个问题,使用"for" "hile"是不行的,正如我问题中写到的那样,怎么做? 才十万条记录,不多。for($i=0; $i<100; $i++) $UserID = "guest" . $i; $Passwd = "$" . "pwd"; mysql_unbuffered_query("insert into tbName(iUserID, cPasswd) values('$UserID', '$')");}用mysql_unbuffered_query,设置set_time_limit的时间值大一些就行了 30秒本机插入10条记录时间够不够?够吧,我执行过的,不行,不朝数据库里写数据,这也正是网络编程与传统编程的不同之处,我好像在一本讲java的书上看到过,网络编程中大量插入数据记录不可以用循环,而用什么方法正是我想要问的! 上面的兄弟你写过这样的代码码?能用吗? 我试了下,在本地执行:插入数据为10000条。时间嘛,5s左右。嘿嘿<?define(DB_USER,'root');define(DB_PSSW,'');define(DB_HOST,'localhost');define(DB_NAME,'test');define(USER_TABLE,'users');$DB_CONN = mysql_pconnect(DB_HOST,DB_USER,DB_PSSW) or die("无法连接数据库");mysql_select_db(DB_NAME,$DB_CONN) or die("数据库不存在");/**/$num = 10000;for($i=0;$i<$num;$i++){ $tmp = md5(microtime()); $username = substr($tmp,1,6); $password = substr($tmp,7,6); $query = "INSERT INTO users SET username = '$username', password = '$password' "; mysql_query($query);}/**///$query = "DELETE FROM users";//mysql_query($query);mysql_close();?> 并且,插入100000条时,30s后提示超时。但已经写入38xxx条记录了阿。怎么说不能用循环呢?好像没有那么多问题啊。。(别见笑,我新手) 如果你没有弄错的话,你的代码是可以插入的for($i=0; $i<100; $i++) { $UserID = "guest" . $i; $Passwd = "$" . "pwd"; mysql_query("insert into tbName(iUserID, cPasswd) values('$UserID', '$')"); }不过请解释一下:1、$UserID 是 guest0、guest1、guest2... 这样的吗?2、$Passwd 的样式是什么?3、mysql_query("insert into tbName(iUserID, cPasswd) values('$UserID', '$')");中'$'的含义是什么?说“PHP+MYSQL在网络上进行生成用户库却不行”的理由是什么? 我已经把代码写出来了,利用了PHP的"多线程"缺点就是需要占用大量服务器资源<?//// 这里添加连接SQL服务器的语句//// void memberadd(int $start,int $numbers)// 生成从第$start开始的$numbers个会员// 如:memberadd(1,10)// 就生成:guest1 guest2 ... guest10 总共10各会员function memberadd($start,$numbers){ $SQL="insert into tbName(iUserID, cPasswd) values "; for($i=$start;$i<=$start+$numbers-1;$i++){ $UserID="guest".$i; $Pass=substr(md5($UserID),2,8); //8位"随机"密码 $SQL .= "('$UserID', '$Pass'),"; } $SQL=substr($SQL, 0, -1); // 去掉最后的, $SQL.=";";// $fp = fopen('SQL.TXT', "a");// fputs($fp,$SQL);// fclose($fp);//这里进行SQL的执行, $SQL为执行的SQL语句}function runThread($start,$numbers) //多线程函数定义{ $fp = fsockopen('localhost', 80, $errno, $errmsg); fputs($fp, "GET /add.php?act=add&start=$start&numbers=$numbers\r\n\r\n"); //这里的第二个参数是HTTP协议中规定的请求头 fclose($fp); } if(!isset($_GET['act'])) $_GET['act'] = 'thread';if($_GET['act'] == 'thread') { $n=10; for($i=1;$i<=1000000;$i=$i+$n){ runThread($i,$n); $k=$i+$n-1; echo "第 $i 到第 $k 个会员生成<br>"; flush(); }} else if($_GET['act'] == 'add'){ memberadd($_GET['start'],$_GET['numbers']);} ?> 1.对程序进行修改: $n=10; for($i=1;$i<=1000000;$i=$i+$n){ runThread($i,$n); $k=$i+$n-1; echo "第 $i 到第 $k 个会员生成<br>"; flush(); }其中$n为每个线程增加的会员数量,一般设定在允许范围内,比如10$i<=1000000其中1000000就是需要生成会员的数量2.执行http://服务器地质/add.php注意,如果放在其他目录,请更改fputs($fp, "GET /add.php?act=add&start=$start&numbers=$numbers\r\n\r\n"); //这里的第二个参数是HTTP协议中规定的请求头 部分程序语法上面已经通过测试,不知道生成的SQL是否正确,因为我没有使用MySQL进行测试,直接将SQL输出到一个文本中。程序的原理是,通过客户端的程序触发服务器生成n个进程,每个进程执行若干个用户的省城工作。客户端只是触发进程的产生,而执行的过程都在服务器上面,所以客户端的速度很快,而服务器承担了大多数任务。 实际生成所需时间有减少吗?想快,行,login到服务器,用c配合mysql c api,写个小程序完成,在本地运行,看谁快。 当然是本地快,我就不理解,为什么非要通过PHP进行会员的增加 由于楼主只是执行一次用户生成的程序(以后不用),那时间长短根本没分别,用简单的php配合普通算法就行了,想追求速度必然付出代价,代价就是自己用c写一个小程序,如果楼主愿意给500分,我马上写。 Sorry,上面的"接分"写错地方了 .... 我这里说明一下我的情况: 1. 我们现在做的网站使用的是中华企业网的空间,所以说要直接使用PHP生成用户名与密码。 2.标题内容中我写错了,我只不过是做一个示例,具体实现的方法使用cryt(md5(micrototime()))生成一个串后提取前8位做为用户名,中间8位为密码。 3. 正如 hackfan(Hackfan) 兄所说,我所要生成的不仅是100000条,而是300万条,在效率与速度的取舍中怎么办?? 4. 提问的初衷很简单,就是因为受了一本讲java的书的影响,说是在网络编程中不可以使用循环语句生成数据库,因为每一条指令语句在网络中实际到达服务器的顺序不一样,同样往数据库中添加数据时会出现先提交未必能先插入数据库中的问题,所以也就引为经典,以前测试过,不行,只能向数据库中写入1条数据(远程),上午时又测试时可以全部写入(100条)所以说对 unixdotnet()的批评诚恳接受。 其它要说的: 1. unixdotnet()兄想要500分给我写C api,我倒很想看看,不过穷啊!这样吧,把这次分数一半给你,怎么样? 2. 对于: hackfan(Hackfan) 兄,谢谢你的帮助!你的思路使用大长见识:原来PHP也可以使用多线程!这一次呢,分给你15分,下一次把再给你补30分,如何?同时我加入了你的群,望以后多多关照! 3. 对于 yh801216(艾奥利斯) :谢谢你的热心参与,给5分做为奖励! 4. 对于其它高手:给的少了我怕高手们看不上,给的多了我又没分了,所以说嘛,不好意思了,下一次我找个朋友要点分,分别孝敬各位,包括unixdotnet()、hackfan(Hackfan) :) 5. 这个贴子就算完成了使命,结了吧! 分太少了,这样吧,我把用到的api都列出来可以吗?我暂时没有资格批评别人,算是一种交流吧。 为啥我用EditPlus的时候保存会出现.bak php 下拉菜单的二级联动问题 微博里面关注是如何实现的? Drupal学习 问一个很弱的问题,PHP从MYSQL取出的值是什么类型的? 奇怪的问题??? 一个从来没有碰过的运行错误,求教~~ mysql中的datetime格式的值怎么做判断 字符串的问题 怎样判断结果???? session_start()问题 有没有apache的httpd.conf的中文设置说明,我有几个问题
怎么才能完成10000个这样的用户名与密码
{
static $code_array = array(); $count_size = 1.5 * $array_size; for( $count = 0; $count < $count_size; $count++ )
{
$code_array[] = get_user_password();
} $code_array = array_unique( $code_array ); if ( count( $code_array ) >= $array_size )
{
return array_slice( $code_array, 0, $array_size );
}
else
{
return false;
}
}function get_user_password()
{
$tmp = md5(md5(micrototime()));
$arr['UserID'] = substr($tmp,1,6);
$arr['Passwd'] = substr($tmp,7,10);
return $arr;
}
生成一个用户名与密码的做法很好,我谢过了,
=============================
但是如何在服务器端生成10000个这样的用户名并把10000个记录存放到mysql数据库呢?现在问题出在如何把这10000条记录插入到数据库中,哪一位做过?
这么吧,我把使用环境也跟大家说说吧,看看有没有更好的解决办法:
现在要在网站中生成100000个用户名与密码,做为网站的会员,我们要把这100000个用户名与密码送出去(当然是付在其它的产品中),那么要在服务器上生成这些账号与密码,怎么办?
使用两位的方法可以生成一个账号与密码,怎么才能插入到数据库中就是个问题,使用"for" "hile"是不行的,正如我问题中写到的那样,怎么做?
$Passwd = "$" . "pwd";
mysql_unbuffered_query("insert into tbName(iUserID, cPasswd) values('$UserID', '$')");
}用mysql_unbuffered_query,设置set_time_limit的时间值大一些就行了
上面的兄弟你写过这样的代码码?能用吗?
define(DB_PSSW,'');
define(DB_HOST,'localhost');
define(DB_NAME,'test');
define(USER_TABLE,'users');$DB_CONN = mysql_pconnect(DB_HOST,DB_USER,DB_PSSW) or die("无法连接数据库");
mysql_select_db(DB_NAME,$DB_CONN) or die("数据库不存在");
/**/
$num = 10000;
for($i=0;$i<$num;$i++){
$tmp = md5(microtime());
$username = substr($tmp,1,6);
$password = substr($tmp,7,6);
$query = "INSERT INTO users SET username = '$username', password = '$password' ";
mysql_query($query);
}
/**/
//$query = "DELETE FROM users";
//mysql_query($query);
mysql_close();
?>
怎么说不能用循环呢?好像没有那么多问题啊。。(别见笑,我新手)
for($i=0; $i<100; $i++)
{
$UserID = "guest" . $i;
$Passwd = "$" . "pwd";
mysql_query("insert into tbName(iUserID, cPasswd) values('$UserID', '$')");
}
不过请解释一下:
1、$UserID 是 guest0、guest1、guest2... 这样的吗?
2、$Passwd 的样式是什么?
3、mysql_query("insert into tbName(iUserID, cPasswd) values('$UserID', '$')");
中'$'的含义是什么?说“PHP+MYSQL在网络上进行生成用户库却不行”的理由是什么?
//
// 这里添加连接SQL服务器的语句
//// void memberadd(int $start,int $numbers)
// 生成从第$start开始的$numbers个会员
// 如:memberadd(1,10)
// 就生成:guest1 guest2 ... guest10 总共10各会员function memberadd($start,$numbers){
$SQL="insert into tbName(iUserID, cPasswd) values ";
for($i=$start;$i<=$start+$numbers-1;$i++){
$UserID="guest".$i;
$Pass=substr(md5($UserID),2,8); //8位"随机"密码
$SQL .= "('$UserID', '$Pass'),";
}
$SQL=substr($SQL, 0, -1); // 去掉最后的,
$SQL.=";";// $fp = fopen('SQL.TXT', "a");
// fputs($fp,$SQL);
// fclose($fp);//这里进行SQL的执行, $SQL为执行的SQL语句}function runThread($start,$numbers) //多线程函数定义
{
$fp = fsockopen('localhost', 80, $errno, $errmsg); fputs($fp, "GET /add.php?act=add&start=$start&numbers=$numbers\r\n\r\n"); //这里的第二个参数是HTTP协议中规定的请求头 fclose($fp);
} if(!isset($_GET['act'])) $_GET['act'] = 'thread';if($_GET['act'] == 'thread')
{
$n=10; for($i=1;$i<=1000000;$i=$i+$n){
runThread($i,$n);
$k=$i+$n-1;
echo "第 $i 到第 $k 个会员生成<br>";
flush();
}
}
else if($_GET['act'] == 'add'){
memberadd($_GET['start'],$_GET['numbers']);
}
?>
$n=10; for($i=1;$i<=1000000;$i=$i+$n){
runThread($i,$n);
$k=$i+$n-1;
echo "第 $i 到第 $k 个会员生成<br>";
flush();
}其中$n为每个线程增加的会员数量,一般设定在允许范围内,比如10
$i<=1000000其中1000000就是需要生成会员的数量2.执行http://服务器地质/add.php
注意,如果放在其他目录,请更改
fputs($fp, "GET /add.php?act=add&start=$start&numbers=$numbers\r\n\r\n"); //这里的第二个参数是HTTP协议中规定的请求头
部分
程序语法上面已经通过测试,不知道生成的SQL是否正确,因为我没有使用MySQL进行测试,直接将SQL输出到一个文本中。程序的原理是,通过客户端的程序触发服务器生成n个进程,每个进程执行若干个用户的省城工作。客户端只是触发进程的产生,而执行的过程都在服务器上面,所以客户端的速度很快,而服务器承担了大多数任务。
2.标题内容中我写错了,我只不过是做一个示例,具体实现的方法使用
cryt(md5(micrototime()))生成一个串后提取前8位做为用户名,中间8位为密码。 3. 正如 hackfan(Hackfan) 兄所说,我所要生成的不仅是100000条,而是300万条,在效率与速度的取舍中怎么办??
4. 提问的初衷很简单,就是因为受了一本讲java的书的影响,说是在网络编程中不可以使用循环语句生成数据库,因为每一条指令语句在网络中实际到达服务器的顺序不一样,同样往数据库中添加数据时会出现先提交未必能先插入数据库中的问题,所以也就引为经典,以前测试过,不行,只能向数据库中写入1条数据(远程),上午时又测试时可以全部写入(100条)所以说对 unixdotnet()的批评诚恳接受。
其它要说的:
1. unixdotnet()兄想要500分给我写C api,我倒很想看看,不过穷啊!这样吧,把这次分数一半给你,怎么样?
2. 对于: hackfan(Hackfan) 兄,谢谢你的帮助!你的思路使用大长见识:原来PHP也可以使用多线程!这一次呢,分给你15分,下一次把再给你补30分,如何?同时我加入了你的群,望以后多多关照!
3. 对于 yh801216(艾奥利斯) :谢谢你的热心参与,给5分做为奖励!
4. 对于其它高手:给的少了我怕高手们看不上,给的多了我又没分了,所以说嘛,不好意思了,下一次我找个朋友要点分,分别孝敬各位,包括unixdotnet()、hackfan(Hackfan) :)
5. 这个贴子就算完成了使命,结了吧!