📅  最后修改于: 2021-01-01 03:41:10             🧑  作者: Mango
下面列出了最常见的CodeIgniter面试问题和答案。
CodeIgniter是一个开放源代码且功能强大的框架,用于在PHP上开发Web应用程序。它大致基于MVC模式,类似于Cake PHP。 CodeIgniter包含库,简单的界面和逻辑结构,用于访问这些库,插件,帮助程序和其他一些资源,这些资源更容易解决了PHP的复杂功能,并保持了高性能。它简化了PHP代码,并在更短的时间内发布了一个完全交互式,动态的网站。
CodeIgniter最突出的功能列表:
如果下载并解压缩CodeIgniter,将获得以下文件结构/文件夹结构:
应用
系统
从技术角度来看,CodeIgniter是动态实例化(轻量级),松散耦合(组件彼此之间的依赖很少)并且具有组件奇异性(每个类和函数都严格地针对其目的)。
CodeIgniter框架基于MVC模式。 MVC是一种软件,可为您提供与演示视图不同的逻辑视图。因此,网页包含最少的脚本。
模型的职责是处理所有数据逻辑和表示形式,并在视图中加载数据。它存储在application / models文件夹中。
在这里,ModelName是模型文件的名称。请记住,类的第一个字母必须是大写字母,然后是其他小写字母,并且应该与文件名相同。它扩展了基本CodeIgniter模型,以便父模型文件的所有内置方法都继承到新创建的文件。
要在控制器功能中加载模型,请使用以下函数:
$this->load->model('ModelName');
如果您的模型文件位于模型文件夹的子目录中,则必须提及完整路径。例如,如果您的文件位置是application / controller / models / project / ModelName。然后,您的文件将如下所示加载,
$this->load->model('project/ModelName');
要手动连接数据库,请使用以下语法,
$this->load->database();
View文件夹包含所有标记文件,如页眉,页脚,侧边栏等。可以通过将其嵌入控制器文件中的任何位置来重复使用它们。它们不能直接调用,必须将它们加载到控制器的文件中。
创建一个文件并将其保存在application / views文件夹中。例如,我们创建了一个文件Firstview.php,
无法直接访问视图。它始终加载在控制器文件中。以下函数用于加载视图页面:
$this->load->view('page_name');
将您的视图的页面名称写在括号中。除非使用其他扩展名,否则无需指定.php。
现在,转到您的控制器文件(Main.php)并编写此代码,如下所示。
控制器是模型和视图之间的中介,用于处理HTTP请求并生成网页。它是Web应用程序上每个请求的中心。
考虑以下URI,
abc.com/index.php/front/
在此URI中,CodeIgniter尝试查找Front.php文件和Front类。
看一下上面的快照,控制器的文件名是Main.php (首字母必须大写),而类名是Main (首字母必须大写)。
URL中未提及文件名时,默认加载的默认控制器中指定的文件。默认情况下,它是welcome.php,这是安装CodeIgniter之后显示的第一页。
带URL
localhost/codeigniter/
由于URL中未提及文件名,因此将加载Welcome.php。
尽管根据需要,您可以在文件application / config / routes.php中更改默认控制器。
$route['default_controller'] = ' ';
在这里,指定您要默认加载的文件名。
要使用构造函数,您需要提及以下代码行,
parent::_construct()
代替使用“查询字符串”方法,它使用基于段的方法。
其结构如下
abc.com/class/function/ID
该类表示需要调用的控制器类。
该函数是被调用的方法。
ID是传递给控制器的附加段。
在CodeIgniter中,Inhibitor是一个错误处理程序类,它使用本机PHP函数(例如set_exception_handler,set_error_handler,register_shutdown_function)来处理解析错误,异常和致命错误。
默认情况下,控制器始终调用索引方法。如果要调用其他方法,则将其写入控制器的文件中,并在调用函数指定其名称。
查看URL。没有提及方法名称。因此,默认情况下会加载索引方法。
URI的第二部分确定正在调用的方法。如果要覆盖它,则可以使用_remap()方法。即使URI不同,也总是调用_remap方法。它覆盖URI。例如:
public function _remap($methodName)
{
if ($methodName === 'a_method')
{
$this->method();
}
else
{
$this->defaultMethod();
}
}
助手是用于帮助用户执行特定任务的一组功能。
URL Helpers:用于创建链接。
文本助手:用于文本格式。
Cookies助手:用于读取和设置Cookie。
要加载多个帮助程序文件,请在数组中指定它们,
$this->load->helper(
array('helper1', 'helper2', 'helper3')
);
CodeIgniter提供了一组丰富的库。它是CodeIgniter的重要组成部分,因为它提高了应用程序的开发速度。它位于系统/库中。
可以如下加载
$this->load->library('class_name');
有三种创建库的方法,
它应该放在application / libraries文件夹中。
是的,我们可以通过添加一种或两种方法来向本机库添加一些扩展功能。它用您的版本替换了整个库。因此最好扩展类。扩展和替换几乎相同,只有以下例外。
例如,要将其扩展到本机Calendar,请在application / libraries文件夹中创建一个文件MY_Calendar.php。您声明为MY_Calendar类的课程扩展了CI_Calendar}
您必须构建文件名application / core / MY_Input.php并使用Class MY_Input扩展CI_Input {}声明您的类,以扩展CodeIgniter中的本机输入类。
路由是一种可以根据要求定义URL的技术,而不是使用预定义的URL。可以使用通配符或正则表达式以两种方式对路由进行分类。
有两种类型的通配符:
正则表达式也用于重定向路由。
您可以创建正则表达式来运行URL。
配置URL路由有许多目的。
挂钩是CodeIgniter中的一项功能,它提供了一种无需更改核心文件即可更改框架内部工作的方法。它使您可以在CodeIgniter中使用特定路径执行脚本。通常,它在application / config / hooks.php文件中定义。
要启用挂钩,请转到application / config / config.php /文件并将其设置为TRUE,如下所示,
$config['enable_hooks'] = TRUE;
CodeIgniter中不同类型的挂钩点的列表:
这些是具有父类和许多子类的特殊类型的库。这些子类有权访问父类,但不能访问其兄弟姐妹。驱动程序位于system / libraries文件夹中。
要初始化驱动程序,请编写以下语法,
$this->load->driver('class_name');
在这里,class_name是驱动程序名称。
创建驱动程序分三个步骤:
要同时连接多个数据库,请执行以下操作,
$db1 = $this->load->database('group_one', TRUE);
$db1 = $this->load->database('group_two', TRUE);
$this>db>insertid();
CodeIgniter安全方法有助于创建安全的应用程序并处理输入数据。方法如下:
XSS代表跨站点脚本。 Codeigniter包含一个跨站点脚本黑客防范过滤器。 XSS过滤器的目标方法是触发JavaScript或其他类型的可疑代码。如果检测到任何东西,它将把数据转换成字符实体。
XSS过滤使用xss_clean()方法来过滤数据。
$data = $this->security->xss_clean($data);
有一个可选的第二个参数is_image,用于测试映像是否受到XSS攻击。当此参数设置为TRUE时,它不会返回更改后的字符串。相反,如果图像是安全的,则返回TRUE,如果包含恶意信息,则返回FALSE。
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
//file failed in xss test
}
有多种方法可以防止CodeIgniter出现CSRF。最常用的方法是使用网站每个页面中的隐藏字段。隐藏的字段存储在用户的会话中。每个HTTP请求都会更改该字段。可以在对网站的每个请求中检测到用户。始终将隐藏值与会话中保存的值进行比较。如果相同,则请求有效。
您可以通过编辑config.php文件并将其设置为来启用保护
要启用CSRF,请在application / config / config.php文件中的FALSE中使以下语句为TRUE。
$config['csrf_protection'] = TRUE;
CSRF攻击迫使登录的受害者的浏览器将伪造的HTTP请求(包括受害者的会话cookie和其他身份验证信息)发送到Web应用程序。
例如,假设您有一个带有表单的网站。攻击者可以在其站点上创建伪造表单。该表格可能包含隐藏的输入和恶意数据。该表格不会发送到攻击者的网站,实际上,它是到达您的网站的。考虑到该表格是真实的,您的网站将对其进行处理。
现在,假设攻击者的表单指向您网站中的删除表单。如果用户登录并重定向到攻击者的站点,然后执行搜索,则该用户的帐户将被删除,而他不认识他。那就是CSRF攻击。
为了防止CSRF,我们需要同时连接HTTP请求,表单请求和表单提交。有几种方法可以执行此操作,但是在CodeIgniter中使用了隐藏字段,称为CSRF令牌。 CSRF令牌是随发送的每个HTTP请求而变化的随机值。
对于每个请求,都会生成一个新的CSRF令牌。创建对象时,将设置令牌的名称和值。
$this->csrf_cookie_name = $this->csrf_token_name;
$this->_csrf_set_hash();
它的函数是
function _csrf_set_hash()
{
if ($this->csrf_hash == '')
{
if ( isset($_COOKIE[$this->csrf_cookie_name] ) AND
$_COOKIE[$this->csrf_cookie_name] != '' )
{
$this->csrf_hash = $_COOKIE[$this->csrf_cookie_name];
} else {
$this->csrf_hash = md5(uniqid(rand(), TRUE));
}
}
return $this->csrf_hash;
}