Blog V2.0.0发布

[| 2011/02/27 14:41]
查看了下之前的升级编号,发现之前版本号升级过快,所以改动一下,之前的1.0,2.0分别对应1.1和1.2,依次类推,本次更新博客升级为2.0.0版。
最近一段时间博客版本升级不多,一方面是在做别的东西,另一方面是刚开始自己搞的框架实在是扩展性很弱,于是决定将博客在Codeigniter框架下重写。本次更新内容如下:

1,博客主程序重写,采用Codeigniter2.0作为框架。
2,写了一个php扩展:botfilter,增加函数sn_check_bot(),用来检查来访者是否为蜘蛛,对于蜘蛛的抓取不再计入访问量。
3,页面左栏访问量处增加“今日访问量”栏。
4,重写博客日志记录模块,之前blog日志与webserver日志重复,现改为只记录博客运行过程中信息。
5,优化数据库操作。
6,SEO优化,减少页面不相关重复文字。
7,其他bug修正和优化。

本次调整博客外观变化不大,主要是整体重写和一些优化以及修正。
昨天在从nginx1.7.2升级2.0的过程中发生了一个问题,不管url是什么,都会直接调用default_controller。经排查,问题发生在system/core/URI.php里面,在65行开始的一段代码里,是为CLI方式运行CI写的一段代码,在这里,程序被判断成CLI模式运行,然后试图获取_parse_cli_args,为空,于是调用default_controller。

我使用的webserver是nginx,在配置文件里用urlrewrite去掉了index.php,CI配置文件中的uri_protocol使用的AUTO。

CI2.0中判断是否为CLI方式运行的方法是判断$_SERVER['argv']是否为空,不为空就是CLI,为空就不是。我查php手册,上面是这样说的:When the script is run on the command line, this gives C-style access to the command line parameters. When called via the GET method, this will contain the query string. 也就是说$_SERVER['argv']不为空的时候还有一种可能,就是GET方式访问网页,那么该元素中的数据就是query string。也就是说CI2.0默认认为不能使用传统的query string方式,否则会导致误判为CLI。

然后继续分析,在nginx中rewrite的规则是********/index.php?$1,注意,用的是问号而不是斜杠,这是nginx的问题,假如用斜杠的话nginx会试图寻找index.php文件夹下的目标文件,会导致404。也就是说比我我请求的是http:/*****/clock,在ci那变成了http:/*****/index.php?clock,所以在判断时$_SERVER['argv']为clock,于是被判断成CLI,而在_parse_cli_args中,又是从$_SERVER['argv']数组的第二个元素开始取,clock作为第一个元素没有被取到,自然_parse_cli_args取到的是空,导致调用了默认控制器。

综上,有两种修正方法,方法1是暂时注释掉URI.php中判断CLI的那一段,方法2是更改config.php中的uri_protocol为QUERY_STRING。当然还有一种方法是修改nginx的rewrite规则,不使用问号,不过这个我不知道怎么改。
资料网址:http://blog.csdn.net/mwq1984/archive/2010/03/20/5399539.aspx

解决方法:删除/etc/udev/rules.d/70-persistent-net.rules,重启机器即可。原因是mac地址冲突。
我用vmware虚拟了一个ubuntu当做开发服务器,没有安装图形界面,平时都是命令行。不过之前由于在上面做过framebuffer的开发,grub引导的时候里面有vga=788字样,也就是800*600*16分辨率。

今天vmware提醒我vmtool有新版本了,决定升级一下,结果升级后重启时就黑屏了,在grub引导项里修改引导参数,去掉vga=788改用文本模式启动,可以正常显示,不过分辨率字体什么的就都没有了。不知为何出现此问题。暂且记下。
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]