📜  40个CodeIgniter面试问题

📅  最后修改于: 2021-01-01 03:41:10             🧑  作者: Mango

CodeIgniter面试问题

下面列出了最常见的CodeIgniter面试问题和答案。

1)什么是CodeIgniter?

CodeIgniter是一个开放源代码且功能强大的框架,用于在PHP上开发Web应用程序。它大致基于MVC模式,类似于Cake PHP。 CodeIgniter包含库,简单的界面和逻辑结构,用于访问这些库,插件,帮助程序和其他一些资源,这些资源更容易解决了PHP的复杂功能,并保持了高性能。它简化了PHP代码,并在更短的时间内发布了一个完全交互式,动态的网站。

2)CodeIgniter最突出的功能是什么?

CodeIgniter最突出的功能列表:

  • 这是一个开放源代码框架,可以免费使用。
  • 它的重量极轻。
  • 它基于模型视图控制器(MVC)模式。
  • 它具有功能齐全的数据库类,并支持多个平台。
  • 它是可扩展的。您可以通过使用库,助手来轻松扩展系统。
  • 优秀的文档。

3)解释CodeIgniter的文件夹结构。

如果下载并解压缩CodeIgniter,将获得以下文件结构/文件夹结构:

应用

  • 快取
  • 设定档
  • 控制器
  • 核心
  • 错误
  • 帮手
  • 钩子
  • 语言
  • 图书馆
  • 日志
  • 楷模
  • 第三方
  • 意见

系统

  • 核心
  • 数据库
  • 字型
  • 帮手
  • 语言
  • 图书馆

4)解释CodeIgniter架构。

从技术角度来看,CodeIgniter是动态实例化(轻量级),松散耦合(组件彼此之间的依赖很少)并且具有组件奇异性(每个类和函数都严格地针对其目的)。

CodeIgniter中的数据流

5)解释CodeIgniter中的MVC。

CodeIgniter框架基于MVC模式。 MVC是一种软件,可为您提供与演示视图不同的逻辑视图。因此,网页包含最少的脚本。

  • 模型-控制器管理模型。它代表您的数据结构。模型类包含一些函数,通过这些函数可以在数据库中插入,检索或更新信息。
  • 视图-视图是呈现在用户面前的信息。它可以是网页,也可以是页面的一部分,例如页眉和页脚。
  • 控制器-控制器是模型和视图之间的中介,以处理HTTP请求并生成网页。控制器收到的所有请求都将传递到模型并进行查看以处理信息。

6)说明CodeIgniter中的模型。

模型的职责是处理所有数据逻辑和表示形式,并在视图中加载数据。它存储在application / models文件夹中。

模型文件的基本结构

在这里,ModelName是模型文件的名称。请记住,类的第一个字母必须是大写字母,然后是其他小写字母,并且应该与文件名相同。它扩展了基本CodeIgniter模型,以便父模型文件的所有内置方法都继承到新创建的文件。

7)如何在CodeIgniter中添加或加载模型?

要在控制器功能中加载模型,请使用以下函数:

$this->load->model('ModelName');

如果您的模型文件位于模型文件夹的子目录中,则必须提及完整路径。例如,如果您的文件位置是application / controller / models / project / ModelName。然后,您的文件将如下所示加载,

$this->load->model('project/ModelName');  

8)如何手动将模型连接到数据库?

要手动连接数据库,请使用以下语法,

$this->load->database();

9)在CodeIgniter中解释视图。

View文件夹包含所有标记文件,如页眉,页脚,侧边栏等。可以通过将其嵌入控制器文件中的任何位置来重复使用它们。它们不能直接调用,必须将它们加载到控制器的文件中。

查看语法

创建一个文件并将其保存在application / views文件夹中。例如,我们创建了一个文件Firstview.php,

10)如何在CodeIgniter中加载视图?

无法直接访问视图。它始终加载在控制器文件中。以下函数用于加载视图页面:

$this->load->view('page_name');

将您的视图的页面名称写在括号中。除非使用其他扩展名,否则无需指定.php。

