PHP帐号申请程序
magicbug作品.
先说明呀,这不是脚本,这是我写的第一个php程序,整整五小时,总算好了,用得着的就拿去吧.
注意$accufile,$acctfile,$server,$from,$subject,$body等几处要自己改成自己的情况,别的外观什么的,你就自己根据需要自己改吧.通过一个form把accountname,accountemail1,accountemail2传到这个php程序就可.
玩家只要输入帐号名和他的email地址,程序自动判断占用情况,避免空格,emai地址的检验,然后生成六位的随机密码(你改成多少位长都可以,hehe),然后把全部信息发到信箱中去,再把帐号信息写入帐号文件.在其中实现了smtp发送邮件,如果是unix环境,直接用sendmail函数就可以了,但这样适用于各个平台,并且对各个步聚都有比较严格的检测,会有详细的提示信息.
<?
//Program by MagicBug;http://magicbug.k666.com;uohomestead;My first PHP program,hehe.
$htmltop="<HTML>";
$htmltop.="<head>";
$htmltop.="<title>帐号申请</title>";
$htmltop.="<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>";
$htmltop.="<link rel='stylesheet' href='../../style.css' type='text/css'>";
$htmltop.="</head>";
$htmltop.="<body bgcolor='#000000' text='#ff9900' leftmargin='3' topmargin='0' marginwidth='0' marginheight='0'>";
$htmltop.="<table width='459' border='0' cellspacing='0' cellpadding='0'>";
$htmltop.=" <tr>";
$htmltop.=" <td><img src='../../images/logo-2.jpg' width='469' height='61'></td>";
$htmltop.="</tr>";
$htmltop.=" <tr>";
$htmltop.=" <td background='../../images/bian-2.gif' height='18'>";
$htmltop.=" <div align='center'><font size='2' color='ff9900'>帐号申请</font></div>";
$htmltop.=" </tr>";
$htmltop.=" <tr>";
$htmltop.=" <td height='8'>";
$htmltop.=" </font><font size='2' color='#CCCCCC'><div align='center'>";
$htmlbottom= "</div></font>";
$htmlbottom.=" </tr>";
$htmlbottom.=" <tr>";
$htmlbottom.=" <td> ";
$htmlbottom.=" <div align='center'><font color='#999999' size='2'><font color='#FFCC00'><br>";
$htmlbottom.=" 建议使用 800*600、16位色、小字体、IE4.0以上浏览 </font></font><font color='#FFCC00' size='2'><br>";
$htmlbottom.=" 如果有建议或意见请发E-mail:<a href='mailto:nyc@fun.21cn.com'>nyc@fun.21cn.com</a> ";
$htmlbottom.=" <br>";
$htmlbottom.=" 主页:<a href='mailto:tianshizhiru@sina.com'>Janny</a> 版权所有:<a href='http://uodarkkingdom.yeah.net'>HomeStead</a><br>";
$htmlbottom.=" <br>";
$htmlbottom.=" </font></div>";
$htmlbottom.=" </td>";
$htmlbottom.=" </tr>";
$htmlbottom.="</table>";
$htmlbottom.="</BODY>";
$htmlbottom.="</HTML>";
function sendmail($smtpserver,$serverport,$from_address,$to_address,$subject,$message)
{
$fp = fsockopen($smtpserver, $serverport, &$errno, &$errstr, 10);
if(!$fp) {
echo "错误 : 不能连接到smtp服务器 ".$smtpserver.":".$serverport." 请稍候再试!<p>" ;
return 0;
}
$hostreplay=fgets($fp,128);
if (!strstr($hostreplay,"220")) {
echo "错误 : 不能接收到smtp服务器的220回答,请稍候再试!<p>" ;
fclose($fp) ;
return 0;
}
$smailname=strstr(ltrim($hostreplay),"220 ") ;
$smailname=substr($smailname,0,strpos($smailname,".")) ;
fputs($fp,"HELO $smailname \n") ;
$hostreplay=fgets($fp,128) ;
if (!strstr($hostreplay,"250")) {
echo "错误 : 不能接收到smtp服务器的250回答,请稍候再试!<p>" ;
fclose($fp) ;
return 0;
}
fputs($fp,"MAIL FROM: \n") ;
$hostreplay=fgets($fp,128) ;
if (!strstr($hostreplay,"250")) {
fputs($fp,"MAIL FROM: $from_address\r\n") ;
$hostreplay=fgets($fp,128) ;
if (!strstr($hostreplay,"250")) {
echo "错误 : 不能接收到smtp服务器的250回答,请稍候再试!<p>" ;
fclose($fp) ;
return 0;
}
}
fputs($fp,"RCPT TO: $to_address\n") ;
$hostreplay=fgets($fp,128);
if (!strstr($hostreplay,"250")) {
echo "错误 : 不能接收到smtp服务器的334回答,稍候再试!<p>" ;
fclose($fp) ;
return 0;
}
fputs($fp,"DATA\n") ;
$hostreplay=fgets($fp,128) ;
if (!strstr($hostreplay,"354")) {
echo "错误:不能接收到smtp服务器的250回答,请稍候再试!<p>";
fclose($fp) ;
return 0;
}
$tosend="From: $from_address\n";
$tosend.="To: $to_address\n";
$tosend.="subject: $subject\r\n\r\n";
$tosend.="$message\r\n.\r\n";
fputs($fp,$tosend) ;
$hostreplay=fgets($fp,128);
if (!strstr($hostreplay,"250")) {
echo "错误:不能接收到smtp服务器的250回答,请稍候再试!<p>" ;
fclose($fp) ;
return 0;
}
fputs($fp,"QUIT\n") ;
fclose($fp) ;
return 1;
}
function randpassword(){
$mypassword="";
srand((double)microtime()*1000000);
for ($i=1;$i<=6;$i++){
$mypassword.=chr(97+(rand(0,25)));
}
return $mypassword;
}
$accufile="path and filename";
$acctfile="path and filename";
echo $htmltop."<br>";
if (($accountname=="")||($accountemail1=="")||($accountemail2=="")) {
echo "错误 : 请把资料填写完整!<p>";
echo "<a href='account1.htm'>返回重填</a>";
echo $htmlbottom;
exit();
}
if ((strstr($accountname," "))||(strstr($accountemail1," "))||(strstr($accountemail2," "))){
echo "错误 : 资料项中不能含有空格!<p>";
echo "<a href='account1.htm'>返回重填</a>";
echo $htmlbottom;
exit();
}
if (strcmp($accountemail1,$accountemail2)<>0){
echo "错误 : 两个邮箱地址不对应!<p>";
echo "<a href='account1.htm'>返回重填</a>";
echo $htmlbottom;
exit();
}
if (!(eregi("^.+@.+\\..+$",$accountemail1))){
echo "错误 : 邮件地址不合法!<p>";
echo "<a href='account1.htm'>返回重填</a>";
echo $htmlbottom;
exit();
}
$temp=fopen($accufile,"rw");
if (!($temp)) {
echo "错误 : 帐号文件不能打开!<p>";
echo "如果出现这个提示信息,请把情况反映给<a href='mailto:nyc@fun.21cn,com'>nyc@fun.21cn.com</a>".",谢谢.";
echo $htmlbottom;
exit();
}
while (!feof($temp)){
$data=trim(fgets($temp,100));
if (strtoupper($data)==strtoupper("[".$accountname."]")) {
echo "错误 : 此帐号已存在!<p>";
echo "<a href='account1.htm'>返回重填</a>";
echo $htmlbottom;
fclose($temp);
exit();
}
if (strtoupper($data)==strtoupper("EMAIL=".$accountemail1)) {
echo "错误 : 此Email地址已担保其它帐号!<p>";
echo "<a href='account1.htm'>返回重填</a>";
echo $htmlbottom;
fclose($temp);
exit();
}
}
fclose($temp);
$temp=fopen($acctfile,"rw");
if (!($temp)) {
echo "错误 : 帐号文件不能打开!<p>";
echo "如果出现这个提示信息,请把情况反映给<a href='mailto:nyc@fun.21cn,com'>nyc@fun.21cn.com</a>".",谢谢.";
echo $htmlbottom;
exit();
}
while (!feof($temp)){
$data=trim(fgets($temp,100));
if (strtoupper($data)==strtoupper("[".$accountname."]")) {
echo "错误 : 此帐号已存在!<p>";
echo "<a href='account1.htm'>返回重填</a>";
echo $htmlbottom;
fclose($temp);
exit();
}
if (strtoupper($data)==strtoupper("EMAIL=".$accountemail1)) {
echo "错误 : 此Email地址已担保其它帐号!<p>";
echo "<a href='account1.htm'>返回重填</a>";
echo $htmlbottom;
fclose($temp);
exit();
}
}
fclose($temp);
$accountpassword=randpassword();
$server="smtp.163.com";
$port=25;
$from="magicbug@163.com";
$subject="UO家园站帐号申请回复";
$to=$accountemail1;
$body="Hi, Dear ".$accountname.":\r\n";
$body.="感谢你选择了家园站.你申请的帐号已成功,用户名:".$accountname."密码:".$accountpassword.".\r\n";
$body.="请牢记你的用户名和密码,妥善保管.帐号会在24小时内由Admin MagicBug为你开通.\r\n";
$body.="上线后请立即使用命令: .password 新密码,用来设上你自己的密码.因为初始密码是随机的,比较难记.\r\n";
$body.="关于站的建设及一些设定情况请访问家园站的主页:http://magicbug.k666.com.\r\n";
$body.="如果有什么问题或建议请去论坛问题区提交.\r\n";
$body.="我的信箱为nyc@fun.21cn.com.\r\n";
$body.="\r\nAdmin MagicBug\r\n";
$body.="\r\n\r\n\r\n此信为自动回信,请不要回复,谢谢.\r\n";
if (!(sendmail($server,$port,$from,$to,$subject,$body))){
echo "<a href='account1.htm'>返回重填</a>";
echo $htmlbottom;
exit();
}
$temp=fopen($acctfile,"a+");
$accountinfo="[".$accountname."]\r\n"."PASSWORD=".$accountpassword."\r\n"."EMAIL=".$accountemail1."\r\n\r\n";
fputs($temp,$accountinfo);
fclose($temp);
echo "申请成功!有关信息已发送到你的信箱:".$accountemail1.",请注意查收!<p>";
echo "<a href='java script:window.close()'>关闭此窗口</a>";
echo $htmlbottom;
exit();
?>