标签归档:codeigniter

使用CI的几大误区

在使用CodeIgniter做开发的时候还是遇到不少误区的,其中最大的一个就是怎么样使用函数的问题,当然可以在一个Controller方法中内部再定义一个函数来使用,但函数通用性就成了问题,为此我曾经单独写一个通用函数的php放到common里面然后要使用的地方都需要引用一下这个文件,这样一来也算是解决了问题,不过总觉得有点山寨

后来才注意到其方法也有修饰符,既然有public,想必也有private ,试用了一下,使用private修饰的方法在外部是不能访问的,那么内部一定可以通过某种方式来访问。因为已经经过了一段时间对CI的了解,一般CI访问自身方法变量的方式是$this ->,于是这也就是访问私有函数的方法。

第二个误区是我不喜欢使用Model,开始的几个项目都空在那,里面没写任何的东西,直到一个中等的项目到来,我发现不写Model要多出很多的工作量,而这些工作很多都是重复的,于是后面就恢复了Model模块,这也是走了一次弯路,因为我在使用java框架SSH的时候总觉得Action和Service是合并的,没有太大的必要,只有经历多了才发现,这种成熟的架构总是有其一定的道理的

Use of undefined constant OCI_COMMIT_ON_SUCCESS – assumed ‘OCI_COMMIT_ON_SUCCESS’

安装完wampServer,然后勾选了oci8.dll,codeigniter还是不能启动,报错Use of undefined constant OCI_COMMIT_ON_SUCCESS – assumed ‘OCI_COMMIT_ON_SUCCESS’,如下图

image

使用oci_connect方法的时候会报找不到这个方法的错误

image

在默认环境变量里面能找到如下dll

image

有如下解决方法(三选一)

  1. 下载并Oracle客户端,Oracle会自动在path里面加入D:\app\niehonglei\product\11.2.0\client_1\bin;
  2. 下载instantclient,然后在path里面把instantclient路径加进去;
  3. 下载instantclient,将其中的dll拷贝到C:\Windows\System32目录里面;

codeigniter mysql php相关总结

开发lcwy这个项目,项目地址:http://lcwy.tohours.com,学习了不少php相关知识,做了如下总结:

  1. <?php require_once(“application/views/script/split_page.php”);?> 引用相关php文件
  2. 先$sql = $sql.” order by t.insert_time desc”; 后$sql = $sql.” limit “.$offset.”,”.$limit;
  3. mysql的 $offset 从0开始
  4. $this -> input -> cookie();可以取得相应的cookie
  5. foreach($_POST as $key => $value) 数组的遍历方法
  6. 查询方法 $this -> db -> where(array(“condition” => “value”)) -> order_by() -> get(“table_name”) -> result(); 取得对象的数组
  7. 也可使用 -> row()方法取得第一行的数据 (替换-> get() –> result())
  8. 也可使用 -> count_all_results()计算数据的条数,而不得到数据 (替换-> get() –> result())
  9. sql查询方法 $this -> db -> query($sql, $param) -> result();后面能接的方法与上面相同
  10. 更新方法$this -> db -> where(“id”, $id) -> update(“user”,$user);
  11. 字符串替换方法 str_replace(“world”,”earth”,”Hello world!”); //Hello earth!
  12. 正则替换方法 preg_replace(“/^[0-9]{4}/”, “”, $year); 其中正则也是以/开头和结尾
  13. 计算数据长度使用count(数组名称)
  14. 数字转字符 字符转数字函数 echo chr(65);echo ord(“B”);
  15. echo strpos(“Hello world!”,”wo”)
  16. 输出$this -> output -> set_output(encode_json($json));
  17. explode(“,”, $ids); split功能
  18. $data[“clear_time”] = null;//将数据库时间置空
  19. date_default_timezone_set(‘PRC’);在使用time时预先设置

CodeIgniter初始化需要调整的文件

使用CI开发时,需要对原来的框架配置文件做少量调整,以便我们使用。由于开发时间过长,现在只能从svn调整的记录里面来找到这些东西,可能有些地方一时记不起来为什么要调整了,记录下来下次初始化时好用

1、autoload.php,加载我们需要的选项,共有两个需要调整的地方

image

2、config.php两个地方,上面用来固定路径,后面用来加密

image

image

 

3、database.php,根据自己的数据库配置情况来调整

image

ORACLE配置示例:

// oracle
$db['default']['hostname'] = '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =host.name.or.ip)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service.name)))';
$db['default']['username'] = 'username';
$db['default']['password'] = '111111';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'oci8';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

4、routes.php将默认的首页进行调整(可选,一般不建议调整成index)

image

另外,如果是配置oracle数据库,请将system\database\drivers\oci8\oci8_result.php文件修改一下,不然会报警告

image

5、子目录配置htaccess方案

<IfModule mod_rewrite.c>
    RewriteEngine on RewriteBase /sppt/ RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ ./index.php/$1 [L]
</IfModule>

6、在每个controller前加上这段代码

function __construct(){
    parent::__construct();
}

7、开启apache的rewrite模块

#LoadModule rewrite_module modules/mod_rewrite.so