分享

36计教您如何提高PHP代码质量(二) 转自csdn

 看见就非常 2015-04-01

 在某地方收集所有输入, 一次输出给浏览器

这称为输出缓冲, 假如说你已在不同的函数输出内容:

  1. <?php  
  2.   function print_header()    
  3.   {    
  4.       echo "<div id='header'>Site Log and Login links</div>";    
  5.   }       
  6.   function print_footer()    
  7.   {    
  8.       echo "<div id='footer'>Site was made by me</div>";    
  9.   }   
  10.   print_header();    
  11.   for($i = 0 ; $i <100; $i++)    
  12.   {    
  13.         echo "I is : $i <br />";    
  14.   }   
  15.   print_footer();   
  16.   ?>  
以上这种情况,可以在某地方集中收集输出. 你可以存储在函数的局部变量中,也可以使用ob_start和ob_end_clean. 使用PHP ob_start()函数打开服务器server的cache,这样可以保证cache的内容在你调用flush(),ob_end_flush()(或程序执行完毕)之前不会被输出。如下:
  1. <?php  
  2.   function print_header()    
  3.   {    
  4.       echo "<div id='header'>Site Log and Login links</div>";    
  5.   }       
  6.   function print_footer()    
  7.   {    
  8.       echo "<div id='footer'>Site was made by me</div>";    
  9.   }   
  10.   ob_start();  
  11.   print_header();    
  12.   for($i = 0 ; $i <100; $i++)    
  13.   {    
  14.         echo "I is : $i <br />";    
  15.   }   
  16.   print_footer();   
  17.   $ok = ob_get_contents();  
  18.   ob_end_clean();  
  19.   echo $ok;  
  20.   ?>  

如果上面的这个还不很清楚,不能看出收集输出的作用,我们来看下一个代码

  1. <?php  
  2. ob_start();//buf1  
  3. echo ‘multiple’;  
  4. ob_start();//buf2  
  5. echo ‘bufferswork’;  
  6. $buf1 = ob_get_contents();  
  7. ob_end_clean();  
  8. $buf2 = ob_get_contents();  
  9. ob_end_clean();  
  10. ob_start();  
  11. for($i = 0 ; $i <100; $i++)    
  12.   {    
  13.         echo "I is : $i <br />";    
  14.   }   
  15. $ok = ob_get_contents();  
  16. ob_end_clean();  
  17. echo $ok;  
  18. echo $buf1;  
  19. echo "<br/>";  
  20. echo $buf2;  
  21. ?>  
上面这段代码首先输出for循环的结果,然后是第二个字符串,最后输出第一个字符串,可知ob_start(),ob_get_contents(),ob_end_clean();三个函数的使用方法。

8. 发送正确的mime类型头信息, 如果输出非html内容的话。

xml可以按下面这样写:

  1. $xml = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>';    
  2. $xml = "<response>        
  3.             <code>  
  4.                 0  
  5.             </code>     
  6.         </response>";    
  7. echo $xml;  
但是还可以做一下优化:

  1. $xml = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>';    
  2. $xml = "<response>        
  3.             <code>  
  4.                 0  
  5.             </code>     
  6.         </response>";    
  7. header("content-type: text/xml");    
  8. echo $xml;  

注意header行. 该行告知浏览器发送的是xml类型的内容. 所以浏览器能正确的处理. 很多的javascript库也依赖头信息。

9. 为mysql连接设置正确的字符编码

曾经遇到过在mysql表中设置了unicode/utf-8编码, phpadmin也能正确显示, 但当你获取内容并在页面输出的时候,会出现乱码. 这里的问题出在mysql连接的字符编码.

  1. <? //Attempt to connect to database    
  2.  $c = mysqli_connect($this->host , $this->username, $this->password);    //主机名,用户名和密码是作为三个私有属性   
  3.  //Check connection validity    
  4.  if (!$c)   
  5.  {    
  6.      die ("Could not connect to the database host: <br />". mysqli_connect_error());    
  7.  }      
  8.  //Set the character set of the connection    
  9.  if(!mysqli_set_charset ( $c , 'UTF8' ))    
  10.  {    
  11.      die('mysqli_set_charset() failed');    
  12.  }   
  13.  //一旦连接数据库, 最好设置连接的 characterset. 你的应用如果要支持多语言, 这么做是必须的.  
  14.  ?>  

10. 使用 htmlentities 设置正确的编码选项

php5.4前, 字符的默认编码是ISO-8859-1, 不能直接输出如à a等.,

  1. <?  
  2.   1 $value = htmlentities($this->value , ENT_QUOTES , CHARSET);  
  3.   ?>  
php5.4以后, 默认编码为UTF-8, 这將解决很多问题. 但如果你的应用是多语言的, 仍然要留意编码问题,.

11. 不要在应用中使用gzip压缩输出, 让apache处理

考虑过使用 ob_gzhandler 吗? 不要那样做. 毫无意义. php只应用来编写应用. 不应操心服务器和浏览器的数据传输优化问题.使用apache的mod_gzip/mod_deflate 模块压缩内容。

12. 使用json_encode输出动态javascript内容

常会用php输出动态javascript内容:
  1. <?php  
  2.   $images = array( 'myself.png' , 'friends.png' , 'colleagues.png' );    
  3.   $js_code = '';       
  4.     foreach($images as $image)    
  5.     {    
  6.     $js_code .= "'$image' ,";    
  7.     }      
  8.     $js_code = 'var images = [' . $js_code . ']; ';       
  9.     echo $js_code;    
  10.     //Output is var images = ['myself.png' ,'friends.png' ,'colleagues.png' ,];   
  11.   ?>  

更聪明的做法, 使用 json_encode:

  1. <?php  
  2.   $images = array( 'myself.png' , 'friends.png' , 'colleagues.png' );        
  3.   $js_code = 'var images = ' . json_encode($images);       
  4.   echo $js_code;       
  5.   //Output is : var images = ["myself.png","friends.png","colleagues.png"]   
  6.   ?>  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多