• 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);    

        }

    附件列表

    • 相关阅读:
      分布式文档存储数据库 MongoDB
      MongoDB运行状态、性能监控,分析
      Mongodb在Linux下的安装和启动和配置
      mongodb 状态监控命令详解
      Asp.net Core 入门实战 2.请求流程
      Asp.net Core 入门实战
      前后端分离之CORS和WebApi
      2.CLI标准
      JavaScript的引入方式
      CSS选择器的优先级
    • 原文地址:https://www.cnblogs.com/holyes/p/425c892475525d147072b749538cf7b8.html
    Copyright © 2020-2023  润新知