CI学习
May 28
   调用:
   2. $ci->load->helper('pinyin');  
   3. $str = '测试';  
   4. echo Pinyin($str,1);//如果utf-8编码第二参数为1,不加第二个参数默认为gb2312,输出:'ceshi'
辅助函数:

    <?php  
   function Pinyin($_String, $_Code='gb2312')  
   {  
        $_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha".  
                  "|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|".  
                "cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er".  
               "|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui".  
                 "|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang".  
                  "|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang".  
                  "|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue".                "|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne".  
                "|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen".  
                   "|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang".  
                  "|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|".  
               "she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|".  
                "tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu".  
                 "|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you".  
               "|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|".  
                 "zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo";  
         $_DataValue = "-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990".  
                "|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725".  
                 "|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263".  
               "|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003".  
                 "|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697".  
               "|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211".  
                "|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922".  
                "|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468".  
                 "|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664".  
                "|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407".  
                "|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959".  
                 "|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652".  
                "|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369".  
               "|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128".  
                "|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914".  
                 "|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645".  
                 "|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149".  
                "|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087".  
                 "|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658".  
                "|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340".  
                "|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888".  
                 "|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585".  
                 "|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847".  
                "|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055".  
                "|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780".  
                 "|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274".  
                   "|-10270|-10262|-10260|-10256|-10254";  
         $_TDataKey   = explode('|', $_DataKey);  
        $_TDataValue = explode('|', $_DataValue);  
           $_Data = (PHP_VERSION>='5.0') ? array_combine($_TDataKey, $_TDataValue) : _Array_Combine($_TDataKey, $_TDataValue);  
       arsort($_Data);  
         reset($_Data);  
       if($_Code != 'gb2312') $_String = _U2_Utf8_Gb($_String);  
       $_Res = '';  
        for($i=0; $i<strlen($_String); $i++)  
         {  
                 $_P = ord(substr($_String, $i, 1));  
                 if($_P>160) { $_Q = ord(substr($_String, ++$i, 1)); $_P = $_P*256 + $_Q - 65536; }  
                 $_Res .= _Pinyin($_P, $_Data);  
        }  
   return $_Res;  
        return preg_replace("/[^a-z0-9]*/", '', $_Res);  
}  
function _Pinyin($_Num, $_Data)  
{  
         if    ($_Num>0      && $_Num<160   ) return chr($_Num);  
        elseif($_Num<-20319 || $_Num>-10247) return '';  
         else {  
               foreach($_Data as $k=>$v){ if($v<=$_Num) break; }  
                 return $k;  
           }  
}  
function _U2_Utf8_Gb($_C)  
{  
        $_String = '';  
        if($_C < 0x80) $_String .= $_C;  
       elseif($_C < 0x800)  
        {  
               $_String .= chr(0xC0 | $_C>>6);  
                 $_String .= chr(0x80 | $_C & 0x3F);  
       }elseif($_C < 0x10000){  
                $_String .= chr(0xE0 | $_C>>12);  
                $_String .= chr(0x80 | $_C>>6 & 0x3F);  
                 $_String .= chr(0x80 | $_C & 0x3F);  
         } elseif($_C < 0x200000) {  
                  $_String .= chr(0xF0 | $_C>>18);  
                 $_String .= chr(0x80 | $_C>>12 & 0x3F);  
              $_String .= chr(0x80 | $_C>>6 & 0x3F);  
                 $_String .= chr(0x80 | $_C & 0x3F);  
         }  
         return iconv('UTF-8', 'GB2312//IGNORE', $_C);  
}  
function _Array_Combine($_Arr1, $_Arr2)  
  {  
         for($i=0; $i<count($_Arr1); $i++) $_Res[$_Arr1[$i]] = $_Arr2[$i];  
         return $_Res;  
}  
?>
May 16
学习网址:http://codeigniter.org.cn

/**
*  安装部分
*/

####
CodeIgniter 安装分为四个步骤:

1.解压缩安装包。
2.把 CodeIgniter 文件夹和里面的文件上传到你的服务器。通常 index.php 在根目录。
3.用任何文本编辑器打开 application/config/config.php 去设置你的网站根 URL。如果你打算使用加密或 Session,请设置你的加密密钥。
4.如果你打算使用数据库,用任何文本编辑器打开 application/config/database.php 去设置你的数据库参数。
####

/**
*  CI URL部分
*/

####
Ci URL管理
例子:example.com/class/function/ID
####
删除URL中的index.php

在.htaccess 中加入规则
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
####
URL 后缀
$config['url_suffix']='.do'
例子:example.com/class/function/ID.do
####
url字符串参数

url:index.php?c=products&m=view&id=345

