仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 894|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页编程之PHP生成静态页面详解

[复制链接]
跳转到指定楼层
楼主
发表于 2015-2-4 00:29:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
也或许是因为我还没有真正的学到深处吧,说实在的,PHP中的很多高级点的应用,如PHP类、PHP函数基本还是不懂吧!静态|详解|页面   咱们先回忆一些根基的概念。   一,PHP剧本与静态页面。
  PHP剧本是一种办事器端剧本法式,可经由过程嵌入等办法与HTML文件夹杂,也能够类,函数封装等模式,以模板的体例对用户恳求停止处置。不管以何种体例,它的根基道理是如许的。由客户端提出恳求,恳求某一页面 -----> WEB办事器引入指定响应剧本停止处置 -----> 剧本被载入办事器 -----> 由办事器指定的PHP解析器对剧本停止解析构成HTML言语模式 ----> 将解析后的HTML语句以包的体例传回给阅读器。由此不好看出,在页面发送到阅读器后,PHP就不存在了,已被转化解析为HTML语句。客户恳求为一静态文件,现实上并没有真实的文件存在在那边,是PHP解析而成绝对应的页面,然后发送回阅读器。这类页面处置体例被称为“静态页面”。
  二,静态页面。
  静态页面是指在办事器端的确存在的仅含HTML和JS,CSS等客户端运转剧本的页面。它的处置体例是。由客户端提出恳求,恳求某一页面 ----> WEB办事器确认并载入某一页面 ----> WEB办事器将该页面以包的模式传递回阅读器。由这一进程,咱们对照一下静态页面,便可方现。静态页面需由WEB办事器的PHP解析器停止解析,并且凡是还需毗连数据库,停止数据库存取操作,然后才干构成HTML言语信息包;而静态页面,不必解析,不必毗连数据库,直接发送,可大大加重办事器压力,进步办事器负载才能,大幅供应页面翻开速度和网站全体翻开速度。但其弱点是,不克不及静态地对恳求停止处置,办事器上必需的确存在该文件。
  三,模板及模板解析。
  模板即还没有填充内容html文件。例如:
 temp.html
  Code:   
<HTML>
  <TITLE>{ title }</TITLE>
  <BODY>
     this is a { file } file's templets
  </BODY>
</HTML>


PHP处置:
 templetest.php

  Code:   
  $title = "PHP喜好者测试模板";
  $file   = "TwoMax Inter test templet,
author:Sheyi";
 $fp          = fopen ("temp.html","r");
  $content  = fread ($fp,filesize ("temp.html"));
  $content .= str_replace ("{ file }",$file,$content);
  $content .= str_replace ("{ title }",$title,$content);
  echo $content;
?>

  模板解析处置,行将经PHP剧本解析处置后得出的了局填充(content)进模板的处置进程。凡是借助于模板类。今朝较盛行的模板解析类有phplib,smarty,fastsmarty等等。模板解析处置的道理凡是为交换。也有些法式员习气将判别,轮回等处置放进模板文件中,用解析类处置,典范使用为block概念,复杂来讲即为一个轮回处置。由PHP剧本指定轮回次数,若何轮回代入等,再由模板解析类详细实行这些操作。

  好了,对照过静态页面与静态页面各自的好坏,如今咱们就来讲说,若何用PHP生成静态文件。

  PHP生成静态页面并非指PHP的静态解析,输入HTML页面,而是指用PHP创立HTML页面。同时由于HTML的不成写性,咱们创立的HTML如有修正,则需删失落从头生成便可。(固然你也能够选择用正则停止修正,但团体以为那样做倒不如删失落从头生成来得快捷,有些得失相当。)
  言归正传。用过PHP文件操作函数的PHP FANS晓得,PHP中有一个文件操作函数fopen,即翻开文件。若文件不存在,则测验考试创立。这便是PHP可以用来创立HTML文件的实际基本。只需用来寄存HTML文件的文件夹有写权限(即权限制义0777),便可创立文件。(针对UNIX体系而言,Win体系不必思索。)仍以上例为例,若咱们修正最初一句,并指定在test目次下生成一个名为test.html的静态文件:

  Code:   
  $title = "拓迈国际测试模板";
  $file   = "TwoMax Inter test templet,
author:Matrix@Two_Max";
 $fp          = fopen ("temp.html","r");
  $content  = fread ($fp,filesize ("temp.html"));
  $content .= str_replace ("{ file }",$file,$content);
  $content .= str_replace ("{ title }",$title,$content);
  // echo $content;
  
  $filename = "test/test.html";
  $handle    = fopen ($filename,"w"); //翻开文件指针,创立文件
  /*
 反省文件是不是被创立且可写
  */
  if (!is_writable ($filename)){
     die ("文件:".$filename."不成写,请反省其属性后重试!");
  }
  if (!fwrite ($handle,$content)){  //将信息写入文件
     die ("生成文件".$filename."掉败!");
  }
  fclose ($handle); //封闭指针
  
  die ("创立文件".$filename."胜利!");
?>   


  实践使用中罕见成绩处理计划参考:
  一,文章列表成绩:
  
  在数据库中创立字段,纪录文件名,每生成一个文件,将主动生成的文件名存入数据库,关于保举文章,只需指向寄存静态文件的指定文件夹中的该页面便可。使用PHP操作处置文章列表,存为字符串,生成页面时交换此字符串便可。如,在页面中放置文章列表的表格到场标志{ articletable },而在PHP处置文件中:

  Code:   
  $title = "拓迈国际测试模板";
  $file   = "TwoMax Inter test templet,
