打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
10例糟糕的PHP代码
10例糟糕的PHP代码
2012-03-24 12:10 by keepfool, 1 visits, 收藏编辑
Example 1 目录引用结构
<?php phpinfo(); if (file_exist('../../../../etc/passwd')) { include('../../../../etc/passwd'); }这是在找爹,找到后来连自己都不知道目录的爹是谁了。何不定义一个目录变量呢?
<?phpdefine("ROOT","C:/websites/php/jileiba.com/library/");Example 2 if else嵌套逻辑
<?php if (!isset($_GET['month'])) { ...}else { if (isset($_POST['submit_fin'])) { ... }}这样的代码难免会出现,但不要大片的出现在PHP代码中,一个function里面不要到处都是这种嵌套的if else结构,它毕竟不是算法。
Example 3 三元运算符
<?php function InitBVar(&$var){ $var = ($var=="Y") ? "Y" : "N";}这种三元运算符的用法看起来有些别扭,用一个if就能完成的代码,不应该写得这么绕。
<?php function InitBVar(&$var){ if($var != "Y"){ $var = "N"; }}Example 4 html字符转义
<?php function htmlspecialcharsex($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手册的同学的做法,也很容易漏掉一些字符。
PHP htmlspecialchars()函数
当你想实现一些很通常的方法时,先去翻翻开发手册。
Example 5 制表符
<?php str_replace("t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", $file_new);制表符根本就不是html的实体,也请你记住还有t;pre&gt这个标签
Example 6 坑Mysql
<?php $id = 0;while (!$id || mysql_error()) { $id = rand(1, 10000000); mysql_query("INSERT INTO `table` (id) VALUES ('".$id."'");}也许你是为了测试mysql的性能,也许你只是为了看看它什么时候能挂掉。Mysql不是爹,它坑不起。
Example 7 字符串替换
<?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($words as $word) { str_replace("#", "", $find);}str_replace也支持数组作为参数,效果和上面等同
<?php $words = array(',', '.', '/', '-', '+', '#');str_replace($words, "", $source); 或者可以使用用正则替换函数preg_replace,论上数组替换比正则的效率高。
<?php $find = preg_replace('%\,|\.|\/|\-|\+|#%', "", $find);Example 8 大量的echo代码
<?php echo "<html>";echo "<body>";echo "<h1>This is my home page</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 等用户输入的 变量。
Example 9 过多的条件判断
<?php if (isset($param) && $param!=null && $param!=0 && $param>1) { sendRequest($param);}过多的条件判断等于没有判断,应该考虑精简一下。
<?php if (is_numeric($param) && $param > 1) { sendRequest($param);}Example 10 switch case
<?php switch (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;}刚入行时都写过这种类似的代码,以此作为小小的怀念吧,虽然方法很傻,但是那时候功能实现了还是很开心的。
英文原文:http://www.devtheweb.net/blog/2010/08/18/php-bad-code-examples/
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
php 字符串中的\n换行符无效、不能换行的解决方法
PHP开发经验总结
php代码安全相关(1)
一个PHP开发者总结的九条建议
美拍解析php分享
php入门(15)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服