$config['enable_query_strings'] = FALSE;  //修改为TRUE
$config['controller_trigger'] = 'c';    //控制器
$config['function_trigger'] = 'm';    //方法  
####
url传递参数
URL:
example.com/index.php/products/shoes/sandals/123
CODE:
class Products extends Controller {

    function shoes($sandals='Test', $id=1)
    {
        echo $sandals;
        echo $id;
    }
}
?>
####
/**
*  控制器部分
*/
//控制器都在application/controller中

####
定义默认控制器:
application/config/routes.php 文件中 $route['default_controller'] = 'Blog';
####
私有方法 前面加下划线 "_"
function _utility()
{
  // some code
}
####
构造函数

如果要使用构造函数,必须在构造函数中加入 parent::Controller();
如:
   function __construct()
       {
            parent::Controller();
       }
####

/**
*  视图部分
*/
//视图在文件夹 application/views/ 下
####
记住,在一个 MVC 框架中,控制器扮演着交通警察的角色,那么,他有责任去取回某一特定的视图。
####
显示视图 $this->load->view();

view函数第三个可选参数可以改变函数的行为,让数据作为字符串返回而不是发送到浏览器。如果想用其它方式对数据进一步处理,这样做很有用。如果将view第三个参数设置为true(布尔)则函数返回数据。view函数缺省行为是 false, 将数据发送到浏览器。如果想返回数据,记得将它赋到一个变量中:

$string = $this->load->view('myfile', '', true);
####
这里有个控制器的例子,加载一个模型,然后通过视图显示出来

class Blog_controller extends Controller {

    function blog()
    {
        $this->load->model('Blog');    //载入一个模型
  
        $data['query'] = $this->Blog->get_last_ten_entries();  //使用模型里的函数获取数据

        $this->load->view('blog', $data);  //显示视图
    }
}
####
/**
*  模型部分
*/
####
载入模型后连接到数据库

可以把第三个参数设置为TRUE来使模型装载函数自动连接数据库,连接配置可以在您的数据库配置文件中可以定义:
$this->load->model('Model_name', '', TRUE);

您可以手动设定第三个参数来载入您的自定义数据库配置:
$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;

$this->load->model('Model_name', '', $config);

####
自动载入模型(对于全局模型)

打开application/config/autoload.php 文件,然后在自动装载数组中添加上这个模型

$autoload['model']=array('bolg');

####
model的名称不要和控制器名称一样 可以加后缀_model区别 否则可能加载出错
####
/**
*  辅助函数 helpers
*/
####
载入 url_helper.php
$this->load->helper('url');
####
辅助函数可以自动载入 autoload
辅助函数文件一般保存在 system/helpers 或 system/application/helpers 文件夹中。
####
/**
*  插件
*/
####
插件文件一般保存在system/application/plugins 中
插件和辅助函数类似,不过插件一般只是一个函数。
载入插件$this->load->plugin('name');
$this->load->plugin( array('plugin1', 'plugin2', 'plugin3') );
####
/*
*  使用 CodeIgniter 类库
*/
####
所有的类库文件存放在system/libraries 文件夹
$this->load->library('class name');
####
使用自己的类
$this->load->library('someclass', $params); //传递参数到类的构造函数中去
$this->someclass->some_function();  // 对象的实例名永远都是小写的
####
$CI =& get_instance();  //创建一个CI对象
####
关于扩展和替换类文件
------
只需要在application/libraries中创建新的myclass.php文件
如果要替换 则类名称要以CI_开头,并且文件名与原来文件名一样。
------
如果需要扩展类
新建一个文件名为application/libraries/MY_classname.php
扩展类的前缀为自定义的前缀,默认为MY_
自定义前缀是congfig文件中的$config['subclass_prefix'] = 'MY_';
如:
class MY_Input extends CI_Input {

    function MY_Input()
    {
        parent::CI_Input();
    }
}
####
/**
*  钩子 具体使用待细看
*/
####
钩子是在 application/config/hooks.php 文件中定义的。 每个钩子可以用以下格式的数组来定义:

$hook['pre_controller'] = array(
                                'class'    => 'MyClass',   //调用的类名
                                'function' => 'Myfunction',  //调用的函数名
                                'filename' => 'Myclass.php',  //文件名
                                'filepath' => 'hooks',    //文件目录 application 下
                                'params'   => array('beer', 'wine', 'snacks')//传递的参数
                                );
####
/**
*  公共函数
*/
####
is_php('5.3.0') 判断正在使用的PHP的版本号是否高于你所提供的版本
is_really_writable() 判断文件是否可写
config_item()函数能够取得单个配置信息
show_error('message'), show_404('page'), log_message('level', 'message') 错误处理函数
set_status_header(code, 'text');允许你手动设置服务器状态头(header)。

