CodeIgniter应用中的若干备忘问题

 

1. CI中的controller都应当小写。

 

刚开始为了区分单词,把第二个单词大写了,结果就是不认default_controller。事实证明这是错误的。放到linux下面就不灵了,应该全部小写,如果你大写了,CI会认为这是libraries里面的东西。不管怎样都应该全部小写,至少可以避免linux下区分大小写的问题。

 

2. 分页的问题。

 

CI的官方论坛下提供了一些源代码,怎样写分页函数我就不多说了,可以直接看高手的。关键是传递页面参数的时候,不要忘了修改segment。一开始怎么传都不对,后来才想起来我的网址已经是localhost/codeigniter/aaa /bbb/3/10了,这样segment也要相应改变。分页参数在第几个/后,他就是uri->segment(几)。如果是搜索之后的分页,那么$config['total_rows']就不是count_all了,而是加入where之后的query的记录数。想起来倒是有一个问题还没解决,就是在你点search之后,一般需要用JS把网址转换成CI固有的模式,但是怎样使这个js生成的网址包含到site_url中,我没有解决,只能手工了(仔细想想还是挺简单的呵呵,自己造网址不用site_url)。

 

3. MVC模式我已经比较适应了。

 

将页面都放在view中,控制语句放在controller中,而函数放在model中。刚开始有很多人和我一样想要在 view或者control中加一些语句,只能说,不行,也不规范。最好的办法是写成helper,如果是数据库的二次调用的话,可以用inner join合并。

 

4. htaccess的问题。

 

很多人肯定和我一样,一开始接触的时候就是感兴趣怎样可以去掉index.php。虽然网上已经泛滥了,但是我再写一次吧。其实就两个工作,第一,在根目录写一个.htaccess的文档,第二,开启apache中的rewrite模块。

1)htaccess 的写法很多。这是基于你对CI各层目录的安排决定的。我的安排:除了application中的内容外。将其他所有东西放在根目录下的www目录下,其中图片放在www/images/下,flash放在www/flash/下,xml放在www/xml下,js放在www/js下。。。。总之全堆在 www里面。所有views在title下面加上<base href="<?=base_url()?>" />这句话,系统就能识别你的根目录了,所有链接改成site_url()就可以保证路径不会出错了。于是,我的htaccess是这样的:

 

RewriteEngine on  

RewriteCond $1 !^(index\.php|www|uploadfiles|robots\.txt)  

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

 

第一行是将rewrite打开,第二行是不rewrite的例外,包括index.php本身,www目录,uploadfiles(这个参见5),还有 robots搜索,第三行自然就是将index.php隐藏的rewrite规则了,即剩下的网址由于原来都是localhost/codeigniter/index.php/aaa/bbb的模式,现在可以去掉index.php了。而www下的网址不涉及index.php,用不到这个规则,所以要排除。

2)首先找到apache下面的http.conf,路径是apache的conf目录下。

找到这一行:LoadModule rewrite_module modules/mod_rewrite.so,将前面的#去掉,也就是说开启这个module。

 

另外需要找到rewrite的目录行,将 AllowOverride设置为All,

其实就是roadmodule下面的那个directory.

    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

3)在CI的config目录下的config.php中,将$config['index_page'] = "index.php"改为$config['index_page'] = “”,这样就大功告成啦!!不用输入index.php也可以访问了。其实更关键的是你的各个目录的路径安排。

 

5.FCKEditor的问题。

 

应该说我在应用的时候没有遇到任何麻烦,除了上传时候的路径让我一顿好找。我觉得设置成根目录下的/uploadfiles是不错的选择,当然别忘了在htaccess中把uploadfiles也放在不 rewrite的队伍中。因为我现在的习惯是所有的文件编码都设置成utf-8,所以网上经常说的乱码的现象没有遇到。

基本上就是这些基本的问题了,我做的其实就是简单的企业网站,没有高级应用,所以也没有遇到更复杂的问题。等考完GT可以尝试做一个更复杂的网站,和 AJAX结合后再写一些心得。下次要再做这样的CMS,后台直接搞定,省了不少时间。而且对于我这样的PHP烂人来说,CI帮我解决了很多安全问题,同时也提高了效率。

有点过度兴奋了,写得超级乱,我自己都不愿意回过头去细细检查了,具体问题可以再联系我,只要我能解答。最后上传一个验证码的helper吧,版权归CI论坛上的同学所有,我只是转一下,顺便写一下用法。。。

点击下载此文件  在附件里面

 

1)首先在controller中引用getcode_helper.php, $this->load->helper('getcode');

建立一个function比如

Php代码 
  1. function createcode()  
  2. {  
  3.     code();  
  4. }  

 

2)验证码图片链接地址:<img id="codeimage" src="<?=site_url('controller路径/createcode')?>

3)表单提交时验证函数:

Php代码 
  1. function seccode_check($str)  
  2. {  
  3.     if(chk_code($str))  
  4.     {  
  5.         return TRUE;  
  6.     }  
  7.     else  
  8.     {   
  9.         return FALSE;  
  10.     }  
  11. }  

 

6.上传问题

function Do_Upload()

    {
        $xmlfile = $_FILES['userfile']['name']; //获取值。  //这里;ie与FF获取值不一致的情况下 使用 原始的 $_FILES
        $gameid= $this->input->post("gameid");
        //判断文件后缀是否多个
        /*$count = substr_count($xmlfile,'.');
        if($count>1){
            echo "{error:'houzhui'}";
            return;
        }*/        
        //判断文件名称是否存在 
        $filename = $this->db->where('filename',$xmlfile)->get('interface_template')->row('id');
        if($filename){
            echo "{error:'name'}";
            return;
        }
        $config['upload_path'] = 'system/uploads/'; //配置上传相关信息。 
        $config['allowed_types'] = 'xml';
        $config['max_size'] = '1000';
        $config['overwrite'] = false;
        //$config['encrypt_name'] = true;
        $config['file_name'] = $xmlfile;
        $this->load->library('upload',$config);
 
        $ret=$this->upload->do_upload();
 
        if (!$ret)
        {
           // echo $this->upload->display_errors('', '');     // 如果出错则打印出 错误信息来。对上传很有用。
            echo "{error:'type'}";
            return;
        } 
        else
        {
            //$retarr=$this->upload->data();//取得类似$_FIFLE 上传信息             
            $data = array( 
                          'filename'=>$xmlfile, 
                          'createtime' =>date("Y-m-d H:i:s"),
                          'version' =>$gameid= $this->input->post("gameid"),
                          'author' => "");
            $this->db->insert('interface_template', $data);
            $id = $this->db->insert_id();
            echo '{success:true, id:'.$id.'}'; 
        }

    }

7.、下载

function DownLoad()

    {
        $fileName=$this->input->post('fileid');
        @ini_set('memory_limit', '320M');       
        @ini_set('allow_url_fopen', 'on');
        @ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)');
        set_time_limit(3600);
        $this->load->helper('download');       
        $filePath = "system/uploads/";//此处给出你下载的文件在服务器的什么地方
        $contents = $filePath.$fileName;
        $data = file_get_contents($contents);
        force_download($fileName, $data);    

    }

附件列表

    原文地址:https://www.cnblogs.com/holyes/p/425c892475525d147072b749538cf7b8.html