解决了一个 EWEBEDITOR问题

十一天没有写博客了~~先来和大家打个招呼! #taoqi#

这些天过得还好,天气暖和了,心情也不错.就是没能来写博客,比较遗憾~

自从博客开通几天之后,有朋友说不希望我的博客成为我的备课本,不希望我写太多技术方面的文章.所以就一直没有写,把几个有关技术的分类都删除了#yumen#..今天给SSF修改后台程序,遇到一个问题,憋了足足一下午,最后终于解决了,心情愉快,赶紧上来写下来,记在这里,怕以后忘了,也可以给遇到同类问题的朋友作为参考.

问题描述:
EWEBEDITOR在线编辑器,在部分服务器上使用文件上传功能时提示"d_file.myform.uploadfile 为空或不是对象"
问题原因:
经BAIDU反复搜索和试验,认为由于服务器安装了反病毒或反木马工具,对ASP程序中的server.createobject("abodb.stream")语句进行了屏蔽.由于这个语句无法直接执行,因此导致出现上述问题.(主要是屏蔽了主目录下的Upload.asp,另外include/upload_class.asp中也有几处.upload.asp中的一处最为重要)。
解决办法:
由于杀病毒软件只是对代码进行字符串匹配,并不直接阻止adodb.stream对象的创建,因此考虑可以通过简单地改变字符串结构来绕过检查.
server.createobject("adodb." & "stream")
网上很多资料都提供了这个修改方法,不过经过测试,此法无效.估计是新版本的杀病毒软件对该语句进行了模糊匹配或正则表达式匹配,因此无法通过简单的截断字符串再连接起来的方法绕过.于是修改成以下更为复杂的语句:
strnqp="ado"
strnqp=strnqp&"db."
strnqp=strnqp&"strea"
strnqp=strnqp&"m"
Set Ads = Server.CreateObject(strnqp)
此时测试,一切正常!
看来,新版本的杀毒软件已经"聪明"多了,不会被雕虫小技欺骗.不过机器毕竟是机器,只要没有禁止adodb.stream组件的使用,总有办法可以从杀毒软件眼皮底下蒙混过关.#shetou#
以上是解决经过,和搞ASP的朋友们交流.

修正了所有时区问题~~BLOG改造工作隆重结束^_^

累得腰酸背疼脚抽筋,终于完全修正了因为时区问题导致的延迟8小时问题~!
从index.php找到 get_atest_entry() 函数,然后再 scripts/sb_display.php中找到此函数,修整了与此函数有关的time()问题,修正之后,问题排除~~~ #taoqi#

到目前为止,可以说这个blog的修改工作基本结束啦~今天下午就上传到服务器上去~!
不要忘了解析一个二级域名~~就叫http://blog.17php.com吧~

虽然很累,心里确实很高兴哦 #xiyue#

终于发现了时间相差8小时的问题所在~

$curr_time=time();
if(date("T",$curr_time)!="中国标准时间"){
$curr_time+=8*60*60;
}
$default_time = isset( $default_time )?$default_time : $curr_time;
这几行代码就是今天最大的收获了。
从中午一直到现在,都在研究为什么发表新条目的页面add.php中显示的时间不正常的问题。经过再三查找,在scripts/sb_texteditor.php中找到了两处问题,上面的代码列举的是函数editor_date_select()中的一处,该文件中还有一处time()问题引发的错误。
错误原因: time()函数在部分服务器上运行取得时间不一致。
个人分析:不同的服务器,可能时间时区设置不同,尤其是使用中文操作系统的外国产服务器。
经过试验发现,在不同的机器上,time()函数返回不同的值,在我的机器和服务器上,返回的值总是比标准中国时间少8小时。也就是说,从服务器获得的时间是英国标准时间(国际标准时间UTC),而自己机器上显示的是标准中国时间,因此两者之间相差8小时。
使用上面的程序,判断如果取得的不是中国标准时间,则将时间+8小时。

注意:以上修改仅针对中国境内中文服务器使用者。

估计,显示归档和首页最新发布的内容无法立即显示也是这个原因,需要找找相关函数进行修改。等修改完这个地方,就真的完成啦~或者说,终于完成啦~

整个BLOG只剩下最后一个问题

整个BLOG,现在就剩下最后一个问题:
问题描述: 刚刚发出的内容,在非登陆状态下无法察看。
不知道这个问题是开发者故意的,还是程序的bug。

经过仔细排查后发现,只有采用12小时制时,会出现上述问题。
当采用24小时制后问题消失。
由此可见,原来的程序还是有BUG,在12小时制情况下,对当前时间处理错误。由于这部分内容相当复杂,因此不打算马上解决,有空再好好研究研究,现在就采用24小时制。

add.php和priview_cig.php中对时间的显示,存在问题。大概也是基于以上原因。
今天设法解决此问题。

12日凌晨2点20分,终于可以睡觉了~~

12日凌晨2点20分,终于可以睡觉了~~~!
又花了这么长时间来处理中文乱码和首页右侧显示问题。最终算是解决了。
中文乱码的问题解决的不算好。虽然已经写了中文字符截取函数,但是在UFT-8环境下,运行效果很不理想,由于对UFT-8还是缺乏深入研究,因此字符串截取仍然存在问题。这个问题放到以后慢慢解决吧~
对了,右侧显示的归档中的文章缩略,是在sripts/sb_menu.php中的read_menus_tree()函数中设置。显示条数也是在此处。找到这个函数又花了我巨大的精力。从Index.php到themes/default/theme.php到scripts/sb_functions.php到scripts/sb_theme.php最后到sb_menu.php,才找到这个函数。
这个函数也是比较的深奥,没能完全研究透彻,不过已经做到了限制条数显示。方法是在循环体控制语句中,将原来的count($entry_arry)变成一个$showcount变量,$showcount()的值自己指定。这样做导致了archives.php的显示异常,因此在Index.php中又加入了$limitshow标志变量,用来控制需要限制显示的页面。
目前通过初步测试来看,情况正常。