//————  2010.05.14 CI手册看到脚手架    ————//

/**
*  URI路由
*/
####
设定你自己的路由规则
application/config/routes.php

$route['journals'] = "blogs";
如果URL的第一个分段(类名)是关键字"journals",那么将会重定向到"blogs"类中处理.
$route['blog/joe'] = "blogs/users/34";
如果URL的前两个分段是"blog"和"joe",那么将会重定向到"blogs"类的"users"方法中处理.并且将ID"34"设为参数.
$route['product/:any'] = "catalog/product_lookup";
当"product"作为URL中第一个分段时, 无论第二分段是什么都将被重定向到"catalog"类的"product_lookup"方法.
####
/**
*  错误处理
*/
show_error('消息' [, int $status_code = 500 ] )
show_404('页面')
log_message('级别', '消息')
####
/**
*  缓存处理
*/
####
$this->output->cache(n);
####
//评测程序
$this->output->enable_profiler(TRUE);
####
//管理应用程序
####
对应用程序文件夹重命名

如果你要对 application 进行重命名, 你需要打开 index.php 文件,对变量 $application_folder 进行更改:
$application_folder = "application";

鉴于以上 你可以将程序放置于服务器其他位置
如:$application_folder = "/Path/to/your/application";

####
在一个 CodeIgniter 下运行多个应用程序
如果你想要多个应用程序共享同一个 CodeIgniter, 你要将 application 下所有的文件夹放在不同的应用程序的文件夹内。
例如,你要建立两个应用程序 "foo" 和 "bar",你的应用程序文件夹的结构可能会像下面的这样:

system/application/foo/
system/application/foo/config/
system/application/foo/controllers/
system/application/foo/errors/
system/application/foo/libraries/
system/application/foo/models/
system/application/foo/views/

system/application/bar/
system/application/bar/config/
system/application/bar/controllers/
system/application/bar/errors/
system/application/bar/libraries/
system/application/bar/models/
system/application/bar/views/

####
/**
*  PHP替换语句
*/
####
用:和;替换{};用endif,endfor,endforeach,和 endwhile 结束循环控制

  

Hi Sally



  

Hi Joe



  

Hi unknown user



####
/**
*  安全
*/
####
XSS 过滤
if ($this->input->xss_clean($file, TRUE) === FALSE)
{
    // file failed the XSS test
}
第二个参数 TRUE 用来过滤图片不安全信息
####
让用户取得POST, COOKIE 或 SERVER 的内容

$this->input->post('some_data', TRUE);    //第二个参数表示是否进行过滤
$this->input->get('some_data', TRUE);
$this->input->get_post('some_data', TRUE);  //优先POST
$this->input->cookie('some_data', TRUE);
$this->input->server();
echo $this->input->ip_address();    //返回当前用户的IP
$this->input->valid_ip($ip);      //返回是否是合格IP
echo $this->input->user_agent();    //返回用户得到的浏览器信息
####
/**
*  开发规范
*/
####
1.闭合标签
所有的php文件应该省略这个php闭合标签,并插入一段注释来标明这是文件的底部并定位这个文件在这个应用的相对路径。

2.文件格式 utf-8

3.类和函数命名规则,类名的首字母应该大写,构造方法的名称要与类名相同。词之间要用下划线分隔,不要使用骆驼命名法。最好用动词开头。

4.变量命名:变量名应该只包含小写字母,用下划线分隔,并且能适当地指明变量的用途和内容。那些短的、无意义的变量名应该只作为迭代器用在for()循环里。

5.注释:
/**
* Super Class
*
* @package Package Name
* @subpackage Subpackage
* @category Category
* @author Author Name
* @link http://example.com
*/

/**
* Encodes string for use in XML
*
* @access public
* @param string
* @return string
*/
function xml_encode($str)

6.常量全部大写

7.TRUE, FALSE, 和 NULL 关键字应该总是完全大写的。

8.用OR代替|| ,&& 要优先于 AND 不过两者都可以接受, 在 ! 的前后都要加一个空格

9.比较返回值与类型映射,必要时使用=== 和 !==

10.数据库表名:exp_pre_email_addresses ("前缀_公司_表名")

11.一个文件一个类

12.在代码中使用tab代替空格。

13.文件必须使用Unix换行符保存。"\n"

14.使用 Allman 风格缩进。除了类声明以外,括号总是独占一行,且缩进与“属于”它的控制语句同级。

15.返回字符串使用$LANG->line();
INCORRECT:
return "Invalid Selection";

CORRECT:
return $LANG->line('invalid_selection');

16.一条语句一行
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]