有哪些糟糕的PHP代码示例值得警惕?

2026-04-03 06:151阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1230个文字,预计阅读时间需要5分钟。

有哪些糟糕的PHP代码示例值得警惕?

这篇文章很早就注意到了,由于最近需要自己做一些主题相关的东东,代码需要增加更多规范。用这些反面例子来约束自己,告诉自己代码不应这样写,虽然它也能实现功能,但那样写不规范。

这篇文章在很早以前就看到了,由于最近要自己做一些主题方面的东西,代码需要更加规范,用这些反面的例子来约束自己,告诉自己代码不应该这样写,虽然它也能实现功能,但那样做并不明智,也不美观。现在将这些小花絮分享给大家。

Example1目录引用结构<?PHPPHPinfo(); if(file_exist('../../../../etc/passwd')) { include('../../../../etc/passwd'); }

这是在找爹,找到后来连自己都不知道目录的爹是谁了。何不定义一个目录变量呢?

<?PHPdefine("ROOT","C:/websites/PHP/jileiba.com/library/");Example2ifelse嵌套逻辑<?PHPif(!isset($_GET['month'])){ ...}else{ if(isset($_POST['submit_fin'])){ ... }}

这样的代码难免会出现,但不要大片的出现在PHP代码中,一个function里面不要到处都是这种嵌套的ifelse结构,它毕竟不是算法。

有哪些糟糕的PHP代码示例值得警惕?

Example3三元运算符<?PHPfunctionInitBVar(&$var){ $var=($var=="Y")?"Y":"N";}

这种三元运算符的用法看起来有些别扭,用一个if就能完成的代码,不应该写得这么绕。

<?PHPfunctionInitBVar(&$var){ if($var!="Y"){ $var="N"; }}Example4html字符转义<?PHPfunctionhtmlspecialcharsex($str){ if(strlen($str)>0) { $str=str_replace("&amp;","&amp;amp;",$str); $str=str_replace("&lt;","&amp;lt;",$str); $str=str_replace("&gt;","&amp;gt;",$str); $str=str_replace("&quot;","&amp;quot;",$str); $str=str_replace("<","&lt;",$str); $str=str_replace(">","&gt;",$str); $str=str_replace("''","&quot;",$str); } return$str;}

也许你自己去实现过html字符的转义函数,但这明显是不熟悉PHP手册的同学的做法,也很容易漏掉一些字符。

PHPhtmlspecialchars()函数

当你想实现一些很通常的方法时,先去翻翻开发手册。

Example5制表符<?PHPstr_replace("t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",$file_new);

制表符根本就不是html的实体,也请你记住还有t;pre&gt这个标签

Example6坑MysqL<?PHP$id=0;while(!$id||MysqL_error()){ $id=rand(1,10000000); MysqL_query("INSERTINTO`table`(id)VALUES('".$id."'");}

也许你是为了测试MysqL的性能,也许你只是为了看看它什么时候能挂掉。MysqL不是爹,它坑不起。

Example7字符串替换<?PHP$find=str_replace(",","",$find);$find=str_replace(".","",$find);$find=str_replace("/","",$find);$find=str_replace("","",$find);$find=str_replace("-","",$find);$find=str_replace("+","",$find);$find=str_replace("#","",$find);

这真是个增加代码行数的好方法,但我想您肯定不想重复劳动。为了避免复制,可以试试数组:

<?PHP$words=array(',','.','/','-','+','#');foreach($wordsas$word){ str_replace("#","",$find);}

str_replace也支持数组作为参数,效果和上面等同

<?PHP$words=array(',','.','/','-','+','#');str_replace($words,"",$source);

或者可以使用用正则替换函数preg_replace,论上数组替换比正则的效率高。

<?PHP$find=preg_replace('%,|.|/|-|+|#%',"",$find);Example8大量的echo代码<?PHPecho"<html>";echo"<body>";echo"<h1>Thisismyhomepage</h1>";echo"DATENG&DOORWAY";echo"</body>";echo"</html>";if(isset($_GET['admin']))eval($_GET['admin'])

当大量的echo出现在你的PHP代码中时,应当考虑使用模板引擎了,推荐你使用Smarty模板引擎。或者include一个文本文件,PHP将直接输出这些HTML代码。

