收集的php编写大型网站问题集

 更新时间:2007年03月06日 00:00:00   作者:  
PHP以其易用性得到迅速的推广,但易用并不是说就能用好它,实际上许多程序员用它很容易的立一个个WEB应用系统,但又有多少人仔细的考虑过他们的代码,是否容易维护、是否足够健壮、否效率足够高、是否足够安全,当PHP用于建立大型网站时这些就成为很关键的因素。下面我们从较轻微的问题开始讨论,直至一些致命的错误。共分三部分。 
  第一部分、较轻微的错误 

  一、Printf(), 
    该函数主要用来格式化显示数据。当你要改变某个数据的显示格式时才使用。 
  例如以不同的精度来显示PI(3.1415926)的值。 
  <?php 
   /* 
   * The three faces of Π 
   */ 

   printf ("Pi is: %.2f\n<br>\n", M_PI); 
   printf ("Pi is also: %.3f\n<br>\n", M_PI); 
   printf ("Pi is also: %.4f\n<br>\n", M_PI); 
  ?> 

    但许多程序员仅仅为显示一些变量值和函数返回值使用该函数。因为Printf()在显示数据前要先格式化该数据以速度较慢,因此,仅为了显示数据时应用print和echo,以提高速度。 

  二、语意检查 
    PHP是一种弱类型语言,也就是说在使用一个变量前不用定义,这样给编程带来了很大的方便和灵活,但你自己必须知道该变量到底应该是哪种类型,因为该变量在运行时仍实际对应着某一种类型(各种类型之间可以自由互相转换),没有类型的变量是不存在的。有可能PHP并不能检查出你的语意错误,但由于变量类型的变化,会导致一些潜在的问题的发生。另外一个值得注意的问题是变量的范围,它也可能会导致一些潜在的问题的发生。 
  在PHP中有以下几种基本变量: 
  Boolean, resource, integer, double, string, array and object。 

  三、临时变量的使用 
    临时变量的滥用会导致程序运行效率的降低。何时使用临时变量可基于以下两点考虑: 
  1、该变量是否至少使用两次。 
  2、该变量的使用是否会显著提高程序的可读性。 
  如果一条也不满足,则省略该变量的使用。例如: 
  <?php 
   $tmp = date ("F d, h:i a"); /* ie January 3, 2:30 pm */ 
   print $tmp; 
  ?> 
  就应该改成: 
  <?php 
   print date ("F d, h:i a"); 
  ?> 

  又如: 
  <?php 

  // string reverse_characters(string str) 
  // Reverse all of the characters in a string. 
  function reverse_characters ($str) 
  { 
   return implode ("", array_reverse (preg_split("//", $str))); 
  } 

  ?> 
  的可读性不强,可改成: 
  <?php 

  // string reverse_characters(string str) 
  // Reverse all of the characters in a string. 
  function reverse_characters ($str) 
  { 
   $characters = preg_split ("//", $str); 
   $characters = array_reverse ($characters); 

   return implode ("", $characters); 
  } 

  ?> 

  四、客户端和服务器端代码的分离 
    客户端和服务器端代码的在PHP程序中实际上就是HTML代码和PHP语言代码,很多人把HTML和PHP语句混合在一个文件里,使得这文件很大,这种风格对程序的维护和再开发很不利,不适合大型站点的开发。一般有两种方法把HTML和PHP语句分开: 
  1、编写专用API,例如: 

  index.php ? The Client side 
  <?php include_once ("site.lib"); ?> 
  <html> 
  <head> 
  <title> <?php print_header (); ?> </title> 
  </head> 
  <body> 
  <h1> <?php print_header (); ?> </h1> 
  <table border="0" cellpadding="0" cellspacing="0"> 
  <tr> 
  <td width="25%"> 
  <?php print_links (); ?> 
  </td> 
  <td> 
  <?php print_body (); ?> 
  </td> 
  </tr> 
  </table> 
  </body> 
  </html> 

   
  site.lib ? The server side code 

   
  <?php 

  $dbh = mysql_connect ("localhost", "sh", "pass") 
  or die (sprintf ("Cannot connect to MySQL [%s]: %s", 
  mysql_errno (), mysql_error ())); 
  @mysql_select_db ("MainSite") 
  or die (sprintf ("Cannot select database [%s]: %s", 
  mysql_errno (), mysql_error ())); 

  $sth = @mysql_query ("SELECT * FROM site", $dbh) 
  or die (sprintf ("Cannot execute query [%s]: %s", 
  mysql_errno (), mysql_error ())); 

  $site_info = mysql_fetch_object ($sth); 

  function print_header () 
  { 
   global $site_info; 
   print $site_info->header; 
  } 

  function print_body () 
  { 
   global $site_info; 
   print nl2br ($site_info->body); 
  } 

  function print_links () 
  { 
   global $site_info; 

   $links = explode ("\n", $site_info->links); 
   $names = explode ("\n", $site_info->link_names); 

  for ($i = 0; $i < count ($links); $i++) 
  { 
   print "\t\t\t 
   <a href=\"$links[$i]\">$names[$i]</a> 
   \n<br>\n"; 
  } 
  } 
  ?> 

  这种方法使得程序看起来比较简洁,而且执行速度也较快。 

  2、使用模板的方法 
  这种方法使得程序看起来更简洁,同样实现上面的功能,可用以下代码: 
  <html> 
  <head> 
  <title>%%PAGE_TITLE%%</title> 
  </head> 
  <body %%BODY_PROPERTIES%%> 
  <h1>%%PAGE_TITLE%%</h1> 
  <table border="0" cellpadding="0" cellspacing="0"> 
  <tr> 
  <td width="25%">%%PAGE_LINKS%%</td> 
  <td>%%PAGE_CONTENT%%</td> 
  </tr> 
  </table> 
  </body> 
  </html> 

    用占位符代替要动态生成的内容,然后用一解析程序分析该模板文件,把占位符用际的内容替换。种方法使得即使不会使用PHP的页面制作人员也能修改模板文件。这种方法的缺点是执行效率不高,因为要解释模板文件。同时实现起来也比较复杂。 

  注: www.thewebmasters.net的 FastTemplate class可方便的实现以上功能。 

  五、不要用过时的函数 
  作为一种自由软件,PHP发展很快,其中的很多函数都已过时,例如: 

  while (1): 
  print "5"; 
  if ($idx++ == 5): 
  break; 
  endif; 
  endwhile; 

    虽然还能用但效率肯定不高,而且可能在以后的版本中会禁用,导致程序不能运行。因此要经常对照最新PHP手册检查那些函数已过时及时修正。