现在,转到您的控制器文件(Main.php)并编写此代码,如下所示。

11)说明CodeIgniter中的控制器。

控制器是模型和视图之间的中介,用于处理HTTP请求并生成网页。它是Web应用程序上每个请求的中心。

考虑以下URI,

abc.com/index.php/front/

在此URI中,CodeIgniter尝试查找Front.php文件和Front类。

控制器语法

看一下上面的快照,控制器的文件名是Main.php (首字母必须大写),而类名是Main (首字母必须大写)。

12)CodeIgniter中的默认控制器是什么?

URL中未提及文件名时,默认加载的默认控制器中指定的文件。默认情况下,它是welcome.php,这是安装CodeIgniter之后显示的第一页。

带URL

localhost/codeigniter/

由于URL中未提及文件名,因此将加载Welcome.php。

尽管根据需要,您可以在文件application / config / routes.php中更改默认控制器。

$route['default_controller'] = ' ';

在这里,指定您要默认加载的文件名。

13)您将如何在CodeIgniter中调用构造函数?

要使用构造函数,您需要提及以下代码行,

parent::_construct()

14)基本的CodeIgniter URL结构是什么?

代替使用“查询字符串”方法,它使用基于段的方法。

其结构如下

abc.com/class/function/ID

该类表示需要调用的控制器类。

函数是被调用的方法。

ID是传递给控制器的附加段。

15)什么是CodeIgniter的抑制剂?

在CodeIgniter中,Inhibitor是一个错误处理程序类,它使用本机PHP函数(例如set_exception_handler,set_error_handler,register_shutdown_function)来处理解析错误,异常和致命错误。

16)CodeIgniter中的默认方法名称是什么?

默认情况下,控制器始终调用索引方法。如果要调用其他方法,则将其写入控制器的文件中,并在调用函数指定其名称。

查看URL。没有提及方法名称。因此,默认情况下会加载索引方法。

17)解释CodeIgniter中的重映射方法调用。

URI的第二部分确定正在调用的方法。如果要覆盖它,则可以使用_remap()方法。即使URI不同,也总是调用_remap方法。它覆盖URI。例如:

public function _remap($methodName)
{
            if ($methodName === 'a_method')
            {
            $this->method();
            }
            else
            {
            $this->defaultMethod();
            }
}

18)什么是CodeIgniter的助手?如何加载帮助文件?

助手是用于帮助用户执行特定任务的一组功能。

URL Helpers:用于创建链接。

文本助手:用于文本格式。

Cookies助手:用于读取和设置Cookie。

19)如何加载多个帮助文件?

要加载多个帮助程序文件,请在数组中指定它们,

$this->load->helper(
array('helper1', 'helper2', 'helper3')
);

20)解释CodeIgniter库。您将如何加载?

CodeIgniter提供了一组丰富的库。它是CodeIgniter的重要组成部分,因为它提高了应用程序的开发速度。它位于系统/库中。

可以如下加载

$this->load->library('class_name');

21)如何在CodeIgniter中创建库?

有三种创建库的方法,

  • 创建一个全新的库
  • 扩展本地库
  • 替换本机库

22)CodeIgniter结构中新存储的库在哪里?

它应该放在application / libraries文件夹中。

23)可以在CodeIgniter中扩展本机库吗?

是的,我们可以通过添加一种或两种方法来向本机库添加一些扩展功能。它用您的版本替换了整个库。因此最好扩展类。扩展和替换几乎相同,只有以下例外。

  • 类声明必须扩展父类。
  • 新的类名和文件名必须以MY_为前缀。

例如,要将其扩展到本机Calendar,application / libraries文件夹中创建一个文件MY_Calendar.php。您声明为MY_Calendar类的课程扩展了CI_Calendar}

24)如何在CodeIgniter中扩展类?

您必须构建文件名application / core / MY_Input.php并使用Class MY_Input扩展CI_Input {}声明您的类,以扩展CodeIgniter中的本机输入类。

25)CodeIgniter中的路由是什么?

路由是一种可以根据要求定义URL的技术,而不是使用预定义的URL。可以使用通配符或正则表达式以两种方式对路由进行分类。

