Tag Archives: bug

写写程序.Code

Sablog-x 2.0 内测版无法打开中文tags的解决方法

Sablog-x 2.0 待开发和调整的地方还不少啊!时不时总会发现些小BUG!

问题发现:

点击我的tags 菅野洋子
链接是:
http://www.ihjin.cn/tag/%25E8%258F%2585%25E9%2587%258E%25E6%25B4%258B%25E5%25AD%2590/

这个是静态链接的地址,当静态地址启动之后,这个链接能够正常访问。

但是关闭了永久链接之后,系统生成的链接是
http://www.ihjin.cn/?action=tags&item=%25E8%258F%2585%25E9%2587%258E%25E6%25B4%258B%25E5%25AD%2590

系统提示不存在,查看了.htaccess里面规则,正确的应该是action=article
修改include/func/permalink.func.php里面的gettaglink()函数,把tags替换程article之后。英文和数字的tags可以正常打开,但是中文的tags就显示记录不存在!

仔细看了链接,发现,正常的编码应该是%AA这样类型的,为什么这里是%AAAA。于是对比了sax-1.6和2.0同一个tag的链接,好像是那个%25出的问题,%25不就是%的编码吗?确定是字符替换导致的问题。

问题成因

modulesarticle.php里面对tags使用了urlencode($tag),进行了第一次编码,随后调用gettaglink()函数。

打开includefuncpermalink.func.php文件,发现gettaglink()函数对调用进来的urlencode($tag)再次进行urlencode(),结果把%转换成了%25,导致了链接错误。

解决办法

  1. 打开includefuncpermalink.func.php,找到里面的gettaglink()函数,把其中action=tags替换程action=article,保存。
  2. 打开includefuncpermalink.func.php文件,找到gettaglink()函数中的两个urlencode($tag),将其替换为$tag,保存。这样无论静态地址还是动态地址,都正常了。

但是有个疑问,为什么静态地址不会受到影响?

想啥说啥.Chat

Sablog-x 2.0 发表文章主页无显示BUG

弄到了 Sablog-x 2.0了!

弄了几个小时才把数据库转移的工作做好!数据库改变了不少。

本来就是内测版的程序,打包也没有整理好,研究代码了好半天才让网站能够正常运行。

本地服务器上面是阿帕奇,可是虚拟主机上面是IIS,憋屈死我了,看源代码才发现后台无法关闭搜索引擎优化,又花了半个小时,把关闭rewrite功能加上了,现在,先放上来过瘾,再想办法换个主机吧!

发现了两个小BUG,附上自己的解决方法。

第一,文章描述里面有问题,我在后台代码里面加上了,当文章描述是<p></p>时,令description字段为空的代码才让主页正常现实。

把adminarticle.php里面的两行

  1. $description  = sax_addslashes($_POST["description"]);

替换成

  1. if($_POST["description"] != “<p></p>”)
  2. $description  = sax_addslashes($_POST["description"]);
  3.  else $description = “”;

第二,就是无法关闭搜索引擎优化,还是自己写代码,改了一段地方

  1. $rules[$query_token] = “index.php?action=show&”.$queries[$num_tokens-1].”&page=$”.($i+1);
  2. }}}
  3. $DB->query("REPLACE INTO {$db_prefix}settings VALUES (“permalink_rules”, “".sax_addslashes(serialize($rules))."”)");
  4. $permalink = intval($_POST["permalink"]);
  5. if ($permalink) {
  6. $DB->query("REPLACE INTO {$db_prefix}settings VALUES (“permalink”, “1″)");
  7. } else {
  8. $DB->query("REPLACE INTO {$db_prefix}settings VALUES (“permalink”, “1″)");
  9. }}    

替换成

  1. $rules[$query_token] = “index.php?action=show&”.$queries[$num_tokens-1].”&page=$”.($i+1);
  2. }}
  3. $DB->query("REPLACE INTO {$db_prefix}settings VALUES (“permalink”, “1″)");
  4. }
  5. else {
  6. $DB->query("REPLACE INTO {$db_prefix}settings VALUES (“permalink”, “0″)");
  7. }
  8. $DB->query("REPLACE INTO {$db_prefix}settings VALUES (“permalink_rules”, “".sax_addslashes(serialize($rules))."”)");
  9. }

 

 

想啥说啥.Chat

Y2038 bug-又一个千年虫?

3月17日消息,据国外媒体报道,日前有业内人士指出,国际互联网将于30年后遭遇“千年虫”式问题,并可能导致网络崩溃。该问题被称为“2038 Bug”,与2000年的“千年虫”问题类似。到2038年,Unix系统时间所使用的32位整数将溢出。届时,时间可能以负数形式出现。当然,和千年虫一样,所有程序都将出现问题。因为程序所能够识别的时间将变为1901年,而不是2038年。尽管“千年虫”问题并未给全球带来太大的灾难,但“2038 Bug”问题仍不容忽视。因为2006年的AOL Web服务器崩溃就是最好的证明。

什么是Y2038 bug

Time_t 是C/C++ 等编程语言在内部代表/存储日期和时间的一种数据类型。Time_t实际上是一个代表秒数的整数,当它的值为0时,代表的时间是1970年1月1日12: 00:00;当Time_t=60时,则表示1970年1月1日12:01:00,依此类推。

所有32位电脑系统都用带符号32位整型来存储time_t的值,也就是说t_time只能用31位二进制数来表示(第一位用来表示正负号),而其最大值转换为十进制是2147483647,换算成日期和时间刚好是2038年1月19日03:14:07am(GMT),而这一秒过后,t_time的值将变成-2147483648,代表的是 1901年12月13日8:45:52pm,这样32位软硬件系统的日期时间显示就都乱套了。另外,无法接受time_t为负值的其他功能也将返回错误。
举个实际的例子来说,登陆上Yahoo messenger,给好友发个消息,恩没问题,现在把系统时间更改为2038年1月19日03:14:07am,此时如果再发消息Yahoo messenger就将崩溃。

还有一些病毒就利用这个漏洞,记得还说过病毒把系统时间调节到2038年以后,很多杀毒软件都会崩溃……

不过30年后,大家应该都用64位机器了吧!