二次开发的一些经验之谈

2021-07-28 0 4,720

如果您想从此贴直接获得一些有用的插件、模块、或代码,请绕道~~

“授人以鱼”还是“授人以渔”,此贴是后者,希望对你有所帮助……

* 提示:如果你是PHP编程有比较深入经验了,请只读红字内容即可,其它跳过。

        如果你是PHP初学者,请仔细阅读所有文字,别嫌繁琐,对你提高有好处!





1、执行header()前输出的空格、空行、任何字符,都会导致header()跳转失效!

   前几天,帮一个客户做了一些修改,把代码发给对方之后,对方后来反映说“后台栏目查看文章列表不行了”,我去查看果真如此,点击了栏目后面的“内容”进去,一片空白!这一点我当时百思不得其解,因为我做修改的代码,和这个功能完全没有关系!于是不得已,只好一步步做跟踪调试:

     首先要排查的是语法错误(如果当php.ini里设置是不显示任何错误的话,语法错也会导致一片空白),这个文件是dede/catalog_do.php(怎么知道是这个文件呢,很简单,在那个一片空白的页面上,点右键,看属性,就有地址URL和传递的参数),我把一行die("aa"); 放在了代码第一行,这个做法就可以测试有无语法,因为语法错不单可以发生在catalog_do.php文件本身,还可以发生在 catalog_do.php文件所引用的文件里(包括这些文件里再引用的任何一级文件里),所以如果这个第一行die("aa"); 也不能执行,就必然是语法错。因为能输出aa,也就是说语法没有错,就必定是某种程序上的逻辑错。

      然后进一步寻找逻辑错误发生的文件,这就需要跟踪代码的所执行到的地方,由于没有任何提示,也还是利用die("aa"); ,把这一行往下挪到catalog_do.php文件的include、require等语句之后,如果不能执行,说明在include、require 所引用的文件里,代码执行就停止了,反之说明那些文件执行是正常的。这一步,依然能显示aa,说明错误是发生在catalog_do.php文件里(如果是发生在其他所引用的文件里,就用此法打开那些文件去如是调试)

      然后再此文件里一步步寻找发生错误的具体代码段,首先要看链接此文件时候的参数(在那个一片空白的页面上,点右键,看属性,就有地址URL和传递的参数),而点击“内容”时链接此文件的URL为 catalog_do.php?cid=3&dopost=listArchives(它的意思,我们可以猜测它cid是栏目ID,而最重要的是 dopost=listArchives这个参数,因为我们在catalog_do.php文件里,可以看到接下来的代码,就是一连串的if (dopost=="…."){   }else if(dopost=="…."){  }else…..的判断,它就是让程序运行,根据过来的dopost=参数的不同,进入不同的处理),好,我们就直接找到if (dopost=="listArchives"){ 这里,把die("aa"); 放到紧接着它的第一行,看看还能否输出aa,如果可以输出,说明程序正确进入了目标程序段,否则就说明dopost=="listArchives"这个判断没有达到预期的效果(如果是这个情况,你就要好好对照刚才的URL和这个dopost=="listArchives",有没有写错参数名、大小写有没有弄错了,还有就是dopost值有没有在前面就被改变了,最常见的错就是类似写成了dopost=="listarchives",或者在前头某个判断里写成了dopost="…"),好,依然能输出aa,说明程序也进来这里了。

       然后继续寻找发生错误的代码行,继续挪动die("aa"); 的玉步,每次挪动完,刷新那个空白页面,看看能否输出aa(这里有技巧,想快,就不要逐行挪动,而是利用折半查找,或者在关键代码前后插入,这个就需要比较强的代码阅读能力和一定的编程经验了,不展开了),最后,我发现在header("location:{$gurl}?channelid= {$channelid}&cid={$cid}"); 这一行之前能输出aa,这一行之后也能输出aa,而我是很清楚,这一行本该跳转到某个指定的页面上的,后面不应该输出aa,同时我也知道造成这个问题,通常是因为程序执行在之前就输出过字符(如果你不清楚,就查google或手册)!

       接下来的工作,就是找哪个文件有这个输出了,天啊,这太难找了!于是我换了另外一个做法“修改排查法”,我在本地把我那些修改的代码,也换上去,发现没有出现这样的问题,也就是说,我写的文件没有问题。然后我把客户所有文件,都列出来,按修改时间排序,并询问了客户最后可以正常使用这个功能的时间,发现了一堆在此时间之后修改的php文件,除去我修改的那些文件,就剩下两个文件了,其中一个是include/extend.func.php文件,我很清楚这个文件是一个dede提供给客户做函数扩展的文件,它被 common.func.php所引用,而common.func.php又是被全站所有文件所引用的文件!  于是我打开这个文件,赫然在最后?>之后,有两个空格一个空行!!!!!!

       把这些空格空行删除,至此功能就全部正常了(包括我在模块表里自定义了一个模块链接,它在这个错误的情况下,不能显示在模块列表里,现在也正常了)!

     以上文字,对于初级PHPer,可以学习领会一点点PHP调试技术;对于PHP已经比较熟的,而对DEDE还有有点陌生的,这里提供的一条经验就是:修改DEDE的所有PHP文件,千万不要在头尾两行的 <?  ?>之外,写入任何字符,包括空格和空行!!

收藏 (0) 打赏

您的支持是我们前进最大的动力!

打开微信扫一扫,即可进行扫码打赏哦
点赞 (0)

本站声明: 根据2013年1月30日《计算机软件保护条例》2次修订第17条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬,鉴于此,也希望大家遵守相关法律法规使用、研究软件。 1、本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解。 2、下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。 3、站内资源均来源于网络公开发表文件或网友投稿发布,如侵犯您的权益,请联系管理员处理。 4、本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用,如有链接无法下载、失效或广告,请联系客服处理。 5、所有资源均收集于互联网仅供学习、参考和研究,请理解这个概念,所以不能保证每个细节都符合你的需求,也可能存在未知的BUG与瑕疵,因本站资源均为可复制品,所 以不支持任何理由的退款兑现,请熟知后再下载。

彤彤模板团 织梦CMS教程 二次开发的一些经验之谈 https://www.xiaoyuerqingfen.cn/3927.html

一家有态度的精品资源分享平台

常见问题
  • 模板团承诺演示效果图均和网站95%一样,并且我们的模板和数据都没有留后门,请放心使用。
查看详情
  • 因为模板具有可复制性和可传播性,模板一旦发货,非质量问题,不支持退换;所以务必请您一定看清楚后再购买。
查看详情

相关文章

评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

  • 0 +

    访问总数

  • 0 +

    会员总数

  • 0 +

    资源总数

  • 0 +

    今日发布

  • 0 +

    本周发布

  • 0 +

    运行天数

开通会员,尊享海量资源下载特权