CI使用注意事项

目录
  1. 1. 开启session
  2. 2. index是CI保留字,不能作为控制器类名。
  3. 3. 控制器的方法名不能和类名相同
  4. 4. 默认情况下,index.php文件将被包含在你的URL中
  5. 5. 数据库连接失败
  6. 6. index控制器 执行了两遍 解决方法

开启session

session_start();放在require_once BASEPATH.'core/CodeIgniter.php';之前。

index是CI保留字,不能作为控制器类名。

控制器的方法名不能和类名相同

1
2
3
4
5
6
7
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');  

class Login extends CI_Controller {
public function login() {
echo 'succ';//无法输出此行,显示404 Page Not Found
}
}

默认情况下,index.php文件将被包含在你的URL中

example.com/index.php/news/article/my_article
你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向:

1
2
3
4
5
RewriteEngine on  
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d //此处有大坑。加上这两句可保证一般css、js文件正常加载。(注意删掉这句注释哦)
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

注意:如果你的项目不在根目录请把上面这一句改为:RewriteRule ^(.*)$ index.php/$1 [L]
在上面的例子中,可以实现任何非 index.php、images 和 robots.txt 的 HTTP 请求都被指向 index.php。

数据库连接失败

当使用$db['default']['hostname'] = '192.168.1.116';这样的IP地址连接数据库的时候会报错:
Unable to connect to your database server using the provided settings.
其实这不是CI的原因,而是mysql没有给远程连接的用户授权,直接给用户授权就可以了,可参考文章:
Navicat for mysql远程连接数据库详解(1130错误解决方法)

index控制器 执行了两遍 解决方法

加上 public function __construct() { parent::__construct(); } 就好了。

至于导致这种情况的原因,是这样,首先在类实例化时,PHP执行了构造函数,执行了一次load->view,而随后框架调用了默认Action “index”,所以导致了输出两次,按照PHP5的方法将构造函数改为__construct则不会出现这种问题,或者不要把控制器命名为”index”。

小提示:PHP5中保留了对PHP4面向对象的兼容,包括构造函数,这里两个构造函数:Index__construct,PHP5里会先执行__construct,当__construct不存在时执行Index,而PHP4中不会执行__construct