如何使用PHP在服务器中动态生成无规则的用户名与密码?

teacherli 2004-04-19 09:45:23
这里主要包括两个问题:
1.如何才能够就像在本地用C++、DELPHI生成在ACCESS、SQLSEVER无规则的用户名与密码?在网络中存在的问题是你不可以使用循环的方式插入自动生成的数据,例如:
for($i=0; $i<100; $i++)
{
$UserID = "guest" . $i;
$Passwd = "$" . "pwd";
mysql_query("insert into tbName(iUserID, cPasswd) values('$UserID', '$')");
}
这样的插入方式在DELHPI+ACCESS中可以做,但是使用PHP+MYSQL在网络上进行生成用户库却不行,高手们,怎么才行?不瞒大家,我现在用的方法是先在本地生成,然后导入到服务器中:(

2. 大家认为在mysql中表中的字段使用下划线(_)来分隔单词呢还是使用大小写区分的比较好呢?我个人的习惯是使用下划线,其它高手们是如何做的呢?而且还有一个小的问题,mysql4.0不支持表名的大小写(windows2000环境中),那表名怎么定义呢?希望各位高手们指点一二,最好能写成一部规范,以供大家参考参考??:)

对了,如果哪位高手制定成一部合理的规范,送上100大分,供大家升级用!!可能的话还会多找几个想要这个规范的人每人送上一份厚礼:)
...全文
228 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
hackfan 2004-04-21
  • 打赏
  • 举报
回复
我对分要求不高,我只希望能够用自己的知识,去解决实际中产生的问题。在这个过程中,我们都在提高。
unixdotnet 2004-04-20
  • 打赏
  • 举报
回复
分太少了,这样吧,我把用到的api都列出来可以吗?我暂时没有资格批评别人,算是一种交流吧。
teacherli 2004-04-20
  • 打赏
  • 举报
回复
我这里说明一下我的情况:

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. 这个贴子就算完成了使命,结了吧!
teacherli 2004-04-20
  • 打赏
  • 举报
回复
30秒本机插入10条记录时间够不够?够吧,我执行过的,不行,不朝数据库里写数据,这也正是网络编程与传统编程的不同之处,我好像在一本讲java的书上看到过,网络编程中大量插入数据记录不可以用循环,而用什么方法正是我想要问的!
上面的兄弟你写过这样的代码码?能用吗?
unixdotnet 2004-04-20
  • 打赏
  • 举报
回复
才十万条记录,不多。

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的时间值大一些就行了
teacherli 2004-04-20
  • 打赏
  • 举报
回复
不好意思,可能是我的标题写的不准确,我想要说的意思是:
生成一个用户名与密码的做法很好,我谢过了,
=============================
但是如何在服务器端生成10000个这样的用户名并把10000个记录存放到mysql数据库呢?现在问题出在如何把这10000条记录插入到数据库中,哪一位做过?
这么吧,我把使用环境也跟大家说说吧,看看有没有更好的解决办法:
现在要在网站中生成100000个用户名与密码,做为网站的会员,我们要把这100000个用户名与密码送出去(当然是付在其它的产品中),那么要在服务器上生成这些账号与密码,怎么办?
使用两位的方法可以生成一个账号与密码,怎么才能插入到数据库中就是个问题,使用"for" "hile"是不行的,正如我问题中写到的那样,怎么做?
unixdotnet 2004-04-20
  • 打赏
  • 举报
回复
使用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;
}
hackfan 2004-04-20
  • 打赏
  • 举报
回复
Sorry,上面的"接分"写错地方了 ....
hackfan 2004-04-20
  • 打赏
  • 举报
回复
接分
unixdotnet 2004-04-20
  • 打赏
  • 举报
回复
由于楼主只是执行一次用户生成的程序(以后不用),那时间长短根本没分别,用简单的php配合普通算法就行了,想追求速度必然付出代价,代价就是自己用c写一个小程序,如果楼主愿意给500分,我马上写。
hackfan 2004-04-20
  • 打赏
  • 举报
回复
不过本地的话,使用多线程(或者干脆多进程)更好
hackfan 2004-04-20
  • 打赏
  • 举报
回复
当然是本地快,我就不理解,为什么非要通过PHP进行会员的增加
unixdotnet 2004-04-20
  • 打赏
  • 举报
回复
实际生成所需时间有减少吗?想快,行,login到服务器,用c配合mysql c api,写个小程序完成,在本地运行,看谁快。
hackfan 2004-04-20
  • 打赏
  • 举报
回复
unixdotnet() ,他的意思是一条一条的加,10万条太慢
那我们就10万条同时增加,这就需要用到“多线程”,使用for就不行了

我以上的代码已经完成了这些工作,

如果你们希望和我交流:

QQ: 106814
QQ群:3463211
hackfan 2004-04-20
  • 打赏
  • 举报
回复
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个进程,每个进程执行若干个用户的省城工作。客户端只是触发进程的产生,而执行的过程都在服务器上面,所以客户端的速度很快,而服务器承担了大多数任务。
unixdotnet 2004-04-20
  • 打赏
  • 举报
回复
真搞笑,不循环怎么生成10万数据,每天生成一条啊?应该是我问你你试过没有才对。
hackfan 2004-04-20
  • 打赏
  • 举报
回复
我已经把代码写出来了,利用了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']);
}


?>
hackfan 2004-04-20
  • 打赏
  • 举报
回复
多线程
xuzuning 2004-04-20
  • 打赏
  • 举报
回复
如果你没有弄错的话,你的代码是可以插入的
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在网络上进行生成用户库却不行”的理由是什么?

「已注销」 2004-04-20
  • 打赏
  • 举报
回复
并且,插入100000条时,30s后提示超时。但已经写入38xxx条记录了阿。
怎么说不能用循环呢?好像没有那么多问题啊。。。。。(别见笑,我新手)
加载更多回复(4)

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