二次开发的一些经验之谈

如果您想从此贴直接获得一些有用的插件、模块、或代码,请绕道~~
“授人以鱼”还是“授人以渔”,此贴是后者,希望对你有所帮助……
* 提示:如果你是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文件,千万不要在头尾两行的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读483次。dedecms织梦频道模板中调用栏目分类并排序:{dede:channelartlist}栏目排序:{dede:global runphp='yes' name=itemindex}@me;{/dede:global}<a href=”{dede:field name='typeurl' /}”>点击进入{dede:field name='typename' /}列表>></a>{/dede:channelartlist}织梦channel标签.._织梦 调取排序
文章浏览阅读284次。我们在用织梦建站的过程中,难免会遇到各种问题,有时候由于主机或者服务器无法支持某些函数或者不够稳定等,需要更换空间或服务器。这个时候我们如何完整地把织梦网站数据转移到新的空间或者服务器上,这是织梦站长必须掌握的技能之一。当然,网站搬家来说,方法是很多的,但是万变不离其宗,说到底就是程序文件和数据文件的备份转移。织梦DedeCMS网站转移主机或者服务器时最常见的转移方式,来说明一下网站搬家的过程。首先是织梦DedeCMS网站程序的数据库备份,方法是进入织梦Dedecms的后台,系统–> 数据库备_dede后台转主机需要修改哪些哪些东西
文章浏览阅读152次。seo专题是seo优化必不可少的一环,对于网站优化的意义重大,因为一些用内容页做不上去的关键词都可以尝试用专题形式来做。相对于一般性的网页来说,专题页面具有内容丰富性、多样性、用户体验好的特征,百度官方也在最近说了专题优化的好处。但是,专题对seo是好的,但是对于做专题的人来说却并不好做,因为他非常的繁琐和耗费功夫。从原理来说,一般性的网页(栏目、内容页)都是通过统一的模板进行映射的网页,这些网页的构成都非常的简单,虽然有些可以利用内容模型和自定义列表进行参数提取,这样让内容非常的丰富,但是这个丰富_织梦专题
文章浏览阅读142次。在Dedecms中,在列表页调用文章摘要的方法主要有:1:[field:info /]2:[field:description /]3:[field:info function="cn_substr(@me,字符数)"/]4:[field:description function="cn_substr(@me,字符数)"/]第1、2种方法是直接调用文章摘要,在调用的字数问题上,当使用[field:info /]时,可以在{dede:arclist infolen=' ' }{/dede:arcli_dede 内容摘要 字数
文章浏览阅读234次。织梦DedeCMS文章内容发布时可以选择“头条”、“推荐”、“特荐”等文档属性,我们可以利用这些条件加一个判断的标签,然后给文章列表加一个推荐的印戳图标,这样大大提高了页面的友好程度。文字推荐方法:[field:flag runphp='yes'] if(stristr(@me,"c")) @me = "[推荐]";else @me = '';[/field:flag][field:flag runphp='yes'] if(stristr(@me,"a")) @me = "[特荐]";else _dede 列表页 调用推荐文章
文章浏览阅读701次。虽然织梦DedeCMS因为安全问题被人所诟病,但瑕不掩瑜,无论从用户群数量还是时间等各方面,织梦DedeCMS都是国内排名前几的CMS建站程序。如果你想学习CMS的二次开发,织梦DedeCMS是必须需要研究的。对织梦DedeCMS的二次开发来说,了解织梦的目录构成、文件、函数则是必备的功课。今天整理一篇关于Dedecms目录介绍的文章,对织梦DedeCMS的目录结构、核心文件、模板文件等做一个简单的介绍。为使版面美观,就借用下php程序的注释,//符合后面为该文件的作用。由于版本的原因,有一_织梦默认模板目录
文章浏览阅读375次。dede是目前cms中使用最广泛的,也是中小网站中seo优化最好的(默认模板而言),所以很多的企业都会选择采用dede作为做站的首选,因此学seo了解些织梦seo优化的技巧和方面是有必要的。焦大曾经做过多年的织梦seo优化,以个人经验所知,觉得以下几个方面的seo最为重要:第一,url设置与栏目分开。我们看到目前90%以上的dede建站者的文章url都是类似域名/栏目名/文章ID,或者域名/a/日期/栏目/文章ID,其中第一种在企业站最常见,第二种在新闻资讯网站中常见。个人觉得这么设置会出._dede seo
文章浏览阅读189次。dedecms的arclist循环中,判断如果是第一个li,则添加固定的css,否则不加写法如下: 1 2 3 4 {dede:arclist row=4 flag='p'} <li [field:global name=autoindex runphp="yes"](@me==1)? @me="class=on":@me="";[/field:global]>[field:global.autoindex/]<.._dedecms arclist
文章浏览阅读227次。字段要想在任何位置任何模版中调用,需要特殊设置。自定义字段自定义的织梦如何添加自定义字段的频道模型,这里以图片集频道举例注意:创建字段可以在列表的底层模板中获得”这个必须勾选在字段中添加(价格属性)在基本设置里》列表附加调用)二,调用自定义调用{dede:list pagesize='5' addfields='jiage' channelid='2'}<P>标题:[field:title/]</P><P>价格:[field:jiage/]&_织梦列表调用自定义字段
本教程操作系统:Windows10系统、DedeCMS 5.7.109版本、Dell G3电脑。 织梦CMS是一个使用PHP语言开发的网站建设管理系统,因此在安装过程中需要安装数据库以存储网站内容和数据。
在Dedecms织梦列表页中是肯定要使用pagelist标签的,但是有的时候也会因为一些css格式的问题会出现排列顺序的问题,所以也要知道怎么样修改pagelist标签?
今天分享织梦网站怎么搬家,个人感觉织梦的搬家比其他的程序的都简单。1、网站备份登录织梦后台,【系统】-【数据库备份/还原】-【提交】,织梦程序开始自动备份数据库,等待即可。
织梦(dede)程序不安全是公认的,同样是建站,使用织梦程序被黑的风险更大,所以,一些安全设置是非常有必要的。织梦网站安全设置的4个主要操作
使用xemu、爱站工具包、尖叫青蛙等制作网站地图,每次生成sitemap还需要再上传到服务器,还是比较麻烦的,不过有些网站程序可以通过插件完成网站地图的自动更新,比如wordpress。但是织梦一直都不行,今天就用插件+代
分享织梦自动生成网站sitemap,但是需要安装插件,今天分享,织梦如何不使用插件,制作网站xml地图。
织梦自定义表单没有全选/取消全选功能,有时候想要全选全,需要一个一个选择比较麻烦,如果网站有大量的恶意留言,想要删除更麻烦。虽然可以使用sql命令删除恶意留言,但不是很灵活,今天就给织梦自定义表单添加全选
前几天百度公开课说了,api推送的优先级比较高,所以在没有快速收录的情况下,api提交必须要有,那么织梦要如何实现api主动推送呢?
dede定时主动推送,虽然也很方便,但只能固定时间推送,实时性不高,今天小编分享如何发布文章后实时api推送至百度?
dede当前位置标签代码方法一:{dede:fieldname='position'/}dede当前位置标签代码方法二:{dede:fieldname='position'runphp='yes'}$a=mb_strlen(@me);//计算字符串的长度@me=cn_substr(@me,$a-2,-1);//截取字符{/dede:field}(这是去掉“去掉>”得得方法)dede当前位置
织梦DEDECMS文章、栏目页获取当前页面顶级栏目名称的方法在用织梦做一些项目时,时常会碰到需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:fieldname='typename'/}可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名称。下面拓展出一个方法来实现这个效果: 方