开启session
session_start();
放在require_once BASEPATH.'core/CodeIgniter.php';
之前。
index是CI保留字,不能作为控制器类名。
控制器的方法名不能和类名相同
1 | if ( ! defined('BASEPATH')) exit('No direct script access allowed'); |
默认情况下,index.php文件将被包含在你的URL中
example.com/index.php/news/article/my_article
你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向:
1 | RewriteEngine on |
注意:如果你的项目不在根目录请把上面这一句改为: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
。