真是不容易,目前为止,已经基本上可以说,这个BLOG已经初步修改完成了~
也许,明天就发布到服务器上去~
凌晨2点半了,看来确实该睡觉了,坐都坐不住了,浑身酸痛!

累死了,累死我啦~~计数器程序终于做好了!!

就为了搞这个计数器程序,腰都累弯啦~~
LP已经睡了2个多小时,偶还坐在这马扎上,噼噼叭叭敲键盘。

效果还算理想吧~
整个计数器采用纯文本文件操作,不需要任何数据库支持。
可以显示今日访问、总访问量和开始时间。
本来想再加上月访问量、周访问量,但是现在实在直不起腰了,不想写了。
另外,还想实现图片计数器,其实简单得很,写一个函数就搞定了,不过我这个blog不需要图片计数器,还是留在明天写一个,放在论坛上吧~!

本来写一个计数器不是很困难的事,关键是如何放进这个blog里面。。这个blog虽然没有采用模版,但是采用了极其多的包含文件和自定义函数,集成性非常高。。。为了找到在什么地方输出的页脚,搞得我头都大了,用了不下3个小时,来逐一查找一个函数,最后在themes/default/theme.php中找到了。。。 #yumen# 汗啊。。找到之后,由于这个函数本身被index.php所包含,又加上我写的计数器函数本身是一个函数,于是变成了函数的嵌套。
经研究发现,函数的嵌套中,里一层函数中使用global关键字来引入外层函数的全局变量,是失败的。。。这个问题困扰我将近2个小时,直到我吃了饭,有了精神之后才想出解决的办法。。。

总之,计数器是搞出来了~~心情还是很高兴。
明天,把计数器程序整理一下,放到论坛上提供下载~~~呵呵,我觉得这是文本计数器中非常优秀的了~~~^_^

突然想起来该弄个计数器。

今天突然想起,该弄个计数器。
这个BLOG的阅读计数,有问题。只有当别人评论了之后,访问次数才被记录。如果没有评论过,不论点击多少次,计数都是零。估计这也是人家外国人的习惯,也不想去解决这个问题了,本身就无所谓。
但是网站总访问量的计数,还是要有的。打算在网站的最下面,加个总访问量和今日访问量的计数。这个BLOG是纯文本BLOG,不需要数据库,因此计数器我也不打算使用数据库——虽然这样比较简单。我也搞一个文本计数器 #xiyue#
说干就干~~BEGIN!

设计了一个BLOG的HEAD图片

这句话真别扭:BLOG的HEAD图片。。
不过实在想不出怎么写更合适,图片的名字本身就叫head***.jpg

下午下班回来,就一头扎进卧室,开电脑,做BLOG。
首先打算做一个BLOG的头图片。开PHOTOSHOP,把以前的照片拿出来,找阿找,终于找到一张好看的,取一个人头出来,加上几个字,一个head图片做好了。
作了两个版本,一个是整个的头,一个是半边脸。
孩子都是自己的好,看了半天也不知道哪一张更好,于是让LP看,LP看了看,说,露半边脸的好,有深度 #xiyue# 于是就用了这张。

接下来,就是解决中文字符截取的问题。
BLOG右侧,中文字符截取出现乱码,这也难怪,BLOG是人家外国人写的,怎么会给你考虑得这么周到,还是自己动手吧~~~希望今天晚上能够把这个问题解决~~ #taoqi#

修正了本程序一个严重的Mistake!~好高兴~

#xiyue#
整整一下午的时间,从2点到5点,我都在苦苦查找!现在终于解决了~~
本程序安装之后,有一个很大的Mistake,(这个地方叫Error不合适,Bug也不合适,想了半天,叫Mistake吧)。整个错误如下:
论坛安装之后,无法修改发布的条目,也就是说无法修改内容。
修改界面可以出来,修改之后预览也没有问题,但是点击“发布”之后程序返回Index.php,修改没有成功。

经过仔细察看,发现content目录下的内容并没有被修改,可见修改程序运行错误。然后发现在根目录下产生了一个与被修改的文件名字相同的文件。打开这个文件察看,原来修改了这个文件!!修改之后的内容,写在了根目录下,并没有覆盖掉原来的文件。
因此考虑是修改时没有考虑到路径。
按照这个思路,从add.php开始,到add_cgi.php到script/sb_functions.php再到sb_entry.php。。。逐行检查,整整一下午,才找到出错地点:
sb_entry.php 行 89
——————————————
if ( $updateFile == true ) {
// Updating an entry
//We need to grab the date of the old entry.
//问题在这里.(省略骂人语句),无法实现修改文章。
//错误的原因是,write_entry()函数传递过来的参数$updateFile变量中没有包含文件的路径。只有文件名。因此无法实现更新。
//解决的思路是,根据文件名,研究出其存放目录,将错误修正。代码如下:
$dir1=substr($updateFile,-13,2);
$dir2=substr($updateFile,-11,2);
$updateFile='content'.$dir1.''.$dir2.''.$updateFile;
这样修改之后,程序运行正常,修改功能实现!!~~#shetou#

真不知道大名鼎鼎的赫然放在网上提供下载的Simple PHP Blog有如此明显且重大的错误
不知道其他下载使用此程序的人是否发现了此问题。
想上他们的官方网站去报告这个错误,但是E文网站是在费尽,找了半天找不到留言的地方,只好拉倒了,发在论坛上大家自己学习吧~~

rznqp@163.com 一起PHP站长 2006年3月