设为首页 收藏本站
查看: 938|回复: 0

[经验分享] 10例糟糕的PHP代码

[复制链接]

尚未签到

发表于 2015-8-23 09:49:49 | 显示全部楼层 |阅读模式
  这篇文章在很早以前就看到了,由于最近要自己做一些主题方面的东西,代码需要更加规范,用这些反面的例子来约束自己,告诉自己代码不应该这样写,虽然它也能实现功能,但那样做并不明智,也不美观。现在将这些小花絮分享给大家。

Example 1 目录引用结构

<?php
phpinfo();
if (file_exist('../../../../etc/passwd'))
{
include('../../../../etc/passwd');
}
  这是在找爹,找到后来连自己都不知道目录的爹是谁了。何不定义一个目录变量呢?

<?php
define("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/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-102863-1-1.html 上篇帖子: PHP常用函数 下篇帖子: Windows下PHP安装配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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