ci框架(一),ci框架(
ci目录结构
|-----<span>system</span><span> 框架程序目录 </span>|-----<span>core 框架的核心程序 </span>|-----CodeIgniter.<span>php 引导性文件 </span>|-----Common.<span>php 加载基类库的公共函数 </span>|-----Controller.<span>php 基控制器类文件:CI_Controller </span>|-----Model.<span>php 基模型类文件:CI_Model </span>|-----Config.<span>php 配置类文件:CI_Config </span>|-----Input.<span>php 输入类文件:CI_Input </span>|-----Output.<span>php 输出类文件:CI_Output </span>|-----URL.<span>php URL类文件:CI_URl </span>|-----Router.<span>php 路由类文件:CI_Router </span>|-----Loader.<span>php 加载类文件:CI_Loader </span>|-----<span>helpers 辅助函数 </span>|-----url_helper.<span>php url相关的辅助函数,如:创建url的辅助函数 </span>|-----captcha_helper.<span>php创建图形验证码的辅助函数 </span>|-----<span>libraries 通用类库 </span>|-----Pagination.<span>php 通用分页类库 </span>|-----Upload.<span>php 通用文件上传类库 </span>|-----Image_lib.<span>php 通用图像处理类库 </span>|-----Session.<span>php 通用session类库 </span>|-----<span>language 语言包 </span>|-----<span>database 数据库操作相关的程序 </span>|-----DB_active_rec.<span>php 快捷操作类文件(ActiveRecord) </span>|-----<span>fonts 字库 </span>|-----<span>application 项目目录 </span>|-----<span>core 项目的核心程序 </span>|-----<span>helpers 项目的辅助函数 </span>|-----<span>libraries 通用类库 </span>|-----<span>language 语言包 </span>|-----<span>config 项目相关的配置 </span>|-----config.<span>php 项目相关的配置文件 </span>|-----database.<span>php 数据库相关的配置文件 </span>|-----autoload.<span>php 设置自动加载类库的配置文件 </span>|-----constants.<span>php 常量配置文件 </span>|-----routes.<span>php 路由配置文件 </span>|-----<span>controllers 控制器目录 </span>|-----welcome.<span>php 控制器文件,继承CI_Controller </span>|-----<span>models 模型目录 </span>|-----welcome_model.<span>php 模型文件,继承CI_Model </span>|-----<span>views 视图目录 </span>|-----welcome.php 视图模板文件,默认后缀名为.<span>php </span>|-----<span>cache 存放数据或模板的缓存文件 </span>|-----<span>errors 错误提示模板 </span>|-----<span>hooks 钩子,在不修改系统核心文件的基础上扩展系统功能 </span>|-----<span>third_party 第三方库 </span>|-----<span>logs 日志 </span>|-----index.php 入口文件
访问形式
在\application\controllers\welcome.php中添加函数:
<span>public</span> <span>function</span><span> hello() { </span><span>echo</span> "test"<span>; }</span>
入口文件.php/控制器/动作
自己新建控制器,hello.php:
<?php <span>if</span> ( ! <span>defined</span>('BASEPATH')) <span>exit</span>('No direct script access allowed'<span>); </span><span>class</span> Hello <span>extends</span><span> CI_Controller { </span><span>public</span> <span>function</span> sayHello(<span>$name</span><span>) { </span><span>echo</span> <span>$name</span>,",Hello World"<span>; } } </span>?>
注意:
- 方法名以下划线开头的是不能访问成功的,只能间接访问。
- 只能访问public修饰的方法。
- 尽量不要与类名相同的方法,会当作构造函数。
加载视图
application\views\view_test.php或者application\views\view\test.php(这中做法主要是方便同一类型的视图可以放在同一个文件夹下方便管理)
<span><</span><span>html</span><span>></span> <span><</span><span>head</span><span>></span> <span></</span><span>head</span><span>></span> <span><</span><span>body</span><span>></span><span> test_ci_hello_world </span><span></</span><span>body</span><span>></span> <span></</span><span>html</span><span>></span>
控制器:
<span>public</span> <span>function</span><span> addView() { </span><span>$this</span>->load->view("view_test"<span>); }</span>
或者:
<span>public</span> <span>function</span><span> addView2() { </span><span>$this</span>->load->view("view/test"<span>); }</span>
效果:
分配变量
把数据从控制器中传到视图中,控制器:
<span>public</span> <span>function</span><span> addView() { </span><span>$this</span>->load->vars("title","value"<span>); </span><span>$list</span> = <span>array</span><span>( </span><span>array</span>('id'=>1,'name'=>'jack','email'=>'123@123.com'), <span>array</span>('id'=>2,'name'=>'jack2','email'=>'1233@123.com'), <span>array</span>('id'=>3,'name'=>'jack3','email'=>'12333@123.com'<span>) ); </span><span>$data</span>['new_title']="标题"<span>; </span><span>$data</span>['list']=<span>$list</span><span>; </span><span>$this</span>->load->vars(<span>$data</span><span>); </span><span>$this</span>->load->view("view_test"<span>); }</span>
视图:
<html> <head> </head> <body> <h1><?php <span>echo</span> <span>$title</span>;?></h1> <h1><?php <span>echo</span> <span>$new_title</span>;?></h1><span> test_ci_hello_world </span><table> <?php <span>foreach</span>(<span>$list</span> <span>as</span> <span>$item</span>):?> <tr> <td><?=<span>$item</span>['id']?></td> <td><?=<span>$item</span>['name']?></td> <td><?=<span>$item</span>['email']?></td> </tr> <?php <span>endforeach</span>;?> </table> </body> </html>
效果:
public function addView()
{
$this->load->vars("title","value");
$list = array(
array('id'=>1,'name'=>'jack','email'=>'123@123.com'),
array('id'=>2,'name'=>'jack2','email'=>'1233@123.com'),
array('id'=>3,'name'=>'jack3','email'=>'12333@123.com')
);
$data['new_title']="标题";
$data['list']=$list;
$this->load->vars($data);
$this->load->view("view_test");
$this->load->view("footer");
}
视图view_test:
<html> <head> </head> <body> <h1><?php <span>echo</span> <span>$title</span>;?></h1> <h1><?php <span>echo</span> <span>$new_title</span>;?></h1><span> test_ci_hello_world </span><table> <?php <span>foreach</span>(<span>$list</span> <span>as</span> <span>$item</span>):?> <tr> <td><?=<span>$item</span>['id']?></td> <td><?=<span>$item</span>['name']?></td> <td><?=<span>$item</span>['email']?></td> </tr> <?php <span>endforeach</span>;?> </table>
视图footer:
<span>CI_hello_world!!! </span><span></</span><span>body</span><span>></span> <span></</span><span>html</span><span>></span>
显示效果:
uri参数获取
控制器:
<span>public</span> <span>function</span> getUri(<span>$id</span>,<span>$name</span>,<span>$year</span><span>) { </span><span>echo</span> "id--->".<span>$id</span>."---name--->".<span>$name</span>."---year--->".<span>$year</span>."<br />"<span>; </span><span>echo</span> "segment(1)--->".<span>$this</span>->uri->segment(1)."<br />"<span>; </span><span>echo</span> "segment(2)--->".<span>$this</span>->uri->segment(2)."<br />"<span>; </span><span>echo</span> "segment(3)--->".<span>$this</span>->uri->segment(3)."<br />"<span>; </span><span>echo</span> "segment(4)--->".<span>$this</span>->uri->segment(4)."<br />"<span>; </span><span>echo</span> "segment(5)--->".<span>$this</span>->uri->segment(5)."<br />"<span>; }</span>
效果:
加载数据库
这个操作在MVC中是放到model中做的。
在\application\config\database.php中配置数据库参数,注意dbprefix和swap_pre这两个参数。在php中写的是前缀,会默认当作swap_pre,然后放到数据库中的时候会转成dbprefix,但是最好两个都弄成一样的。
还有$active_group,默认是default,如果要连接两个数据库,把default另外取名,然后在函数中写明参数就OK。
必须继承数据核心类CI_Model,同时重载父类中的构造方法。
<span>class</span> Model_name <span>extends</span><span> CI_Model { </span><span>function</span><span> __construct() { parent</span>::<span>__construct(); } }</span>
在每次使用数据库的时候,都需要加载一次数据库:
<span>$this</span>->load->database();
为了方便,可以将数据库的加载设置成自动加载,在\application\config\autoload.php中。
<span>$autoload</span>['libraries'] = <span>array</span>('database');
对于数据库访问对象,装载到超级对象的属性中 $this->db
<span>$res</span> = <span>$this</span>->db->query(<span>$sql</span>);<span>//</span><span>返回对象</span> <span>$res</span>->result();<span>//</span><span>返回数组,数组中是一个一个的对象</span> <span>$res</span>->result_array();<span>//</span><span>返回二维数组,里面是关联数组</span> <span>$res</span>->row();<span>//</span><span>返回第一条数据,直接是一个对象</span>
AR操作数据库
在database.php文件中,将$active_recoed的值改为TRUE,这样就可以使用AR了。
<span>//</span><span>查询</span> <span>public</span> <span>function</span><span> index() { </span><span>$res</span> = <span>$this</span>->db->get('表名');<span>//</span><span>这里自动调用前缀</span> <span>foreach</span>(<span>$res</span>->result() <span>as</span> <span>$item</span><span>) { </span><span>echo</span> <span>$item</span>->name."<br />"<span>; } }</span>
<span>//</span><span>插入</span> <span>public</span> <span>function</span><span> index() { </span><span>$data</span>=<span>array</span><span>( </span>'name'=>'lisi', 'password'=><span>md5</span>('lisi'<span>) ); </span><span>$bool</span> = <span>$this</span>->db->insert("表名",<span>$data</span><span>); </span><span>var_dump</span>(<span>$bool</span><span>); }</span>
<span>//</span><span>更新</span> <span>public</span> <span>function</span><span> index() { </span><span>$data</span>=<span>array</span><span>( </span>'name'=>'wangwu', 'password'=><span>md5</span>('wangwu'<span>) ); </span><span>$bool</span> = <span>$this</span>->db->update('表名',<span>$data</span>,<span>array</span>('id'=>3<span>)); </span><span>var_dump</span>(<span>$bool</span><span>); }</span>
<span>//</span><span>删除</span> <span>$bool</span> = <span>$this</span>->db->delete('表名',<span>array</span>('id'=>2<span>)); </span><span>var_dump</span>(<span>$bool</span>);
常规的方法是ul嵌套,即主菜单ul-li里嵌套子菜单ul,要用到两级循环
首先循环主菜单,要有固定的条件来判断出主菜单,比如主菜单的uid==0或者其它。。。
- 栏目名称
if($news_item['uid'] == 0){ //判断并得到主菜单
echo " - ".$news_item['title'] . '
- ';
- "."ss".$child_item['title']."";
}
endforeach;
echo "";
}
endforeach; ?>
当然这仅限于两级菜单,多级或无限极,可以使用函数递归
function menu($uid=0){ //设置缺省从主菜单开始
global $news;
foreach ($news as $news_item):
if($news_item['uid'] == $uid){
echo " - ".$news_item['title'] . '
- ';
menu($news_item['id']); //递归调用
echo "";
}
endforeach;
}
------ 调用方法 ------------------------------- >
难道MY_Controller不要类名一致?
foreach ($news as $child_item): //循环二次
if($news_item['id'] == $child_item['uid']){ //判断并得到对应子菜单
echo " - "."ss".$child_item['title']."";

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。

会话ID应在登录时、敏感操作前和每30分钟定期重新生成。1.登录时重新生成会话ID可防会话固定攻击。2.敏感操作前重新生成提高安全性。3.定期重新生成降低长期利用风险,但需权衡用户体验。

在PHP中设置会话cookie参数可以通过session_set_cookie_params()函数实现。1)使用该函数设置参数,如过期时间、路径、域名、安全标志等;2)调用session_start()使参数生效;3)根据需求动态调整参数,如用户登录状态;4)注意设置secure和httponly标志以提升安全性。

在PHP中使用会话的主要目的是维护用户在不同页面之间的状态。1)会话通过session_start()函数启动,创建唯一会话ID并存储在用户cookie中。2)会话数据保存在服务器上,允许在不同请求间传递数据,如登录状态和购物车内容。

如何在子域名间共享会话?通过设置通用域名的会话cookie实现。1.在服务器端设置会话cookie的域为.example.com。2.选择合适的会话存储方式,如内存、数据库或分布式缓存。3.通过cookie传递会话ID,服务器根据ID检索和更新会话数据。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

记事本++7.3.1
好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Linux新版
SublimeText3 Linux最新版