author:Matrix@Two_Max";
 $fp          = fopen ("temp.html","r");
  $content  = fread ($fp,filesize ("temp.html"));
  $content .= str_replace ("{ file }",$file,$content);
  $content .= str_replace ("{ title }",$title,$content);
  
  //  生成列表入手下手
  $list = '';
  $sql = "select id,title,filename from article";
  $query = mysql_query ($sql);
  while ($result = mysql_fetch_array ($query)){
     $list .= ''.$result['title'].'
';
  }
  $content .= str_replace ("{ articletable }",$list,$content);
  
  //生成列表停止
  // echo $content;
  
  $filename = "test/test.html";
  $handle    = fopen ($filename,"w"); //翻开文件指针,创立文件
  /*
 反省文件是不是被创立且可写
  */
  if (!is_writable ($filename)){
     die ("文件:".$filename."不成写,请反省其属性后重试!");
  }
  if (!fwrite ($handle,$content)){  //将信息写入文件
     die ("生成文件".$filename."掉败!");
  }
  fclose ($handle); //封闭指针
  
  die ("创立文件".$filename."胜利!");
?>

  二,分页成绩。
  如咱们指定分页时,每页20篇。某子频道列表内文章经数据库查询为45条,则,起首咱们经由过程查询失掉以下参数:1,总页数;2,每页篇数。第二步,for ($i = 0; $i < allpages; $i++),页面元素获得,剖析,文章生成,都在此轮回中履行。分歧的是,die ("创立文件".$filename."胜利!";这句去失落,放到轮回后的显示,由于该语句将中断法式履行。例:

  Code:   
  $fp          = fopen ("temp.html","r");
  $content  = fread ($fp,filesize ("temp.html"));
  $onepage  = '20';
  $sql          = "select id from article where channel='$channelid'";
  $query      = mysql_query ($sql);
  $num        = mysql_num_rows ($query);
  $allpages   = ceil ($num / $onepage);
  for ($i = 0;$i<$allpages; $i++){
     if ($i == 0){
        $indexpath = "index.html";
      } else {
        $indexpath = "index_".$i."html";
      }
     $start = $i * $onepage;
     $list    = '';
     $sql_for_page = "select name,filename,title from article where channel='$channelid' limit $start,$onepage";
     $query_for_page = mysql_query ($sql_for_page);
     while ($result = $query_for_page){
        $list .= ''.$title.'
';
      }
     
     $content = str_replace ("{ articletable }",$list,$content);
     if (is_file ($indexpath)){
        @unlink ($indexpath); //若文件已存在,则删除
      }
     $handle    = fopen ($indexpath,"w"); //翻开文件指针,创立文件
     /*
    反省文件是不是被创立且可写
     */
     if (!is_writable ($indexpath)){
        echo "文件:".$indexpath."不成写,请反省其属性后重试!"; //修正为echo
      }
     if (!fwrite ($handle,$content)){  //将信息写入文件
        echo "生成文件".$indexpath."掉败!"; //修正为echo
      }
     fclose ($handle); //封闭指针
  }
  fclose ($fp);
  die ("生成份页文件完成,如生成不完整,请反省文件权限体系后从头生成!");
?>   

  大致思绪如斯,个中如其它数据生成,数据输出输入反省,分页内容指向等可酌情在页面中到场。
  在实践文章体系处置进程傍边,还有很多成绩有待思索,与静态页面分歧的地方,需注重的中央还有良多。但大致思绪便是如斯,其它方面可触类旁通而得。
  你的确对PHP有兴趣,那么选择教材也是很重要的。
admin 该用户已被删除
沙发
发表于 2015-2-4 13:14:24 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-2-7 18:08:30 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
简单生活 该用户已被删除
地板
发表于 2015-2-13 04:45:46 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
若相依 该用户已被删除
5#
发表于 2015-3-3 14:02:09 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
谁可相欹 该用户已被删除
6#
发表于 2015-3-8 18:20:44 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
乐观 该用户已被删除
7#
发表于 2015-3-11 09:49:32 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
若天明 该用户已被删除
8#
发表于 2015-3-14 10:09:31 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
飘灵儿 该用户已被删除
9#
发表于 2015-3-14 11:21:49 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
柔情似水 该用户已被删除
10#
发表于 2015-3-17 02:10:27 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
不帅 该用户已被删除
11#
发表于 2015-3-23 15:26:30 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
飘飘悠悠 该用户已被删除
12#
发表于 2015-3-26 18:57:07 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
兰色精灵 该用户已被删除
13#
发表于 2015-4-9 09:29:16 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
活着的死人 该用户已被删除
14#
发表于 2015-4-12 09:57:00 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
爱飞 该用户已被删除
15#
发表于 2015-4-12 16:13:53 | 只看该作者
爱上php,他也会爱上你。
16#
 楼主| 发表于 2015-4-14 16:11:54 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
分手快乐 该用户已被删除
17#
发表于 2015-4-15 16:20:57 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
深爱那片海 该用户已被删除
18#
发表于 2015-5-4 12:30:16 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
第二个灵魂 该用户已被删除
19#
发表于 2015-5-7 20:16:57 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
再见西城 该用户已被删除
20#
发表于 2015-5-11 20:46:13 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 19:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表