通配符

有两种类型的通配符:

  • :num-series仅包含匹配的数字。
  • :any-series只包含匹配的字符。
正则表达式

正则表达式也用于重定向路由。

您可以创建正则表达式来运行URL。

26)为什么需要配置URL路由?

配置URL路由有许多目的。

  • 提高页面访问量。
  • 向用户隐藏代码复杂性。

27)CodeIgniter中的钩子是什么?

挂钩是CodeIgniter中的一项功能,它提供了一种无需更改核心文件即可更改框架内部工作的方法。它使您可以在CodeIgniter中使用特定路径执行脚本。通常,它在application / config / hooks.php文件中定义。

28)如何启用CodeIgniter挂钩?

要启用挂钩,请转到application / config / config.php /文件并将其设置为TRUE,如下所示,

$config['enable_hooks'] = TRUE;

29)CodeIgniter中有哪些不同类型的挂钩点?

CodeIgniter中不同类型的挂钩点的列表:

  • post_controller_constructor-在启动控制器之后但在任何方法调用之前立即调用它。
  • pre_controller-在调用控制器之前立即调用它。至此,所有类,安全性检查和路由均已完成。
  • post_sytem-在系统执行结束时将最终页面发送到浏览器后调用。
  • pre_system-在系统执行之前被调用。此时,仅基准和钩子类已加载。
  • cache_override-它使您可以在输出类中调用函数。
  • display_override-用于在文件执行结束时发送最后一页。
  • post_controller-控制器完全执行后立即调用。

30)什么是CodeIgniter驱动程序?

这些是具有父类和许多子类的特殊类型的库。这些子类有权访问父类,但不能访问其兄弟姐妹。驱动程序位于system / libraries文件夹中。

31)如何在CodeIgniter中初始化驱动程序?

要初始化驱动程序,请编写以下语法,

$this->load->driver('class_name');

在这里,class_name是驱动程序名称。

32)如何在CodeIgniter中创建驱动程序?

创建驱动程序分三个步骤:

  • 制作文件结构
  • 制作驱动程序清单
  • 制作驱动程序

33)如何在CodeIgniter中连接多个数据库?

要同时连接多个数据库,请执行以下操作,

$db1 = $this->load->database('group_one', TRUE);
$db1 = $this->load->database('group_two', TRUE);

34)如何在CodeIgniter模型中打印SQL语句?

$this>db>insertid();

35)什么是CodeIgniter安全方法?

CodeIgniter安全方法有助于创建安全的应用程序并处理输入数据。方法如下:

  • XSS过滤
  • CSRF(跨站伪造)
  • 类参考

36)XSS安全参数是什么?

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
    }

37)如何防止CodeIgniter进入CSRF?

有多种方法可以防止CodeIgniter出现CSRF。最常用的方法是使用网站每个页面中的隐藏字段。隐藏的字段存储在用户的会话中。每个HTTP请求都会更改该字段。可以在对网站的每个请求中检测到用户。始终将隐藏值与会话中保存的值进行比较。如果相同,则请求有效。

38)如何启用CSRF?

您可以通过编辑config.php文件并将其设置为来启用保护

要启用CSRF,请在application / config / config.php文件中的FALSE中使以下语句为TRUE。

$config['csrf_protection'] = TRUE;

39)CodeIgniter中的CSRF攻击是什么?

CSRF攻击迫使登录的受害者的浏览器将伪造的HTTP请求(包括受害者的会话cookie和其他身份验证信息)发送到Web应用程序。

例如,假设您有一个带有表单的网站。攻击者可以在其站点上创建伪造表单。该表格可能包含隐藏的输入和恶意数据。该表格不会发送到攻击者的网站,实际上,它是到达您的网站的。考虑到该表格是真实的,您的网站将对其进行处理。

现在,假设攻击者的表单指向您网站中的删除表单。如果用户登录并重定向到攻击者的站点,然后执行搜索,则该用户的帐户将被删除,而他不认识他。那就是CSRF攻击。

40)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;
}