0

我的帖子

个人中心

设置

  发新话题

【吐槽】PHP编程中遇到令人抓狂的“bug”




       在编程的时候,常常因为自己的疏忽大意,犯了个很小很小很小的错误,但又难以发现,以至于在学习或工作中浪费大量时间停留在这个错误上     网上搜索不到错误原因,自己反复看了几十遍也看不出问题,真是叫天天不应叫地地不灵啊!


     最后,经过自己面壁思过、痛改前非、洗心革面……终于发现了那个“严重”的错误,不是语法错误,也不是逻辑错误,居然是……







       不论新手还是老司机都难免遇到这类尴尬,如何在最短时间内找到这些错误,不仅需要良好的编程习惯,还要熟记常见错误的排查经验,以最快速度顺利开发出一个完善的项目!


      话题还可以不限于PHP编程,其他类似工作,甚至非编程任务中也可能遇到,都可以发表于此!


参与方式:

请参照以下例子的格式进行回复:


  •     遇到的问题:……
  •     排查过程及耗费时间:……
  •     最终错误原因:……

例如:


  • 遇到的问题:if($username){……}总是判断为false
  • 排查过程及耗费时间:把这个函数前面所有的变量都dump了一个遍,都没发现错误,又检查提交过来的表单数据,也没问题;再把提交的数据进行类型转换,还是没发现错误。折腾大半小时……
  • 最终错误原因:$username被我错误地写成了$useranme

活动时间:即日起 至 2017年7月18日23:59结束


活动奖励:


   1.凡参与者会根据内容的优质程度,获得10~100不等的无忧币;听说无忧币可以抽手机哎>>>点我!!!

    2.根据发帖质量,由小编选取3名优秀参与者进行图书奖励哦;

VMware vSphere企业运维实战、自己动手写网络爬虫、  linux集群与自动化运维)

    3. 严厉打击恶意灌水、重复发帖的,一经发现,取消活动参与资格及奖励!













我来开个头哈~!

