📄 5.3.php.htm
字号:
tail: 显示文件最后数行的资料,默认值为十行,可使用减号加数字,修改要显示的行数。<p>
下面为送出及处理留言字符串的程序,程序用到 env.inc 的文件。<p>
<div align=center><table border=1 bgcolor=ffe0e0><tr><td>
<font color="#000000">
<font color="#0000BB"><?php<br></font><font color="#FF8000">// 文件名: post.php<br></font><font color="#007700">require(</font><font color="#DD0000">"env.inc"</font><font color="#007700">);<br>if ((</font><font color="#0000BB">$chatuser</font><font color="#007700">!=</font><font color="#DD0000">""</font><font color="#007700">) and (</font><font color="#0000BB">$chattext</font><font color="#007700">!=</font><font color="#DD0000">""</font><font color="#007700">)) {<br> </font><font color="#0000BB">$chatstr</font><font color="#007700">=</font><font color="#DD0000">"<font color=8080ff>"</font><font color="#007700">.</font><font color="#0000BB">date</font><font color="#007700">(</font><font color="#DD0000">"h:i:s"</font><font color="#007700">).</font><font color="#DD0000">"</font>-<font color=ff8080>"</font><font color="#007700">.</font><font color="#0000BB">$chatuser</font><font color="#007700">.</font><font color="#DD0000">"</font>: "</font><font color="#007700">.</font><font color="#0000BB">$chattext</font><font color="#007700">;<br> </font><font color="#0000BB">$cmdstr</font><font color="#007700">=</font><font color="#DD0000">"echo \""</font><font color="#007700">.</font><font color="#0000BB">$chatstr</font><font color="#007700">.</font><font color="#DD0000">"\" >> "</font><font color="#007700">.</font><font color="#0000BB">$chatfile</font><font color="#007700">;<br> if (!</font><font color="#0000BB">file_exists</font><font color="#007700">(</font><font color="#0000BB">$chatfile</font><font color="#007700">)) </font><font color="#0000BB">passthru</font><font color="#007700">(</font><font color="#DD0000">"touch "</font><font color="#007700">.</font><font color="#0000BB">$chatfile</font><font color="#007700">);<br> </font><font color="#0000BB">passthru</font><font color="#007700">(</font><font color="#0000BB">$cmdstr</font><font color="#007700">);<br>}<br></font><font color="#0000BB">?></font><html><br><body bgcolor=ffffff leftmargin=0 topmargin=0 marginheight=0 marginwidth=0><br><form action=<font color="#0000BB"><? </font><font color="#007700">echo </font><font color="#0000BB">$PHP_SELF</font><font color="#007700">; </font><font color="#0000BB">?></font> method=post><br><table border=0 width=100%><tr><br><td align=right>匿称:</td><br><td><input type=text name=chatuser size=8 value="<font color="#0000BB"><? </font><font color="#007700">echo </font><font color="#0000BB">$chatuser</font><font color="#007700">; </font><font color="#0000BB">?></font>"></td><br><td align=right>发言:</td><br><td><input type=text name=chattext size=30 maxlength=500></td><br><td><div align=right><input type=submit value="送出"></td><br></tr></table><br></form><br></body><br></html><br></font>
</td></tr></table></div><p>
程序先检查是否有输入字符串,若无匿名及发言内容字符串则显示发言的表单 (Form),如果资料则将字符串及当时时间存入文件中 (利用 UNIX 的转向指令)。当然,为了防止错误,先检查是否有文件可存文件,若没有则先 touch 该文件,例中的文件就是 /tmp/abc。<p>
<div align=center><table border=1 bgcolor=ffe0e0><tr><td>
<font color="#000000">
<html><br><meta http-equiv="Refresh" content="5; url=<font color="#0000BB"><? </font><font color="#007700">echo </font><font color="#0000BB">$PHP_SELF</font><font color="#007700">; </font><font color="#0000BB">?></font>"><br><meta content="text/html; charset=gb2312" http-equiv=Content-Type><br><body bgcolor=ffffff leftmargin=0 topmargin=0 marginheight=0 marginwidth=0><br><font color="#0000BB"><?<br></font><font color="#FF8000">// 文件名: list.php<br></font><font color="#007700">require(</font><font color="#DD0000">"env.inc"</font><font color="#007700">);<br><br>if (!</font><font color="#0000BB">file_exists</font><font color="#007700">(</font><font color="#0000BB">$chatfile</font><font color="#007700">)) {<br> echo </font><font color="#DD0000">"尚未开张</body></html>"</font><font color="#007700">;<br> exit;<br>}<br><br></font><font color="#0000BB">$uniqfile</font><font color="#007700">=</font><font color="#0000BB">$tempdir</font><font color="#007700">.</font><font color="#0000BB">uniqid</font><font color="#007700">(</font><font color="#0000BB">rand</font><font color="#007700">());<br></font><font color="#0000BB">$shellcmd</font><font color="#007700">=</font><font color="#DD0000">"/usr/bin/tail -50 "</font><font color="#007700">.</font><font color="#0000BB">$chatfile</font><font color="#007700">. </font><font color="#DD0000">" > "</font><font color="#007700">.</font><font color="#0000BB">$uniqfile</font><font color="#007700">;<br></font><font color="#0000BB">passthru</font><font color="#007700">(</font><font color="#0000BB">$shellcmd</font><font color="#007700">);<br></font><font color="#0000BB">$chatfilearray</font><font color="#007700">=</font><font color="#0000BB">file</font><font color="#007700">(</font><font color="#0000BB">$uniqfile</font><font color="#007700">);<br></font><font color="#0000BB">$j</font><font color="#007700">=</font><font color="#0000BB">count</font><font color="#007700">(</font><font color="#0000BB">$chatfilearray</font><font color="#007700">);<br>for (</font><font color="#0000BB">$i</font><font color="#007700">=</font><font color="#0000BB">1</font><font color="#007700">; </font><font color="#0000BB">$i</font><font color="#007700"><=</font><font color="#0000BB">$j</font><font color="#007700">; </font><font color="#0000BB">$i</font><font color="#007700">++) {<br> echo </font><font color="#0000BB">$chatfilearray</font><font color="#007700">[</font><font color="#0000BB">$j</font><font color="#007700">-</font><font color="#0000BB">$i</font><font color="#007700">].</font><font color="#DD0000">"<br>\n"</font><font color="#007700">;<br>}<br></font><font color="#0000BB">unlink</font><font color="#007700">(</font><font color="#0000BB">$uniqfile</font><font color="#007700">);<br></font><font color="#0000BB">?><br></font></body><br></html><br></font>
</td></tr></table></div><p>
上面的程序就是使用 Client Pull 的技术,每五秒就重新更新一次。同样地,它也 require 共用的 env.inc 文件,要改变其中的变量时,马上就可以让所有的程序用到,这对开发网站来说,是蛮重要的方法,可以将网页程序中都会出现的地方。例如 Copyright (C) 1996-2000 的字符串,放在一个文件上,到了新的一年,只要改一个文件,整个站都改了。<p>
<font color="#007700">if (!</font><font color="#0000BB">file_exists</font><font color="#007700">(</font><font color="#0000BB">$chatfile</font><font color="#007700">)) {<br>
echo </font><font color="#DD0000">"尚未开张</body></html>"</font><font color="#007700">;<br>
exit;<br>
}</font><p>
<font color="#0000BB">$uniqfile</font><font color="#007700">=</font><font color="#0000BB">$tempdir</font><font color="#007700">.</font><font color="#0000BB">uniqid</font><font color="#007700">(</font><font color="#0000BB">rand</font><font color="#007700">());</font><br>
<font color="#0000BB">$shellcmd</font><font color="#007700">=</font><font color="#DD0000">"/usr/bin/tail -50 "</font><font color="#007700">.</font><font color="#0000BB">$chatfile</font><font color="#007700">. </font><font color="#DD0000">" > "</font><font color="#007700">.</font><font color="#0000BB">$uniqfile</font><font color="#007700">;</font><br>
<font color="#0000BB">passthru</font><font color="#007700">(</font><font color="#0000BB">$shellcmd</font><font color="#007700">);</font><p>
程序先检查有没有用户发送聊天内容的文件 /tmp/abc,若没有就显示尚未开张,等用户送聊天内容。若已有聊天资料,就抓出最后五十笔,在在另外的文件中准备显示。<p>
<font color="#0000BB">$chatfilearray</font><font color="#007700">=</font><font color="#0000BB">file</font><font color="#007700">(</font><font color="#0000BB">$uniqfile</font><font color="#007700">);</font><br>
<font color="#0000BB">$j</font><font color="#007700">=</font><font color="#0000BB">count</font><font color="#007700">(</font><font color="#0000BB">$chatfilearray</font><font color="#007700">);<br>
for (</font><font color="#0000BB">$i</font><font color="#007700">=</font><font color="#0000BB">1</font><font color="#007700">; </font><font color="#0000BB">$i</font><font color="#007700"><=</font><font color="#0000BB">$j</font><font color="#007700">; </font><font color="#0000BB">$i</font><font color="#007700">++) {<br>
echo </font><font color="#0000BB">$chatfilearray</font><font color="#007700">[</font><font color="#0000BB">$j</font><font color="#007700">-</font><font color="#0000BB">$i</font><font color="#007700">].</font><font color="#DD0000">"<br>\n"</font><font color="#007700">;<br>
}<br>
</font><font color="#0000BB">unlink</font><font color="#007700">(</font><font color="#0000BB">$uniqfile</font><font color="#007700">);</font><p>
将文件读入数组变量 $chatfilearray 中,并以最后的资料最先显示的方式送给浏览器端,当然可以使用对数组排序的方法,但确定一定时最后存入的资料在最后面,将它排序实在很浪费 CPU 时间,因此就从最后 echo 到最前面的资料。使用完成还要用 <a href="function.php-unlink.htm" alt="function.php?unlink">unlink()</a> 指令,将临时文件杀掉。<p>
这样就完成了最粗糙的聊天室系统,当然还有很多改进的空间,例如统计使用人数、调用个人....等,就要 Webmaster 再精雕细琢了。
<p><hr size=1><br>如果你对此手册有任何问题,请到下面网址提问: <a href="www.web745.com">WEB开发知识库</a> (<a href="http://www.web745.com">www.web745.com</a>)<p>
</td></tr></table></div>
<p>
<div align=center>
<table border=0>
<tr>
<td>[ <a href="5.2.php.htm" alt="5.2.php">上一页</a>
</td>
<td> <a href="5.4.php.htm" alt="5.4.php">下一页</a>
]</td>
</tr>
</table>
</div><p><br><br>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -