在线客服与您一对一交流
当前位置: 主页 > 行业新闻 > IT技术 >

DEDE二次开发的一些经验

* 提示:如果你是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文件,千万不要在头尾两行的 <?  ?>之外,写入任何字符,包括空格和空行!!

西安剑锋网络-西北地区的网站建站专家!

相关文章:

  • ★★★☆☆☆███剑锋所指_所向披靡███☆☆☆★★★西安剑锋网络隶属于西安蟠龙网络科技有限公司,主要提供网站建设、竞价托管、新闻稿发布、新闻稿代写等网络营销服务!【剑锋...

  • 无论是企业网站还是个人网站或者行业网站在运营一段时间以后,在使用过程中就会有一些新的想法或者发现一些问题,这个时候我们就会想到要把网站进度调整,所以建设了网站都有改版的...

  • 企业的目的就是营销,纵观现在的网站市场,营销型网站已经占据了多数地盘。那么,对于营销型网站来说,怎么设计才能够给企业带来更大的效益呢? 第一、营销型网站要注意页面的美观性...

  • 企业从传统实体店到网站的转化,从建站到优化,无论是哪一方面,最终都是想通过网站来树立企业形象,提升品牌价值。而想要达到这个目的,究其根本可就是要抓推广。 第一、选择平台很...

  • 百度竞价推广关键词分组是竞价单元的知识点,但是西安剑锋网络认为是什么知识点并不重要,重要的是我们是否将这些关键词展示到想要的排名,并且减少点击费用。 对于竞价推广关键词从...

  • 百度竞价推广不分析数据那就是在玩闹!一个有效的SEMer必须要懂得去分析数据,这样你才能了解你所投资的每一分钱花哪里去了,怎样才能带来有效咨询,用更少的成本赚回更多的钱。 目前,...

  • 国内虚拟主机商一般一个主机只提供1个域名绑定,而不支持多个子域名。这时候我们可以自己通过.htaccess文件设置重定向,把二级域名绑定到指定的子目录。 先把要绑定的域名A记录或CNAME也指...

  • 百度竞价推广的转化不好,花了高消费却带来无效点击是很多竞价企业的痛点,付出了却没有回报,不是平台不好,而行执行力度不够。下面,西安剑锋网络分析竞价推广转化少效果差的原因...

  • 竞价推广关键词的选取和投放于竞价费用、效果息息相关。在搜索引擎竞价推广的过程中,关键词的选取与投放是基础,也是关键,只有这层基础有了,才能有展示广告、引进流量、咨询等后...

  • 将代码放到模板中。 {php print_r(get_defined_vars());} 要查看这个地址的模版。http://www.wuzhicms.com/item-34-2-1.html 首先,我们的这个地址需要是动态的。而不是生成的静态地址。 打开文件: /www/configs...

  • 公司:西安蟠龙网络科技有限公司
  • 联系人:张经理
  • 手机/微信:
  • Q Q: 点击这里给我发消息
  • 地址:西安市雁塔区唐延南路11号逸翠园i都会