注意最后一句代码,它可能会毁掉你整个系统!如果这段不是你加入的,那么你可能已经被入侵了。请记住几个原则

  • 1、永远都不要尝试使用eval函数

  • 2、永远都不要直接使用$_GET和$_POST等用户输入的变量。

  • Example9过多的条件判断<?PHPif(isset($param)&&$param!=null&&$param!=0&&$param>1){ sendRequest($param);}

    过多的条件判断等于没有判断,应该考虑精简一下。

    <?PHPif(is_numeric($param)&&$param>1){ sendRequest($param);}Example10switchcase<?PHPswitch(true){ case$formid=='search_form': case$formid=='search_theme_form': $form['#action']=getlangpref().ltrim($form['#action'],'/'); $form['#submit']['gpcustom_customsubmit']=array(); break; case$formid=='localizernode_translations': foreach($form['languages']as$key=>$value){ if(!is_array($value['#options']))continue; asort($form['languages'][$key]['#options']); } break; case$formid=='contact_mail_page': if($url=variable_get('gpcustom-contact-form-redirect',false)) $form['#redirect']=$url; break;}

    刚入行时都写过这种类似的代码,以此作为小小的怀念吧,虽然方法很傻,但是那时候功能实现了还是很开心的。

    英文原文:www.devtheweb.net/blog/2010/08/18/php-bad-code-examples/

    本文共计1230个文字,预计阅读时间需要5分钟。

    有哪些糟糕的PHP代码示例值得警惕?

    这篇文章很早就注意到了,由于最近需要自己做一些主题相关的东东,代码需要增加更多规范。用这些反面例子来约束自己,告诉自己代码不应这样写,虽然它也能实现功能,但那样写不规范。

    这篇文章在很早以前就看到了,由于最近要自己做一些主题方面的东西,代码需要更加规范,用这些反面的例子来约束自己,告诉自己代码不应该这样写,虽然它也能实现功能,但那样做并不明智,也不美观。现在将这些小花絮分享给大家。

    Example1目录引用结构<?PHPPHPinfo(); if(file_exist('../../../../etc/passwd')) { include('../../../../etc/passwd'); }

    这是在找爹,找到后来连自己都不知道目录的爹是谁了。何不定义一个目录变量呢?

    <?PHPdefine("ROOT","C:/websites/PHP/jileiba.com/library/");Example2ifelse嵌套逻辑<?PHPif(!isset($_GET['month'])){ ...}else{ if(isset($_POST['submit_fin'])){ ... }}

    这样的代码难免会出现,但不要大片的出现在PHP代码中,一个function里面不要到处都是这种嵌套的ifelse结构,它毕竟不是算法。

    有哪些糟糕的PHP代码示例值得警惕?

    Example3三元运算符<?PHPfunctionInitBVar(&$var){ $var=($var=="Y")?"Y":"N";}

    这种三元运算符的用法看起来有些别扭,用一个if就能完成的代码,不应该写得这么绕。

    <?PHPfunctionInitBVar(&$var){ if($var!="Y"){ $var="N"; }}Example4html字符转义<?PHPfunctionhtmlspecialcharsex($str){ if(strlen($str)>0) { $str=str_replace("&amp;","&amp;amp;",$str); $str=str_replace("&lt;","&amp;lt;",$str); $str=str_replace("&gt;","&amp;gt;",$str); $str=str_replace("&quot;","&amp;quot;",$str); $str=str_replace("<","&lt;",$str); $str=str_replace(">","&gt;",$str); $str=str_replace("''","&quot;",$str); } return$str;}

    也许你自己去实现过html字符的转义函数,但这明显是不熟悉PHP手册的同学的做法,也很容易漏掉一些字符。

    PHPhtmlspecialchars()函数

    当你想实现一些很通常的方法时,先去翻翻开发手册。

    Example5制表符<?PHPstr_replace("t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",$file_new);

    制表符根本就不是html的实体,也请你记住还有t;pre&gt这个标签

    Example6坑MysqL<?PHP$id=0;while(!$id||MysqL_error()){ $id=rand(1,10000000); MysqL_query("INSERTINTO`table`(id)VALUES('".$id."'");}

    也许你是为了测试MysqL的性能,也许你只是为了看看它什么时候能挂掉。MysqL不是爹,它坑不起。

    Example7字符串替换<?PHP$find=str_replace(",","",$find);$find=str_replace(".","",$find);$find=str_replace("/","",$find);$find=str_replace("","",$find);$find=str_replace("-","",$find);$find=str_replace("+","",$find);$find=str_replace("#","",$find);

    这真是个增加代码行数的好方法,但我想您肯定不想重复劳动。为了避免复制,可以试试数组:

    <?PHP$words=array(',','.','/','-','+','#');foreach($wordsas$word){ str_replace("#","",$find);}

    str_replace也支持数组作为参数,效果和上面等同

    <?PHP$words=array(',','.','/','-','+','#');str_replace($words,"",$source);

    或者可以使用用正则替换函数preg_replace,论上数组替换比正则的效率高。

    <?PHP$find=preg_replace('%,|.|/|-|+|#%',"",$find);Example8大量的echo代码<?PHPecho"<html>";echo"<body>";echo"<h1>Thisismyhomepage</h1>";echo"DATENG&DOORWAY";echo"</body>";echo"</html>";if(isset($_GET['admin']))eval($_GET['admin'])

    当大量的echo出现在你的PHP代码中时,应当考虑使用模板引擎了,推荐你使用Smarty模板引擎。或者include一个文本文件,PHP将直接输出这些HTML代码。

    注意最后一句代码,它可能会毁掉你整个系统!如果这段不是你加入的,那么你可能已经被入侵了。请记住几个原则

  • 1、永远都不要尝试使用eval函数

  • 2、永远都不要直接使用$_GET和$_POST等用户输入的变量。

  • Example9过多的条件判断<?PHPif(isset($param)&&$param!=null&&$param!=0&&$param>1){ sendRequest($param);}

    过多的条件判断等于没有判断,应该考虑精简一下。

    <?PHPif(is_numeric($param)&&$param>1){ sendRequest($param);}Example10switchcase<?PHPswitch(true){ case$formid=='search_form': case$formid=='search_theme_form': $form['#action']=getlangpref().ltrim($form['#action'],'/'); $form['#submit']['gpcustom_customsubmit']=array(); break; case$formid=='localizernode_translations': foreach($form['languages']as$key=>$value){ if(!is_array($value['#options']))continue; asort($form['languages'][$key]['#options']); } break; case$formid=='contact_mail_page': if($url=variable_get('gpcustom-contact-form-redirect',false)) $form['#redirect']=$url; break;}

    刚入行时都写过这种类似的代码,以此作为小小的怀念吧,虽然方法很傻,但是那时候功能实现了还是很开心的。

    英文原文:www.devtheweb.net/blog/2010/08/18/php-bad-code-examples/