PHP的基本应用-MVC

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2章PHP的基本应用第1章中已经简单地介绍了一下PHP5的基本语法。要很快地掌握PHP这门语言,再也没有比动手编写PHP小程序来得快了。本章从PHP的常见基本应用开始,提供你学习PHP5的应用实例。有些实例甚至只用改动部分代码,或进行一些扩展,就完全可以用到实际的系统中。大家知道PHP是以强大的函数集合为特征的语言,在某种程度上,你掌握了PHP中的函数应用,就可以说掌握了PHP这门语言。结合本节的例子,在实现一个个应用的过程中,可帮助你更好地掌握这些强大的常用函数。在此提醒你,不要忽略每节后的补充知识,以及适时给你呈现的Hits知识。有许多内容是作者本人在实际开发工作中花费些“代价”得来的,希望对你有所帮助。2.1统计在线人数所有拥有自己的网站,特别是那些经营网站的朋友,需要随时了解具体网页的在线人数。因为这样不仅可以了解网页的受欢迎程度,还可以掌握具体网页的负荷程度。如果同时在线的人数太多的话,当然服务器的负担也会很大,这时候就应该特别注意此网页的性能了。本节统计在线人数方法,是利用PHP强大的函数库,通过统计所有在线用户的IP地址来实现的,在线用户的信息将保存在文件中。与那些通过数据库实现的统计方法稍有不同。54│PHP5应用实例详解实例要点1.取得IP地址本节使用getenv('REMOTE_ADDR')来取得IP地址,getenv函数是取得系统的环境变量,REMOTE_ADDR从名字就表示要取得的是远程的IP地址。还有其他一些取得IP地址的方法,会在本节后的补充资料会有介绍。2.保存在线用户信息在线用户信息以如下的形式保存在文件中,第一项为IP地址,第二项为链接的时间(严格的说是期限),两项的中间以逗号间隔,一行的末尾以“#”结束。在线用户信息文件的内容如下:128.0.54.1,1275481567#197.0.34.1,1275481578#„„目录结构/samples/chap2/onlinecount.txt保存在线用户信息的文件countOnline.php统计在线用户数的脚本实例代码Program2-01countOnline.php1?phpcount.txt为保存在线用户信息的文件。2$user_online=count.txt;touch函数的作用是如果没有此文件,则创建它。3touch($user_online);30秒内没动作,认为掉线。4$timeout=30;第2章PHP的基本应用│55读入文件内容,并以间隔符“#”来分离出所有字符串后,存储在数组$user_arr。5$user_arr=file_get_contents($user_online);6$user_arr=explode('#',rtrim($user_arr,'#'));$temp为放置所有用户信息的数组。7$temp=array();8到13行对文件中存储的所有在线用户进行循环处理,非本用户保存到$temp数组中。8foreach($user_arras$value){9$user=explode(,,trim($value));如果不是本用户IP,并且时间没有超时则放入数组中temp中。10if(($user[0]!=getenv('REMOTE_ADDR'))&&($user[1]time())){11array_push($temp,$user[0].,.$user[1]);12}13}保存本用户的信息(IP地址,以及链接期限时间)。14array_push($temp,getenv('REMOTE_ADDR').,.(time()+($timeout)).'#');15$user_arr=implode(#,$temp);以更新的形式打开文件count.txt,即不保存原来的内容。Fopen函数的第二个参数[w],表示以更新的形式打开文件。16$fp=fopen($user_online,w);flock函数是锁定/释放锁定用的函数,第二参数为LOCK_EX时,锁定文件句柄;而当第二个参数为LOCK_UN时,释放锁定,从而保证同时只有一个用户在对文件进行写入动作。17flock($fp,LOCK_EX);18fputs($fp,$user_arr);19flock($fp,LOCK_UN);20fclose($fp);$temp数组中的元素个数就是在线人数。21echo当前有.count($temp).人在线;22?56│PHP5应用实例详解补充取得IP地址的方法在PHP浩大的函数库中除了上述的介绍使用getenv('REMOTE_ADDR')方法来取得远程IP地址外,还可以使用全局变量$_SERVER['REMOTE_ADDR']来取得远程IP地址。getenv('REMOTE_ADDR')函数在apache下能正常获取IP地址,而在IIS中,一点作用都没,而$_SERVER['REMOTE_ADDR']函数,既可在Apache中成功获取访客的IP地址,在IIS下也同样有效。另外,还可以通过同一个getenv函数,使用完全不同的关键字来取得远程IP地址。分别为getenv(http_client_ip),getenv(http_x_forwarded_for)。为确保万无一失的取得远程IP地址,可以使用下述取得远程ip地址的函数getip。1functiongetip(){2if(getenv(http_client_ip)&&strcasecmp(getenv(http_client_ip),unknown))3$ip=getenv(http_client_ip);4elseif(getenv(http_x_forwarded_for)&&strcasecmp(getenv(http_x_forwarded_for),unknown))5$ip=getenv(http_x_forwarded_for);6elseif(getenv(remote_addr)&&strcasecmp(getenv(remote_addr),unknown))7$ip=getenv(remote_addr);8elseif(isset($_server[remote_addr])&&$_server[remote_addr]&&strcasecmp($_server[remote_addr],unknown))9$ip=$_server[remote_addr];10else11$ip=unknown;12return($ip);13}逻辑非常简单,在此不再赘述了。其中strcasecmp为字符串比较函数,本书最后的附录中有此函数的介绍。2.2下载图片经常在网上冲浪的朋友,下载图片对他们来说并不是什么困难的事情。无非是在浏览器上选中要下载的图片,单击鼠标右键,再弹出菜单中选择“图片另存为”后,就可以很方便地将其下第2章PHP的基本应用│57载到本地。那么如何由程序来实现这个下载过程呢?本节将会讲解如何通过PHP来实现图片下载的功能,只需要将想下载图片的URL传递给程序,就能将其下载到本地。本例要点主要的处理过程其实非常简短,在PHP中有读取文件的函数readfile,函数readfile的功能是将文件的内容读入到浏览器缓冲,函数readfile可以读取本地文件也可以读取远程文件,使用者完全意识不到本地文件与远程文件的读取过程的不同。因为我们这里传入的是远程图片URL,随后将缓冲的数据取出,保存入本地的文件,就实现了整个下载过程。另外,需要特别强调的是,必须注意缓冲处理函数ob_start()等的用法。本节最后的补充资料里有其功能的详细介绍。目录结构/samples/chap2/downPicgetPic.php下载远程图片的脚本Program2-02getPic.php定义图片下载函数GrabImage,变量说明:$url是远程图片的完整URL地址,不能为空。$filename是可选变量:如果为空,本地文件名将基于时间和日期自动生成。另外在实际应用时请务必确定您有把文件写入本地服务器的权限。1?php2functionGrabImage($url,$filename=){3if($url==)returnfalse;4if($filename==){58│PHP5应用实例详解取得远程图片文件的扩展名。5$ext=strrchr($url,.);当扩展名为gif,jpg,png,bmp以外时返回false,结束处理。6if($ext!=.gif&&$ext!=.jpg&&$ext!=.png&&$ext!=.bmp)returnfalse;生成基于时间和日期的本地文件名。7$filename=date(dMYHis).$ext;8}打开浏览器缓冲区。9ob_start();将文件读入到缓冲。10readfile($url);得到缓冲区的内容并且赋值给变量$img。11$img=ob_get_contents();关闭并清空缓冲。12ob_end_clean();13到15行在本地创建新文件$filename,并将读入内容存入其中。13$fp2=@fopen($filename,a);14fwrite($fp2,$img);15fclose($fp2);16return$filename;17}18?19html20head21title图片下载/title22/head23bodyaction属性中设置为getPic.php,即提交给自己处理。24formmethod=POSTaction=getPic.php25图片URL:26inputtype=textname=urlsize=80/27inputtype=submitname=submitvalue=提交/br/28?php第2章PHP的基本应用│59没有单击“提交”按钮时$_POST['submit']的值为NULL,因此30行到31行的代码只有在单击“提交”按钮后才被执行。29if($_POST['submit']!=NULL){调用自定义函数GrabImage,进行图片下载处理。如果需要下载一系列的远程图片,只要设法将远程图片URL穿过来,循环调用GrabImage函数即可,留给有兴趣的读者完成吧。30$img=GrabImage($_POST['url']);31if($img)echo'preimgsrc='.$img.'/pre';32elseecho下载失败。;33}34?35/form36/body37/html补充ob_start()函数ob_start()函数是一个功能强大的函数,可以帮助我们处理许多问题。下面我们就来具体分析一下有关ob_start()函数的功能特点。比如你用得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了通过ob_start()函数对缓冲区的控制,我们可以轻松地解决:1.?php2.ob_start();//打开缓冲区3.phpinfo();//使用phpinfo函数4.$info=ob_get_contents();//得到缓冲区的内容并且赋值给$info5.$file=fopen(’info.txt’,'w’);//打开文件info.txt6.fwrite($file,$info);//写入信息到info.txt7.fclose($file);//关闭文件info.txt8.?用以上的方法,就可以把不同用户的phpinfo信息保存下来,这在以前恐怕没有办法做到!其实上面本质上是将一些“过程”转化为“函数”的方法!现在大家对ob_start()函数的功能有了一定的了解,上面的一个例子看似简单,但实际上已经掌握了使用ob_start()的要点。(1)使用ob_start()函数打开浏览器的缓冲,这样可以保证缓冲的内容在

1 / 49
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功