遇到的问题:使用Jquery中,第一句就出错 var link = $(“#link”);错误代码:Uncaught ReferenceError: $ is not defined


排查过程及耗费时间:我把双引号改成单引号,又把单引号改成双引号,再把ID改成其他的,字母又区分大小写,都一直出错,还把压缩版的jquery改成了非压缩版,仍然出错,浪费了半小时左右……


最终错误原因:使用thinkphp框架模板语句引入Jquery的那条语句必须以“/>”结尾,我就忘记输入那个 “/”!!!



<load href="__PUBLIC__/js/jquery-2.2.3.js" >
就这个细微的差别:
<load href="__PUBLIC__/js/jquery-2.2.3.js" />
相信很多新手也会犯这样的错!
本帖最近评分记录
  • 51cto_bbs 无忧币 +10 看来是踩了不少的坑啊~ 2017-7-5 17:52



新上任PHP版块版主,请大家来捧场哟~!点这里猛戳→51CTO-PHP
  •   遇到的问题:……
  • <?php
    $dbj=1;
    while($dbj <= 10){
    echo "做了",$dbj,"次大保健没做够";
    $dbj=$dbj+1;
    }
  • echo '做了',$dbj,'次大保健,憋了20年终于舒服了';
    ?>
    这段代码提示第4行有语法错误。
  •    排查过程及耗费时间:把逗号改为.来连接,结果没用,双引号改成单引号也没用,把;用英文输入法状态下输入也不对,请教小七后还是未解决。
  •     最终错误原因:把那句重新输入了一遍,最后估计可能是因为某个字符在汉语输入法下输入的
  • (你们尽情的嘲笑我吧,为了无忧币抽奖真是拼了命了赚钱~~~)


本帖最近评分记录
  • lover119 无忧币 +20 大宝剑你好 2017-7-6 15:45
  • 七彩极 无忧币 +20 我很赞同 2017-7-5 19:18



本帖最后由 hlxxhl 于 2017-7-5 18:16 编辑


我爱你,如果肾够好的话,我希望是一万年!


引用:
原帖由 hlxxhl 于 2017-7-5 18:14 发表
  •   遇到的问题:……

  • 这段代码提示第4行有语法错误。
  •    排查过程及耗费时间:把逗号改为.来连接,结果没用,双引号改成单引号也没用,把;用英文输入法状态下输入也不对,请教小七后还是未解决。
  •     最终错误原因:把那 ...
  • 我看到了你现在的代码里“while($dbj <= 10){” 大括号是中文的!



    新上任PHP版块版主,请大家来捧场哟~!点这里猛戳→51CTO-PHP
    引用:
    原帖由 七彩极 于 2017-7-5 19:19 发表

    我看到了你现在的代码里“while($dbj  
    啃爹的不应该汉英混输,粗心的人会经常出错





    我爱你,如果肾够好的话,我希望是一万年!


    <?php
    $a=3;
    $b=6;
    if($a=5||$b=7){
    $a++;
    $b++;
    }
    var_dump($a, $b);

    把$a=5、$b=7看成了$a==5、$b==7 。
    本帖最近评分记录
    • 七彩极 无忧币 +20 感谢参与!确实是低级错误哈! ... 2017-7-5 23:12



    引用:
    原帖由 爱情89757 于 2017-7-5 23:09 发表
    妹纸,你又上线了,我记得你不是HR嘛,怎么现在搞Java啦





    我爱你,如果肾够好的话,我希望是一万年!


    遇到的问题
    Delphi在写一个小程序的时候,程序在大部分同事电脑上OK,在小部分人电脑上提示 ‘xxx’  is not a valid  date and time
    排查过程及耗费时间
    把代码断点执行一遍,在自己机器没看出任何异常,无错误抛出,获取的数据也正常(这里要自我检讨下,这种情况先检查代码感觉不明智)
    后来发现没问题的机器是win7 win8 有问题的那些是win10 ,难道是操作系统? 打开自己的虚拟机开了2个win10,一个正常一个错误,彻底懵逼
    此时已过去30分钟
    最终错误原因
    strtodate函数在日期格式为XXXX-XX-XX的电脑没问题,在XXXX/XX/XX的电脑上就报错
    原先打算用SetLocaleInfo强制更新用户电脑上的日期格式
    后来想想太不人性化,就多写了点代码判断用户日期格式,不符合的就把获取的数据转为XXXX-XX-XX,问题解决
    总共近1小时,后来发现网上也有类似问题,有时候还是优先用搜索引擎节约生命啊。。。
    本帖最近评分记录
    • 七彩极 无忧币 +30 感谢分享! 2017-7-6 19:43



    引用:
    原帖由 hlxxhl 于 2017-7-6 10:58 发表

    妹纸,你又上线了,我记得你不是HR嘛,怎么现在搞Java啦
    撩妹无处不在啊



    51CTO信息安全交流群:143484449 入群请说明论坛ID
    引用:
    原帖由 lover119 于 2017-7-6 15:46 发表

    撩妹无处不在啊
    119大哥你也是无处不在啊





    我爱你,如果肾够好的话,我希望是一万年!


    引用:
    原帖由 hlxxhl 于 2017-7-6 16:23 发表

    119大哥你也是无处不在啊
    其实我以前一直是这样的,只不过忙起来上来少了,转的板块就少了。。。。以前日均30贴~



    51CTO信息安全交流群:143484449 入群请说明论坛ID
    引用:
    原帖由 lover119 于 2017-7-6 16:26 发表

    其实我以前一直是这样的,只不过忙起来上来少了,转的板块就少了。。。。以前日均30贴~
    厉害厉害,佩服佩服





    我爱你,如果肾够好的话,我希望是一万年!


    遇到的问题:function UselessFunction(){for($i<0;$i<10;$i++){},总是产生下列错误:Parse error:parse error,unexpected$
    排查过程及耗费时间:把整个函数检查了个遍,没发现错误,拼写也没有问题。折腾了大半小时后才发现……
    终错误原因:由于函数UselessFunction没有使用大括号(})来结束,PHP编译器会不断查找表示结束的大括号直至到达文件末尾为止。因为编译器未找到一个匹配的大括号,就会报告文件末尾处有错误。

    本帖最近评分记录
    • 七彩极 无忧币 +30 我也遇到过这种错误! 2017-7-6 19:41



    本帖最后由 pity 于 2017-7-6 17:02 编辑
    class ConfigFile
    {
      private $values = [];
      
      public function getValues() {
        return $this->values;
      }
    }
      
    $configfile = new ConfigFile();
    $configfile->getValues()['paramvalue'] = 'paramvalue';
    echo $config->getValues()['paramvalue'];

    遇到的问题:PHP Notice: Undefined index: paramvalue
    排查过程及耗费时间:检查了好久,在百度和老大的帮助下才解决。。。
    最终错误原因:混淆了返回值和返回引用。在PHP中,除非你显示的指定返回引用,否则对于数组PHP是值返回,也就是数组的拷贝。因此上面代码对返回数组赋值,实际是对拷贝数组进行赋值,非原数组赋值。
    本帖最近评分记录
    • 七彩极 无忧币 +20 感谢参与! 2017-7-6 23:29



    引用:
    原帖由 hlxxhl 于 2017-7-6 10:58 发表

    妹纸,你又上线了,我记得你不是HR嘛,怎么现在搞Java啦
    你猜对了,我不是HR哟。。。。



    引用:
    原帖由 爱情89757 于 2017-7-6 23:12 发表

    你猜对了,我不是HR哟。。。。
    早点睡吧妹子,早上起来变丑了就是罪过啊





    我爱你,如果肾够好的话,我希望是一万年!


    • 遇到的问题:单位网络不通。

    •     排查过程及耗费时间:
    • 第一个电话,是同一个办公室的兄弟打给我的,我让他去看看总出口那根网线是否接触良好,结论是没有问题,然后我就说等我半小时后回来再检查。
    • 第二个电话,是另一个办公室的同事打给我的,我让他用ping命令,检测出口网关是否能ping通,结论是能通,然后我就可以肯定我们的内网应该是没问题的,问题是电信的光纤问题。
    • 第三个电话,是办公室的领导打给我的,我告诉他我们的内网是好的,网络不通是电信的问题,我就99%的把握肯定。但我现在还在外面,还有十多分钟才回来得到。
    • 第四个电话,是同组的同事打给我的,当时电信维护人员已经赶到,但是我们单位的光纤专网是很多年前安装的,人员已经换了,他来了也是一头雾水,不知道找去***问题处理,况且他是处理普通家庭光猫问题的技术员,对于企业单位的光纤不了解。……此时,我已经回来了单位。
    • 第五个电话,是电信人员打给前任负责我们单位的技术员,他们电话沟通也说不清楚,最后把电话了我,告诉他我们的内网全部是通的,问题出在路由器连接外网上,我无法排查,现在单位情况紧急,急需用网,你最好马上来处理。(此时已经11点半左右了,本来他打算等下午2点上班时间再来的。)
    • 第六个电话,(经过刚赶来的技术员一阵排查后,都没发现问题)是这位技术员打给电信经理的电话,他问我们单位的专网网络是哪个机房人员在管,然后他又问管理电信机房的人员,终于才找到原因……
    • 耗费时间:从我接到第一个电话,到最后解决,两个小时。

    •     最终错误原因:电信经理发了个信件给电信机房管理员,让他把另外一个单位的网络停掉,但不知为什么,却停掉了我们单位的网络。(吐血!!!!)


    ————其实,在第二个技术员赶来我们单位之前,我已经猜到了应该是个很简单的原因,而不是光纤线路断了那么严重的事情。但是,我纯属个人猜测,没有太可靠的根据,也就随口跟我们单位的同事说的,没想到还真被我猜中了,当时我那同事瞪着我,惊讶得都不知道说什么了。。我也就呵呵,下班……

    本帖最近评分记录
    • 七彩极 无忧币 +100 感谢分享!真实奇葩的故障啊! ... 2017-7-9 10:52



    本帖最后由 烟云过眼 于 2017-7-9 11:09 编辑
    引用:
    原帖由 烟云过眼 于 2017-7-9 10:50 发表
  • 遇到的问题:单位网络不通。

  •     排查过程及耗费时间:
  • 第一个电话,是同一个办公室的兄弟打给我的,我让他去看看总出口那根网线是否接触良好,结论是没有问题,然后我就说等我半小时后回来再检查。
  • 第二个电话,是另 ...
  • 也遇到过,周六突然断网,重启所有设备然后好了,过了一周,周一那天早上,网又断了,从下到上排查了一个多小时,发现来源就没网,估计光纤收发器烧了,给电信客户经理打电话,半个小时后换完好了,真是RLG,出了问题永远以为是我们设备问题,基本很少想到运营商





    我爱你,如果肾够好的话,我希望是一万年!


    引用:
    原帖由 hlxxhl 于 2017-7-10 10:04 发表

    也遇到过,周六突然断网,重启所有设备然后好了,过了一周,周一那天早上,网又断了,从下到上排查了一个多小时,发现来源就没网,估计光纤收发器烧了,给电信客户经理打电话,半个小时后换完好了,真是RLG,出了问题永远以为是我们设备问题 ...
    只要一断网,我就ping出口网关,网关通了,我就可以断定是电信的问题了。。。十拿十稳。当前,还要排除乱接路由器导致网关冲突的可能,但这种可能性很小。



    新上任PHP版块版主,请大家来捧场哟~!点这里猛戳→51CTO-PHP
    引用:
    原帖由 七彩极 于 2017-7-10 16:58 发表

    只要一断网,我就ping出口网关,网关通了,我就可以断定是电信的问题了。。。十拿十稳。当前,还要排除乱接路由器导致网关冲突的可能,但这种可能性很小。 ...
    因为不确定是不是自己设备的原因,所以都查了一遍确定了才去找电信~~~





    我爱你,如果肾够好的话,我希望是一万年!


    ‹‹ 上一贴:对于新手学习PHP的规划建议   |   下一贴:PHP菜鸟们快来吧! ››
      发新话题
    快速回复主题
    关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
    Copyright©2005-2017 51CTO.COM
    本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com