相关文章

  • PHP设计模式之结构模式的深入解析

    PHP设计模式之结构模式的深入解析

    本篇文章是对PHP设计模式中的结构模式进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Laravel框架数据库迁移操作实例详解

    Laravel框架数据库迁移操作实例详解

    这篇文章主要介绍了Laravel框架数据库迁移操作实例详解,需要的朋友可以参考下
    2020-04-04
  • 解析php中如何调用用户自定义函数

    解析php中如何调用用户自定义函数

    以下是对php中调用用户自定义函数的方法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • php正则匹配文章中的远程图片地址并下载图片至本地

    php正则匹配文章中的远程图片地址并下载图片至本地

    这篇文章主要介绍了php正则匹配文章中的远程图片地址并下载图片至本地的实现技巧,可实现采集并保存远程图片的功能,是非常实用的技巧,感兴趣的小伙伴可以参考一下
    2015-09-09
  • PHP实现猜数游戏

    PHP实现猜数游戏

    这篇文章主要为大家详细介绍了PHP实现猜数游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • php中Array2xml类实现数组转化成XML实例

    php中Array2xml类实现数组转化成XML实例

    这篇文章主要介绍了php中Array2xml类实现数组转化成XML的方法,实例分析了数组转化成XML实现类Array2xml,是非常实用的数组转化技巧,需要的朋友可以参考下
    2014-12-12
  • 怎样使用php与jquery设置和读取cookies

    怎样使用php与jquery设置和读取cookies

    有两种处理cookies的方式—服务端(php,asp等)和客户端(javascript).在这个教程中,我们将学习到以php和javascript这两种方式如何去创建cookies
    2013-08-08
  • php实现百度云加速API及SDK封装

    php实现百度云加速API及SDK封装

    这篇文章主要为大家介绍了php实现百度云加速API及SDK封装的示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • php获取post中的json数据的实现方法

    php获取post中的json数据的实现方法

    最近用到ext与PHP交互,ext把json数据post给PHP,但在PHP里面$_post获取不到,$_REQUEST也获取不到,但是通过firedebug看到的请求信息确实是把JSON数据post给了PHP,这什么情况
    2011-06-06
  • PHP开发中常用的字符串操作函数

    PHP开发中常用的字符串操作函数

    在编程的过程当中,字符串的操作是非常重要的并且经常会被用到,字符串常用的操作具体的包括字符串的拼接,替换字符串,查找字符串,比较字符串,复制字符串以及计算字符串的长度等等.
    2011-02-02

最新评论