PHP网页编程之实例:用PHP完成Ftp用户的在线办理
一下弹出N多页面!很明显,你的留言本并没有做好安全防范,被人用JS代码小小的耍了一下,我很同情你这个时候的感受,但是没有别的办法了,继续努力吧! 向导要我筹划一个网页设计大赛和Flash创作大赛,请求必需完成在线报名和上传作品。经由过程FreeBSD+Apache+PHP+Mysql+FTP我完成了该请求。完成在线报名和上传作品的思绪是使用网页表单搜集用户填写的材料存储到Mysql数据库内,同时以该用户的注册名创立一个FTP上传账号并创立该用户的响应目次。
FTP办事器是体系默许带的,采取体系用户的用户名和暗码,创立体系用户就等于创立FTP用户,FreeBSD是属于UNIX阵营的操作体系,它没有象Linux一样的useradd和groupadd等创立用户和组的号令,其取而代之的是pw号令加上响应参数来完成,在Freebsd上以办理员的身份创立一个用户的号令是
echo | pw useradd [-g] [-s][-h 0]
参数g指定用户组,参数s指定用户的shell。
假如是通俗用户上岸的话还必需用到su号令,挪用的办法是
su root Cc ‘echo | pw useradd [-g] [-s][-h 0] ’
履行以后体系会请求输出办理员暗码,输出暗码就能够以办理员的身份履行这个号令了。
完成这步操作的次要难点在于若何经由过程PHP来挪用下面这些体系号令去创立一个用户,本例是利用PHP中的popen()函数来完成的,该函数履行指令翻开文件,语法是int popen(string command, string mode),其翻开的文件只能是单向的,只能读或只能写,对应的“string mode”为’r’或’w’,“string command” 就是号令字符串,在对文件的操作上可以使用 fgets()、fgetss()与fputs()函数,本例用fputs()函数往文件外面输出办理员暗码。若是开档产生毛病将前往 false 值,最初函数要记得挪用pclose()封闭。
上面咱们来计划一下FTP用户的组,事前咱们先用pw groupadd ftpuser创立ftpuse组,让在线请求的用户为这个组的成员。为了平安起见,咱们不该该给FTP用户Telnet权限,所以咱们还要专门给他们创立一个shell,使得他们不克不及经由过程Telnet正常上岸体系,办法以下:先创立一个文件/bin/ftponly
#!/bin/csh
/bin/cat << XX
You can ony use this username to login ftp server!
And you can not use it to telnet to this system! XX
sleep 10
该文件中XX之间就是显示给用telnet上岸的用户看的信息。信息显示10秒钟就主动加入了。最初不要健忘用chmod +x /bin/ftponly给这个文件可履行属性。
然后在/bin/shell文件中添加“/bin/ftponly”,在今后的号令外面咱们就能够使用pw中-s参数把这个shell指定给FTP用户了。
最初还要注重一个成绩,su号令仅仅是wheel办理组的用户成员才可使用,当PHP挪用su号令的时分也必需以wheel构成员的身份运转,不然体系回绝运转,而PHP运转体系号令的身份就是Apache web办事器运转的身份,初始的用户名和用户组都是nobody,所以先得创立一个wheel组的用户www供apache利用,接着更改Apache的设置装备摆设文件httpd.conf中的user为www,group为wheel,从头启动Apache,就能够以新用户身份运转了。
上面可以创立PHP源文件checkin.php了,代码以下:
<?if (($username!="") and ($userpasswd!=""))//判别是不是有表单提交了信息
{ $rootpasswd="adminpassword"; //界说办理员暗码
$creatuser="su --login root -c 'echo ".$userpasswd." | pw useradd ".$username." -s /bin/ftponly -g ftpuser Cs /bin/ftponly -h 0' "; //这是使用su和pw号令创立用户的用到的字符串
$fp=popen($creatuser,"w"); //挪用popen()函数履行字符串中的号令,前往词句柄给$fp
fputs($fp,$rootpasswd); //写入办理员暗码到文件$fp,相当于输出暗码给体系
pclose($fp);//封闭文件
$creatdir="su --login root -c 'mkdir /home/".$username."'";//创立用户目次的号令字符串
$fp=popen($creatdir,"w");//履行号令创立用户目次
fputs($fp,$rootpasswd); //输出办理员暗码
pclose($fp);
$creatdir="su --login root -c 'mkdir /home/".$username."/public_html'";
$fp=popen($creatdir,"w"); //履行号令创立用户网站根目次
fputs($fp,$rootpasswd); //输出办理员暗码
pclose($fp);
$creatdir="su --login root -c 'chown ".$username." /home/".$username."'"; //改动用户目次的一切者为用户本人,初始为运转Apache的用户www。
$fp=popen($creatdir,"w"); //履行号令
fputs($fp,$rootpasswd); //输出办理员暗码
pclose($fp);
$creatdir="su --login root -c 'chown ".$username." /home/".$username."/public_html'"; //改动网站根目次的归属
$fp=popen($creatdir,"w");
fputs($fp,$rootpasswd);
pclose($fp);
echo "祝贺".$username.",您的的FTP账号已请求胜利!请到FTP上上岸,请注重,您没有Telnet权限";}
else{?>
<html>
<head>
<title>请求FTP账号</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<p>请求FTP账号</p>
<form method=POST action="<? echo $PHP_SELF; ?>">
<table width="36%" border="0">
<tr>
<td width="40%">
<div align="right">账号称号:</div>
</td>
<td width="60%">
<input type="text" name="username">
</td>
</tr>
<tr>
<td width="40%">
<div align="right">暗码:</div>
</td>
<td width="60%">
<input type="password" name="userpasswd">
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="请求"></td>
</tr>
</table>
</form>
</div><?}?>
</body>
</html>
也得学会了PHP。然后再学,见异思迁是最不可取的,狗熊掰玉米就是这个道理,如果经常中途放弃,只能是一无所获,还浪费了N多的时间和经历,得不偿失,最重要的是,你会被别人瞧不起。 ,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。 ,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。 做为1门年轻的语言,php一直很努力。 实践是检验自己会不会的真理。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 写的比较杂,因为我也是个新手,不当至于大家多多指正。 本文当是我的笔记啦,遇到的问题随时填充 本文当是我的笔记啦,遇到的问题随时填充 做为1门年轻的语言,php一直很努力。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
页:
[1]
2