正在查看: 标记有标签 codeigniter 的文章(第 1 页 / 共 4 篇)

Hello, Stblog

时间过的真快,来墨尔本已经一年多了,而距离我写的上一篇日志也有半年多了。这段时间感悟很多,有一堆东西想写下来,不过还是手懒了。

目前你所看到的这段文字,来自我和CI中国其他几位成员目前正在开发的基于Codeigniter (PHP MVC框架)开发的一套博客程序——Stblog,目前的最新版为 v0.1.2。写这套程序的原因,我写在了这里,就不转载过来了。

正在学习PHP和Codeigniter的朋友,我推荐你们下载和试用这套程序,但目前暂不推荐使用在真实的环境当中,因为它有诸多地方需要完善。待程序和相关文档成熟之后,在使用也不迟。

Stblog开发相关动态:

项目主页:http://code.google.com/p/stblog/

程序下载:http://code.google.com/p/stblog/downloads/list

Bug提交:http://code.google.com/p/stblog/issues/list

安装方法/插件/主题开发教程:http://code.google.com/p/stblog/w/list

注意:STBlog的协作开发和版本控制工具为Git (没有使用SVN),目前被托管在Github.com。请移步 http://github.com/stblog/Stblog  了解最新开发动态,以及checkout最新开发版本。

CodeIgniter上传类库的一个Bug

这几天重构博客程序的时候,发现了一个CodeIgniter默认上传类的BUG。很奇怪的是,一直到前些天CI官方最新发布的1.7.2,此BUG仍未修正,特此记录。

症状:只能上传图片后缀的文件,其他类型文件(比如.zip,.tar.gz)无法通过验证,就算你将这些类型添加进了$config['allowed_types']。

涉及到的CodeIgniter版本:1.7.1;1.7.2。

原因:Upload Class中的is_allowed_filetype()方法有逻辑错误。

解决方案

1、如果你不想动CI的系统源码,那么就将除图片类型之外的其他后缀,放到图片类型之前,比如:

$config['allowed_types'] = 'zip|gz|png|gif|jpg';(正确)

$config['allowed_types'] = 'png|gif|jpg|zip|gz';(错误)

请注意以上暗红色部分的位置。

2、对Upload.php开刀并修改is_allowed_filetype()的判断逻辑,解决办法在这个帖子里面:

http://codeigniter.com/forums/viewthread/113029/

这个BUG在BUG Tracker存在了那么久,开发者竟然不采纳的……What can I say?

CodeIgniter中开启PATH_INFO时mod_rewrite隐藏index.php的问题

我曾专门写过一篇文章介绍如何使用mod_rewrite隐藏URL路径上的index.php,但在某种情况下如果你改变了URI寻址的方式,这份htaccess方案可能会失效。

在CodeIgniter中,当我将URI寻址方式从AUTO更改为PATH_INFO时,即:

$config['uri_protocol'] = 'PATH_INFO';

注:PATH_INFO的开启,是因为我希望通过$_GET来取值,而不是系统默认的POST方式。

在此情况下如何仍然使用以上.htaccess方案,结果将是:index.php顺利隐藏,但主控制器并不能正确的获取值。

解决方案如下,就一步:

去掉以下重写规则中index.php后面的问号即可。

 RewriteRule ^(.*)$ /index.php?/$1 [L]

修改后的规则如下:

 RewriteRule ^(.*)$ /index.php/$1 [L]

其他地方不变。

Why?

第一句话在index.php后加问号的意思是告诉Apache的mod_rewrite模块,处理请求时自动去掉index.php后的GET字符串,这显然与我的意图相悖。

隐藏CodeIgniter程序URL中index.php的方法

CodeIgniter(以下简称"CI")是一款国外优秀的PHP轻量级MVC框架,它支持PHP4和PHP5,是开发中小型可拓展性需求高的Web应用程序的利器。目前你所见到的这个博客程序,正是采用CI进行的编写。

秉承MVC架构的思想,CI中的所有控制器都需要经过单点入口文件index.php(默认)来加载调用。也就是说,在默认情况下,所有CI开发项目的URL都形如以下这种形式:

http://localhost/index.php/blog/logs/this_is_a_test_entry

很显然,默认情况下,index.php在URL地址段中的存在一定程度上影响了URL的简洁和SEO的进行。我们可以通过下面本文介绍的方法来去掉这个讨厌的Index.php。

你或许已经注意到在CodeIgniter用户手册中,已经存在关于此问题的解决方法。但官方提供的这个.htaccess配置,并不是所有时候都能解决问题。本文现在给出一个更完善的解决方案。

注意:在继续之前,请确认你的主机支持.htaccess配置。其中,如果Apache作为Web服务器,需要开启mod_rewrite模块的支持;如果将IIS作为Web服务器,则需要额外安装ISAPI_Rewrite拓展。

具体方法如下:

1. 将以下配置信息复制并保存为.htaccess文件。

RewriteEngine On

RewriteBase /  

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d  

RewriteRule ^(.*)$ /index.php?/$1 [L]      

#如果没有安装mod_rewrite模块,所有的404页面都将被 # 发送到index.php,此时,程序会像没有设置隐藏时一样运行  

ErrorDocument 404 /index.php

2. 将以上.htaccess文件上传到CI所在项目的根目录(即与index.php同级目录下)

3. 修改application/config.php中的如下参数:

$config['index_page'] = "index.php";

$config['index_page'] = ""; //设置为空

以上三步,缺一不可。如果一切配置正常,你会发现,再次运行程序的时候,程序已经自动隐藏index.php这个URL段了!