CodeIgniter 快速指南



CodeIgniter - 概述

CodeIgniter 是一个应用程序开发框架,可用于使用 PHP 开发网站。它是一个开源框架。它具有非常丰富的功能集,可以提高网站开发工作的速度。

如果您精通 PHP,那么 CodeIgniter 将使您的任务更容易。它具有非常丰富的库和助手。通过使用 CodeIgniter,如果您是从头开始开发网站,那么您将节省大量时间。不仅如此,使用 CodeIgniter 构建的网站也很安全,因为它能够防止通过网站发生的各种攻击。

CodeIgniter 功能

下面列出了一些 CodeIgniter 的重要功能:

  • 基于模型-视图-控制器 (MVC) 的系统

  • 极其轻量级

  • 支持多个平台的完整功能数据库类。

  • 查询生成器数据库支持

  • 表单和数据验证

  • 安全和 XSS 过滤

  • 会话管理

  • 电子邮件发送类。支持附件、HTML/文本电子邮件、多种协议(sendmail、SMTP 和 Mail)等。

  • 图像处理库(裁剪、调整大小、旋转等)。支持 GD、ImageMagick 和 NetPBM

  • 文件上传类

  • FTP 类

  • 本地化

  • 分页

  • 数据加密

  • 基准测试

  • 全页面缓存

  • 错误日志记录

  • 应用程序分析

  • 日历类

  • 用户代理类

  • Zip 编码类

  • 模板引擎类

  • Trackback 类

  • XML-RPC 库

  • 单元测试类

  • 搜索引擎友好 URL

  • 灵活的 URI 路由

  • 支持钩子和类扩展

  • 大量的“助手”函数库

CodeIgniter - 安装

安装 CodeIgniter 非常简单。只需按照以下步骤操作:

  • 步骤 1 - 从链接 CodeIgniter 下载 CodeIgniter

  • 步骤 2 - 解压缩文件夹。

  • 步骤 3 - 将所有文件和文件夹上传到您的服务器。

  • 步骤 4 - 将所有文件上传到服务器后,访问服务器的 URL,例如 www.domain-name.com。

访问 URL 后,您将看到以下屏幕:

Installing CodeIgniter

CodeIgniter - 应用程序架构

CodeIgniter 应用程序的架构如下所示。

Architecture of CodeIgniter
  • 如图所示,每当请求到达 CodeIgniter 时,它将首先转到index.php页面。

  • 在第二步中,路由将决定是将此请求传递到步骤 3 进行缓存,还是将此请求传递到步骤 4 进行安全检查。

  • 如果请求的页面已存在于缓存中,则路由将请求传递到步骤 3,并且响应将返回给用户。

  • 如果请求的页面不存在于缓存中,则路由将请求的页面传递到步骤 4 进行安全检查。

  • 在将请求传递到应用程序控制器之前,会检查提交数据的安全性。经过安全检查后,应用程序控制器加载必要的模型、库、助手、插件脚本,并将其传递给视图

  • 视图将使用可用数据呈现页面,并将其传递到缓存。由于请求的页面之前未被缓存,因此这次它将被缓存到缓存中,以便将来快速处理此页面。

目录结构

下图显示了 CodeIgniter 的目录结构。

Directory Structure

CodeIgniter 目录结构分为 3 个文件夹:

  • 应用程序
  • 系统
  • 用户指南

应用程序

顾名思义,应用程序文件夹包含您正在构建的应用程序的所有代码。这是您开发项目的文件夹。应用程序文件夹包含几个其他文件夹,如下所述:

  • 缓存 - 此文件夹包含应用程序的所有缓存页面。这些缓存页面将提高访问页面的整体速度。

  • 配置 - 此文件夹包含配置应用程序的各种文件。借助config.php文件,用户可以配置应用程序。使用database.php文件,用户可以配置应用程序的数据库。

  • 控制器 - 此文件夹包含应用程序的控制器。它是应用程序的基本部分。

  • 核心 - 此文件夹将包含应用程序的基本类。

  • 助手 - 在此文件夹中,您可以放置应用程序的助手类。

  • 钩子 - 此文件夹中的文件提供了一种方法来利用和修改框架的内部工作原理,而无需修改核心文件。

  • 语言 - 此文件夹包含与语言相关的文件。

  • - 此文件夹包含为您的应用程序开发的库的文件。

  • 日志 - 此文件夹包含与系统日志相关的文件。

  • 模型 - 数据库登录将放在此文件夹中。

  • 第三方 - 在此文件夹中,您可以放置任何将用于您的应用程序的插件。

  • 视图 - 应用程序的 HTML 文件将放在此文件夹中。

系统

此文件夹包含 CodeIgniter 核心代码、库、助手和其他文件,这些文件有助于简化编码。这些库和助手在 Web 应用程序开发中加载并使用。

此文件夹包含所有重要的 CodeIgniter 代码,并组织到各种文件夹中:

  • 核心 - 此文件夹包含 CodeIgniter 的核心类。不要在此处修改任何内容。您的所有工作都将在应用程序文件夹中进行。即使您的目的是扩展 CodeIgniter 核心,您也必须使用钩子来完成,而钩子位于应用程序文件夹中。

  • 数据库 - 数据库文件夹包含核心数据库驱动程序和其他数据库实用程序。

  • 字体 - 字体文件夹包含与字体相关的的信息和实用程序。

  • 助手 - 助手文件夹包含标准的 CodeIgniter 助手(如日期、cookie 和 URL 助手)。

  • 语言 - 语言文件夹包含语言文件。您可以暂时忽略它。

  • - 库文件夹包含标准的 CodeIgniter 库(以帮助您处理电子邮件、日历、文件上传等)。您可以创建自己的库或扩展(甚至替换)标准库,但这些库将保存在application/libraries目录中,以使它们与保存在此特定文件夹中的标准 CodeIgniter 库分开。

用户指南

这是您使用 CodeIgniter 的用户指南。它基本上是 CodeIgniter 网站上用户指南的离线版本。使用它,可以学习各种库、助手和类的功能。建议在使用 CodeIgniter 构建您的第一个 Web 应用程序之前阅读本用户指南。

除了这三个文件夹之外,还有一个名为“index.php”的重要文件。在此文件中,我们可以设置应用程序环境和错误级别,并且可以定义系统和应用程序文件夹名称。如果您对要执行的操作了解不足,建议不要编辑这些设置。

CodeIgniter - MVC 框架

CodeIgniter 基于模型-视图-控制器 (MVC) 开发模式。MVC 是一种软件方法,它将应用程序逻辑与表示分离。在实践中,它允许您的网页包含最少的脚本,因为表示与 PHP 脚本是分开的。

MVC Framework
  • 模型表示您的数据结构。通常,您的模型类将包含帮助您检索、插入和更新数据库中信息的函数。

  • 视图是呈现给用户的信息。视图通常是网页,但在 CodeIgniter 中,视图也可以是页面片段,例如页眉或页脚。它也可以是 RSS 页面或任何其他类型的“页面”。

  • 控制器充当模型、视图和处理 HTTP 请求并生成网页所需的任何其他资源之间的中介。

CodeIgniter - 基本概念

控制器

控制器是一个简单的类文件。顾名思义,它通过 URI 控制整个应用程序。

创建控制器

首先,转到application/controllers文件夹。您会在那里找到两个文件,index.htmlWelcome.php。这些文件随 CodeIgniter 一起提供。

保持这些文件不变。在同一路径下创建一个名为“Test.php”的新文件。在该文件中写入以下代码:

<?php 
   class Test extends CI_Controller {
  
      public function index() { 
         echo "Hello World!"; 
      } 
   } 
?>

Test类扩展了一个名为CI_Controller的内置类。每当您想要创建自己的控制器类时,都必须扩展此类。

调用控制器

可以通过以下 URI 调用上述控制器:

http://www.your-domain.com/index.php/test

请注意上面 URI 中 index.php 后的“test”一词。这表示控制器的类名。由于我们为控制器指定了名称“Test”,因此我们在 index.php 后写了“test”。类名必须以大写字母开头,但当我们通过 URI 调用该控制器时,我们需要写小写字母。调用控制器的常规语法如下:

http://www.your-domain.com/index.php/controller/method-name

创建和调用构造方法

让我们修改上述类并创建一个名为“hello”的另一个方法。

<?php 
   class Test extends CI_Controller {  
	
      public function index() { 
         echo "This is default function."; 
      } 
  
      public function hello() { 
         echo "This is hello function."; 
      } 
   } 
?>

我们可以通过以下三种方式执行上述控制器:

在浏览器中访问第一个 URI 后,我们将获得如下所示的输出。如您所见,我们获得了方法“index”的输出,即使我们没有在 URI 中传递方法的名称。我们只在 URI 中使用了控制器名称。在这种情况下,CodeIgniter 调用默认方法“index”。

Index output

在浏览器中访问第二个 URI 后,我们将获得与上图相同的输出。在这里,我们在 URI 中的控制器名称后传递了方法的名称。由于方法的名称为“index”,因此我们获得了相同的输出。

在浏览器中访问第三个URI,我们会得到如下所示的输出。正如你所看到的,我们得到了方法“hello”的输出,因为我们在URI中控制器“test”的名称后面传递了“hello”作为方法名称。

Hello Output

要点

  • 控制器类的名称必须以大写字母开头。

  • 控制器必须使用小写字母调用。

  • 不要使用方法名称与父类相同,因为它会覆盖父类的功能。

视图

这可以是一个简单或复杂的网页,可以通过控制器调用。网页可能包含标题、页脚、侧边栏等。视图不能直接调用。让我们创建一个简单的视图。在application/views下创建一个名为“test.php”的新文件,并将下面给出的代码复制到该文件中。

<!DOCTYPE html> 
<html lang = "en"> 

   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter View Example</title> 
   </head>
	
   <body> 
      CodeIgniter View Example 
   </body>
	
</html>

更改application/controllers/test.php文件的代码,如下所示。

加载视图

视图可以通过以下语法加载:

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

其中name是要渲染的视图文件。如果你计划将视图文件存储在某个目录中,则可以使用以下语法:

$this->load->view('directory-name/name');

没有必要指定扩展名php,除非使用了.php以外的其他扩展名。

index()方法调用view方法并将“test”作为参数传递给view()方法,因为我们将html代码存储在application/views/test.php下的“test.php”文件中。

<?php 
   class Test extends CI_Controller { 
	
      public function index() { 
         $this->load->view('test'); 
      } 
   } 
?>

以下是以上代码的输出:

Test output

下图说明了所有内容的工作原理:

Flow Chart

模型

模型类旨在处理数据库中的信息。例如,如果你使用CodeIgniter来管理应用程序中的用户,那么你必须有一个模型类,其中包含插入、删除、更新和检索用户数据的函数。

创建模型类

模型类存储在application/models目录中。以下代码展示了如何在CodeIgniter中创建模型类。

<?php 
   Class Model_name extends CI_Model { 
	
      Public function __construct() { 
         parent::__construct(); 
      } 
   } 
?> 

其中Model_name是要赋予的模型类的名称。每个模型类都必须继承CodeIgniter的CI_Model类。模型类的第一个字母必须是大写字母。以下是用户模型类的代码。

<?php 
   Class User_model extends CI_Model {
	
      Public function __construct() { 
         parent::__construct(); 
      } 
		
   } 
?>

以上模型类必须保存为User_model.php。类名和文件名必须相同。

加载模型

模型可以在控制器中调用。以下代码可用于加载任何模型。

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

其中model_name是要加载的模型的名称。加载模型后,你可以像下面这样简单地调用它的方法。

$this->model_name->method();

自动加载模型

在某些情况下,你可能希望在整个应用程序中使用某些模型类。在这种情况下,最好自动加载它。

/*
| ---------------------------------------------------------------
|  Auto-Load Models
| ---------------------------------------------------------------
| Prototype:
|
|   $autoload['model'] = array('first_model', 'second_model');
|
| You can also supply an alternative model name to be assigned
| in the controller:
|  
|   $autoload['model'] = array('first_model' => 'first');
*/
$autoload['model'] = array();

如上图所示,将要自动加载的模型的名称传递到数组中,它将在系统初始化状态时自动加载,并在整个应用程序中可用。

辅助函数

顾名思义,它将帮助你构建你的系统。它被分成小的函数来提供不同的功能。CodeIgniter中提供了许多辅助函数,如下表所示。我们也可以构建自己的辅助函数。

辅助函数通常存储在你的system/helpersapplication/helpers目录中。自定义辅助函数存储在application/helpers目录中,系统辅助函数存储在system/helpers目录中。CodeIgniter将首先在你的application/helpers目录中查找。如果目录不存在或未找到指定的辅助函数,CodeIgniter将改为在你的全局system/helpers/目录中查找。每个辅助函数,无论是自定义辅助函数还是系统辅助函数,都必须在使用前加载。

序号 辅助函数名称及描述
1

数组辅助函数

数组辅助函数文件包含有助于处理数组的函数。

2

验证码辅助函数

验证码辅助函数文件包含有助于创建验证码图像的函数。

3

Cookie辅助函数

Cookie辅助函数文件包含有助于处理cookie的函数。

4

日期辅助函数

日期辅助函数文件包含有助于处理日期的函数。

5

目录辅助函数

目录辅助函数文件包含有助于处理目录的函数。

6

下载辅助函数

下载辅助函数允许你将数据下载到你的桌面。

7

邮件辅助函数

邮件辅助函数提供了一些辅助函数来处理邮件。有关更强大的邮件解决方案,请参阅CodeIgniter的邮件类。

8

文件辅助函数

文件辅助函数文件包含有助于处理文件的函数。

9

表单辅助函数

表单辅助函数文件包含有助于处理表单的函数。

10

HTML辅助函数

HTML辅助函数文件包含有助于处理HTML的函数。

11

词形变化辅助函数

词形变化辅助函数文件包含允许你将单词更改为复数、单数、驼峰式大小写等的函数。

12

语言辅助函数

语言辅助函数文件包含有助于处理语言文件的函数。

13

数字辅助函数

数字辅助函数文件包含有助于处理数字数据的函数。

14

路径辅助函数

路径辅助函数文件包含允许你处理服务器上的文件路径的函数。

15

安全辅助函数

安全辅助函数文件包含与安全相关的函数。

16

表情符号辅助函数

表情符号辅助函数文件包含允许你管理表情符号(表情)的函数。

17

字符串辅助函数

字符串辅助函数文件包含有助于处理字符串的函数。

18

文本辅助函数

文本辅助函数文件包含有助于处理文本的函数。

19

排版辅助函数

排版辅助函数文件包含有助于以语义相关的方式格式化文本的函数。

20

URL辅助函数

URL辅助函数文件包含有助于处理URL的函数。

21

XML辅助函数

XML辅助函数文件包含有助于处理XML数据的函数。

加载辅助函数

辅助函数可以如下所示加载:

$this->load->helper('name');

其中name是辅助函数的名称。例如,如果你想加载URL辅助函数,则可以加载为:

$this->load->helper('url');

路由

CodeIgniter拥有用户友好的URI路由系统,以便你可以轻松地重新路由URL。通常,URL字符串与其对应的控制器类/方法之间存在一对一的关系。URI中的段通常遵循以下模式:

your-domain.com/class/method/id/
  • **第一段**表示应调用的控制器类。

  • **第二段**表示应调用的类函数或方法。

  • **第三段**以及任何其他段表示将传递给控制器的ID和任何变量。

在某些情况下,你可能希望更改此默认路由机制。CodeIgniter提供了通过它你可以设置自己的路由规则的功能。

自定义路由规则

有一个特定的文件,你可以在其中处理所有这些。该文件位于application/config/routes.php。你会找到一个名为$route的数组,你可以在其中自定义你的路由规则。$route数组中的键将决定路由什么,值将决定路由到哪里。CodeIgniter中有三个保留路由。

序号 保留路由及描述
1

$route['default_controller']

此路由指示如果URI不包含任何数据,则应加载哪个控制器类,当人们加载你的根URL时,就会出现这种情况。建议你设置默认路由,否则默认情况下会出现404页面。我们可以在此处设置网站的主页,以便默认加载它。

2

$route['404_override']

此路由指示如果未找到请求的控制器,则应加载哪个控制器类。它将覆盖默认的404错误页面。它不会影响show_404()函数,该函数将继续加载application/views/errors/error_404.php中的默认error_404.php文件。

3

$route['translate_uri_dashes']

从布尔值可以看出,这并不是一个真正的路由。此选项使你能够自动将控制器和方法URI段中的连字符('-')替换为下划线,因此如果你需要这样做,则可以节省额外的路由条目。这是必需的,因为连字符不是有效的类或方法名称字符,如果你尝试使用它,则会导致致命错误。

路由可以通过**通配符**或使用**正则表达式**进行自定义,但请记住,这些自定义的路由规则必须位于保留规则之后。

通配符

我们可以使用两个通配符,如下所述:

  • (:num) - 它将匹配仅包含数字的段。

  • (:any) - 它将匹配包含任何字符的段。

示例

$route['product/:num']='catalog/product_lookup';

在以上示例中,如果在URL的第一段中找到文字“product”,并且在第二段中找到数字,则使用“catalog”类和“product_lookup”方法代替。

正则表达式

与通配符类似,我们也可以在$route数组键部分使用正则表达式。如果任何URI与正则表达式匹配,则它将路由到$route数组中设置的值部分。

示例

$route['products/([a-z]+)/(\d+)']='$1/id_$2';

在以上示例中,类似于products/shoes/123的URI将改为调用“shoes”控制器类和“id_123”方法。

CodeIgniter - 配置

设置好网站后,接下来要做的事情是配置网站。application/config文件夹包含一组设置网站基本配置的文件。

配置基本URL

网站的基本URL可以在application/config/config.php文件中配置。它是CodeIgniter根目录的URL。通常,这将是你的基本URL,带有一个尾部斜杠,例如

http://example.com/

如果未设置,则CodeIgniter将尝试猜测协议、域名和安装路径。但是,你应该始终明确配置此项,并且永远不要依赖自动猜测,尤其是在生产环境中。你可以在$config数组中使用键“base_url”配置基本URL,如下所示:

$config['base_url'] = 'http://your-domain.com';

数据库配置

网站的数据库可以在 application/config/database.php 文件中配置。通常我们需要为不同的环境(例如开发环境和生产环境)设置数据库。使用 CodeIgniter 中提供的多维数组,我们可以为不同的环境设置数据库。配置设置存储在如下所示的数组中。

$db['default'] = array( 
   'dsn'   => '', 
   'hostname' => 'localhost', 
   'username' => 'root', 
   'password' => '', 
   'database' => 'database_name', 
   'dbdriver' => 'mysqli', 
   'dbprefix' => '', 
   'pconnect' => TRUE, 
   'db_debug' => TRUE, 
   'cache_on' => FALSE, 
   'cachedir' => '', 
   'char_set' => 'utf8', 
   'dbcollat' => 'utf8_general_ci',
   'swap_pre' => '', 
   'encrypt' => FALSE, 
   'compress' => FALSE, 
   'stricton' => FALSE, 
   'failover' => array() 
);

除了主机名、用户名、密码、数据库和 dbdriver 之外,您可以将一些选项保留为默认值。

  • hostname − 在此处指定数据库的位置,例如 localhost 或 IP 地址

  • username − 在此处设置数据库的用户名。

  • password − 在此处设置数据库的密码。

  • database − 在此处设置数据库的名称。

  • dbdriver − 设置您正在使用的数据库类型,例如 MySQL、MySQLi、Postgre SQL、ODBC 和 MS SQL。

通过更改数组 $db 的键,您可以设置数据库的其他配置,如下所示。在这里,我们将键设置为 ‘test’ 以设置测试环境的数据库,同时保持其他数据库环境不变。

$db['test'] = array( 
   'dsn'   => '', 
   'hostname' => 'localhost', 
   'username' => 'root', 
   'password' => '', 
   'database' => 'database_name', 
   'dbdriver' => 'mysqli', 
   'dbprefix' => '', 
   'pconnect' => TRUE, 
   'db_debug' => TRUE, 
   'cache_on' => FALSE, 
   'cachedir' => '', 
   'char_set' => 'utf8', 
   'dbcollat' => 'utf8_general_ci', 
   'swap_pre' => '', 
   'encrypt' => FALSE, 
   'compress' => FALSE, 
   'stricton' => FALSE, 
   'failover' => array()
);

您可以通过更改变量的值来简单地切换到不同的环境,如下所示:

$active_group = ‘default’; //这将设置默认环境

$active_group = ‘test’; //这将设置测试环境

自动加载配置

此文件默认指定应加载哪些系统。为了使框架尽可能轻量级,默认情况下仅加载绝对最少的资源。应该自动加载经常使用的系统,而不是在本地级别重复加载它。以下是您可以自动加载的内容:

  • Libraries − 这是一个库列表,应该自动加载。提供如下所示的库列表,以便 CodeIgniter 自动加载。在此示例中,我们自动加载数据库、邮件和会话库。

$autoload['libraries'] = array('database', 'email', 'session');
  • Drivers − 这些类位于 system/libraries/ 或 application/libraries/ 目录中,但也被放置在它们自己的子目录中,并且它们扩展了 CI_Driver_Library 类。它们提供了多种可互换的驱动程序选项。以下是自动加载缓存驱动的示例。

$autoload['drivers'] = array('cache');
  • Helper files − 这是一个辅助文件列表,需要自动加载。提供如下所示的库列表,以便 CodeIgniter 自动加载。在给定的示例中,我们自动加载 URL 和文件辅助函数。

$autoload['helper'] = array('url', 'file');
  • Custom config files − 这些文件仅在您创建了自定义配置文件时才用于使用。否则,请将其留空。以下是如何自动加载多个配置文件的示例。

$autoload['config'] = array('config1', 'config2');
  • Language files − 这是一个语言文件列表,应该自动加载。查看下面的示例。提供如下所示的语言列表,以便 CodeIgniter 自动加载。请记住,不要包含文件中的“_lang”部分。例如,“codeigniter_lang.php”将被引用为 array('codeigniter');

  • Models − 这是一个模型文件列表,应该自动加载。提供如下所示的模型列表,以便 CodeIgniter 自动加载。以下是如何自动加载多个模型文件的示例。

$autoload['model'] = array('first_model', 'second_model');

CodeIgniter - 使用数据库

像任何其他框架一样,我们也需要经常与数据库交互,而 CodeIgniter 使这项工作变得容易。它提供了一套丰富的功能来与数据库交互。

在本节中,我们将了解 CRUD(创建、读取、更新、删除)函数如何在 CodeIgniter 中工作。我们将使用 stud 表来选择、更新、删除和插入 stud 表中的数据。

表名:stud
roll_no int(11)
name varchar(30)

连接数据库

我们可以通过以下两种方式连接数据库:

  • 自动连接 − 可以使用文件 application/config/autoload.php 进行自动连接。自动连接将为每个页面加载数据库。我们只需要添加数据库库,如下所示:

$autoload['libraries'] = array(‘database’);
  • 手动连接 − 如果您只想对某些页面进行数据库连接,那么我们可以进行手动连接。我们可以在任何类中添加以下行来手动连接数据库。

$this->load->database();

在这里,我们没有传递任何参数,因为所有内容都设置在数据库配置文件 application/config/database.php 中

插入记录

要插入数据库中的记录,可以使用 insert() 函数,如下表所示:

语法

insert([$table = ''[, $set = NULL[, $escape = NULL]]])

参数

  • $table (string) − 表名

  • $set (array) − 字段/值对的关联数组

  • $escape (bool) − 是否转义值和标识符

返回值

成功时返回 TRUE,失败时返回 FALSE

返回类型

bool

以下示例显示如何在 stud 表中插入记录。$data 是一个数组,我们已在其中设置了数据,要将此数据插入到 stud 表中,我们只需要将此数组作为第二个参数传递给 insert 函数。

$data = array( 
   'roll_no' => ‘1’, 
   'name' => ‘Virat’ 
); 

$this->db->insert("stud", $data);

更新记录

要更新数据库中的记录,可以使用 update() 函数以及 set()where() 函数,如下表所示。set() 函数将设置要更新的数据。

语法

set($key[, $value = ''[, $escape = NULL]])

参数

  • $key (mixed) − 字段名称,或字段/值对的数组

  • $value (string) − 如果 $key 是单个字段,则为字段值

  • $escape (bool) − 是否转义值和标识符

返回值

CI_DB_query_builder 实例(方法链接)

返回类型

CI_DB_query_builder

where() 函数将决定更新哪个记录。

语法

where($key[, $value = NULL[, $escape = NULL]])

参数

  • $key (mixed) − 要比较的字段名称,或关联数组

  • $value (mixed) − 如果是单个键,则与此值进行比较

  • $escape (bool) − 是否转义值和标识符

返回值

DB_query_builder 实例

返回类型

object

最后,update() 函数将更新数据库中的数据。

语法

update([$table = ''[, $set = NULL[, $where = NULL[, $limit = NULL]]]])

参数

  • $table (string) − 表名

  • $set (array) − 字段/值对的关联数组

  • $where (string) − WHERE 子句

  • $limit (int) − LIMIT 子句

返回值

成功时返回 TRUE,失败时返回 FALSE

返回类型

bool
$data = array( 
   'roll_no' => ‘1’, 
   'name' => ‘Virat’ 
); 

$this->db->set($data); 
$this->db->where("roll_no", ‘1’); 
$this->db->update("stud", $data);

删除记录

要删除数据库中的记录,可以使用 delete() 函数,如下表所示:

语法

delete([$table = ''[, $where = ''[, $limit = NULL[, $reset_data = TRUE]]]])

参数

  • $table (mixed) − 要从中删除的表;字符串或数组

  • $where (string) − WHERE 子句

  • $limit (int) − LIMIT 子句

  • $reset_data (bool) − 将查询“写入”子句重置为 TRUE

返回值

CI_DB_query_builder 实例(方法链接)或失败时返回 FALSE

返回类型

mixed

使用以下代码删除 stud 表中的记录。第一个参数指示要删除记录的表名,第二个参数决定要删除哪个记录。

$this->db->delete("stud", "roll_no = 1");

选择记录

要选择数据库中的记录,可以使用 get 函数,如下表所示:

语法

get([$table = ''[, $limit = NULL[, $offset = NULL]]])

参数

  • $table (string) − 要查询的表数组

  • $limit (int) − LIMIT 子句

  • $offset (int) − OFFSET 子句

返回值

CI_DB_result 实例(方法链接)

返回类型

CI_DB_result

使用以下代码从数据库中获取所有记录。第一个语句从“stud”表中获取所有记录并返回对象,该对象将存储在 $query 对象中。第二个语句使用 $query 对象调用 result() 函数以获取所有记录作为数组。

$query = $this->db->get("stud"); 
$data['records'] = $query->result();

关闭连接

可以通过执行以下代码手动关闭数据库连接:

$this->db->close(); 

示例

创建一个名为 Stud_controller.php 的控制器类,并将其保存在 application/controller/Stud_controller.php

这是一个完整的示例,其中执行了上述所有操作。在执行以下示例之前,请根据本章开头提供的说明创建数据库和表,并在存储在 application/config/database.php 中的数据库配置文件中进行必要的更改

<?php 
   class Stud_controller extends CI_Controller {
	
      function __construct() { 
         parent::__construct(); 
         $this->load->helper('url'); 
         $this->load->database(); 
      } 
  
      public function index() { 
         $query = $this->db->get("stud"); 
         $data['records'] = $query->result(); 
			
         $this->load->helper('url'); 
         $this->load->view('Stud_view',$data); 
      } 
  
      public function add_student_view() { 
         $this->load->helper('form'); 
         $this->load->view('Stud_add'); 
      } 
  
      public function add_student() { 
         $this->load->model('Stud_Model');
			
         $data = array( 
            'roll_no' => $this->input->post('roll_no'), 
            'name' => $this->input->post('name') 
         ); 
			
         $this->Stud_Model->insert($data); 
   
         $query = $this->db->get("stud"); 
         $data['records'] = $query->result(); 
         $this->load->view('Stud_view',$data); 
      } 
  
      public function update_student_view() { 
         $this->load->helper('form'); 
         $roll_no = $this->uri->segment('3'); 
         $query = $this->db->get_where("stud",array("roll_no"=>$roll_no));
         $data['records'] = $query->result(); 
         $data['old_roll_no'] = $roll_no; 
         $this->load->view('Stud_edit',$data); 
      } 
  
      public function update_student(){ 
         $this->load->model('Stud_Model');
			
         $data = array( 
            'roll_no' => $this->input->post('roll_no'), 
            'name' => $this->input->post('name') 
         ); 
			
         $old_roll_no = $this->input->post('old_roll_no'); 
         $this->Stud_Model->update($data,$old_roll_no); 
			
         $query = $this->db->get("stud"); 
         $data['records'] = $query->result(); 
         $this->load->view('Stud_view',$data); 
      } 
  
      public function delete_student() { 
         $this->load->model('Stud_Model'); 
         $roll_no = $this->uri->segment('3'); 
         $this->Stud_Model->delete($roll_no); 
   
         $query = $this->db->get("stud"); 
         $data['records'] = $query->result(); 
         $this->load->view('Stud_view',$data); 
      } 
   } 
?>

创建一个名为 Stud_Model.php 的模型类,并将其保存在 application/models/Stud_Model.php

<?php 
   class Stud_Model extends CI_Model {
	
      function __construct() { 
         parent::__construct(); 
      } 
   
      public function insert($data) { 
         if ($this->db->insert("stud", $data)) { 
            return true; 
         } 
      } 
   
      public function delete($roll_no) { 
         if ($this->db->delete("stud", "roll_no = ".$roll_no)) { 
            return true; 
         } 
      } 
   
      public function update($data,$old_roll_no) { 
         $this->db->set($data); 
         $this->db->where("roll_no", $old_roll_no); 
         $this->db->update("stud", $data); 
      } 
   } 
?> 

创建一个名为 Stud_add.php 的视图文件,并将其保存在 application/views/Stud_add.php

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>Students Example</title> 
   </head> 
	
   <body> 
      <form method = "" action = "">
		
         <?php 
            echo form_open('Stud_controller/add_student');
            echo form_label('Roll No.'); 
            echo form_input(array('id'=>'roll_no','name'=>'roll_no')); 
            echo "<br/>"; 
			
            echo form_label('Name'); 
            echo form_input(array('id'=>'name','name'=>'name')); 
            echo "<br/>"; 
			
            echo form_submit(array('id'=>'submit','value'=>'Add')); 
            echo form_close(); 
         ?> 
		
      </form> 
   </body>
	
</html>

创建一个名为 Stud_edit.php 的视图文件,并将其保存在 application/views/Stud_edit.php

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>Students Example</title> 
   </head> 
	
   <body> 
      <form method = "" action = "">
		
         <?php 
            echo form_open('Stud_controller/update_student'); 
            echo form_hidden('old_roll_no',$old_roll_no); 
            echo form_label('Roll No.'); 
            echo form_input(array('id'⇒'roll_no',
               'name'⇒'roll_no','value'⇒$records[0]→roll_no)); 
            echo "
            "; 

            echo form_label('Name'); 
            echo form_input(array('id'⇒'name','name'⇒'name',
               'value'⇒$records[0]→name)); 
            echo "
            "; 

            echo form_submit(array('id'⇒'sub mit','value'⇒'Edit')); 
            echo form_close();
         ?> 
			
      </form> 
   </body>
	
</html>

创建一个名为 Stud_view.php 的视图文件,并将其保存在 application/views/Stud_view.php

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>Students Example</title> 
   </head>
	
   <body> 
      <a href = "<?php echo base_url(); ?>
         index.php/stud/add_view">Add</a>
		
      <table border = "1"> 
         <?php 
            $i = 1; 
            echo "<tr>"; 
            echo "<td>Sr#</td>"; 
            echo "<td>Roll No.</td>"; 
            echo "<td>Name</td>"; 
            echo "<td>Edit</td>"; 
            echo "<td>Delete</td>"; 
            echo "<tr>"; 
				
            foreach($records as $r) { 
               echo "<tr>"; 
               echo "<td>".$i++."</td>"; 
               echo "<td>".$r->roll_no."</td>"; 
               echo "<td>".$r->name."</td>"; 
               echo "<td><a href = '".base_url()."index.php/stud/edit/"
                  .$r->roll_no."'>Edit</a></td>"; 
               echo "<td><a href = '".base_url()."index.php/stud/delete/"
                  .$r->roll_no."'>Delete</a></td>"; 
               echo "<tr>"; 
            } 
         ?>
      </table> 
		
   </body>
	
</html>

application/config/routes.php 中的路由文件中进行以下更改,并在文件末尾添加以下行。

$route['stud'] = "Stud_controller"; 
$route['stud/add'] = 'Stud_controller/add_student'; 
$route['stud/add_view'] = 'Stud_controller/add_student_view'; 
$route['stud/edit/(\d+)'] = 'Stud_controller/update_student_view/$1'; 
$route['stud/delete/(\d+)'] = 'Stud_controller/delete_student/$1';

现在,让我们通过在浏览器中访问以下 URL 来执行此示例。将 yoursite.com 替换为您自己的 URL。

http://yoursite.com/index.php/stud

CodeIgniter - 库

CodeIgniter 框架的重要组成部分是它的库。它提供了一套丰富的库,间接地提高了应用程序的开发速度。系统库位于 system/libraries 中。我们只需要加载我们想要使用的库即可。库可以按如下所示加载:

$this->load->library('class name');

其中 class name 是我们要加载的库的名称。如果我们要加载多个库,那么我们可以简单地将数组作为参数传递给 library() 函数,如下所示:

$this->load->library(array('email', 'table'));

库类

库类位于 system/libraries 中。每个类都有各种函数来简化开发工作。下表显示了库类的名称及其描述。

序号 库类和描述
1

基准测试类

基准测试类始终处于活动状态,可以计算任何两个标记点之间的时间差。

2

缓存类

此类将缓存页面,以快速访问页面速度。

3

日历类

使用此类,您可以动态创建日历。

4

购物车类

使用此类,您可以添加或删除购物车中的商品。商品保存在会话中,并在用户浏览网站时保持活动状态。

5

配置类

可以使用此类检索配置首选项。此类会自动初始化。

6

邮件类

此类提供与邮件相关的功能,例如发送或回复邮件。

7

加密类

此类提供双向数据加密功能。

8

文件上传类

此类提供与文件上传相关的功能。您可以设置各种首选项,例如要上传的文件类型、文件大小等。

9

表单验证类

此类提供各种验证表单的功能。

10

FTP 类

此类提供各种与FTP相关的功能,例如将文件传输到远程服务器、移动、重命名或删除服务器上的文件。

11

图像处理类

借助此类,可以执行图像处理操作,例如调整大小、创建缩略图、裁剪、旋转、水印。

12

输入类

此类出于安全原因预处理输入数据。

13

语言类

此类用于国际化。

14

加载器类

此类加载元素,例如视图文件、驱动程序、辅助函数、模型等。

15

迁移类

此类提供与数据库迁移相关的功能。

16

输出类

此类将输出发送到浏览器,并缓存该网页。

17

分页类

此类为网页添加分页功能。

18

模板解析器类

模板解析器类可以对视图文件中包含的伪变量执行简单的文本替换。它可以解析简单的变量或变量标签对。

19

安全类

此类包含与安全相关的功能,例如XSS过滤、CSRF等。

20

会话库

此类提供维护应用程序会话的功能。

21

HTML表格

此类用于根据数组或数据库结果自动生成HTML表格。

22

Trackback 类

Trackback类提供允许您发送和接收Trackback数据的功能。

23

排版类

排版类提供有助于格式化文本的方法。

24

单元测试类

此类提供对应用程序进行单元测试并生成结果的功能。

25

URI类

URI类提供帮助您从URI字符串中检索信息的方法。如果您使用URI路由,您还可以检索有关重定向段的信息。

26

用户代理类

用户代理类提供帮助识别有关访问您网站的浏览器、移动设备或机器人的信息的功能。此外,您还可以获取推荐来源信息以及语言和支持的字符集信息。

27

XML-RPC和XML-RPC服务器类

CodeIgniter的XML-RPC类允许您向其他服务器发送请求,或设置您自己的XML-RPC服务器以接收请求。

28

Zip 编码类

此类用于创建数据的zip压缩文件。

创建库

CodeIgniter拥有丰富的库集,您可以在system/libraries文件夹中找到它们,但CodeIgniter不仅限于系统库,您也可以创建自己的库,这些库可以存储在application/libraries文件夹中。您可以通过三种方式创建库。

  • 创建新库
  • 扩展原生库
  • 替换原生库

创建新库

创建新库时,应牢记以下事项:

  • 文件名必须以大写字母开头,例如Mylibrary.php
  • 类名必须以大写字母开头,例如class Mylibrary
  • 类名和文件名必须匹配。

Mylibrary.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
   
   class Mylibrary {
	
      public function some_function() {
      }
   }
	
/* End of file Mylibrary.php */

加载自定义库

可以通过在控制器中简单地执行以下代码行来加载上述库。

$this->load->library(‘mylibrary’);

mylibrary是您的库的名称,您可以使用小写或大写字母编写它。使用库的名称,不带“.php”扩展名。加载库后,您还可以像下面所示调用该类的函数。

$this->mylibrary->some_function();

扩展原生库

有时,您可能需要向CodeIgniter提供的库中添加您自己的功能。CodeIgniter提供了一种机制,您可以通过该机制扩展原生库并添加您自己的函数。要实现这一点,您必须扩展原生库类的类。例如,如果您想扩展Email库,则可以按如下所示完成:

Class MY_Email extends CI_Email { 
}

在这里,在上面的示例中,MY_Email类扩展了原生库的邮件类CI_Email。此库可以通过加载邮件库的标准方式加载。将上述代码保存在My_Email.php文件中。

替换原生库

在某些情况下,您不希望按照原生库的工作方式使用它,而是希望用您自己的方式替换它。这可以通过替换原生库来完成。要实现这一点,您只需要使用与原生库中相同的类名即可。例如,如果您想替换Email类,则使用如下所示的代码。将您的文件名保存为Email.php,并将类名设置为CI_Email

Email.php

Class CI_Email { 
}

CodeIgniter - 错误处理

很多时候,在使用应用程序时,我们会遇到错误。如果错误没有得到妥善处理,这对用户来说是非常恼人的。CodeIgniter提供了一种简单的错误处理机制。

当应用程序处于开发模式而不是生产模式时,您希望显示这些消息,因为错误消息可以在开发阶段轻松解决。

可以通过更改index.php文件中给出的以下代码行来更改应用程序的环境。这可以设置为任何内容,但通常为此目的使用三个值(开发、测试、生产)。

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

不同的环境需要不同的错误报告级别。默认情况下,开发模式将显示错误,而测试和生产模式将隐藏错误。CodeIgniter提供以下三个函数来处理错误。

  • show_error()函数以HTML格式在屏幕顶部显示错误。

语法

show_error($message, $status_code, $heading = 'An Error Was Encountered')

参数

  • $message (混合) - 错误消息

  • $status_code (整数) - HTTP响应状态码

  • $heading (字符串) - 错误页面标题

返回类型

mixed
  • show_404()函数在您尝试访问不存在的页面时显示错误。

语法

show_404($page = '', $log_error = TRUE)

参数

  • $page (字符串) – URI字符串

  • $log_error (布尔) – 是否记录错误

返回类型

无效
  • log_message()函数用于写入日志消息。当您想要编写自定义消息时,这很有用。

语法

log_message($level, $message, $php_error = FALSE)

参数

  • $level (字符串) - 日志级别:'error'、'debug'或'info'

  • $message (字符串) - 要记录的消息

  • $php_error (布尔) - 我们是否正在记录本机的PHP错误消息

返回类型

无效

可以在application/config/config.php文件中启用日志记录。下面是config.php文件的屏幕截图,您可以在其中设置阈值。

/*
|--------------------------------------------------------------------------------
|   Error Logging Threshold
|--------------------------------------------------------------------------------
| You can enable error logging by setting a threshold over zero. The 
| threshold determines what gets logged. Threshold options are:
|
|   0 = Disable logging, Error logging TURNED OFF
|   1 = Error Message (including PHP errors)
|   2 = Debug Message
|   3 = Informational Messages
|   4 = All Messages
|
| You can also pass an array with threshold levels to show individual error types
|
|   array(2) = Debug Message, without Error Messages
| For a live site you'll usually only enable Errors (1) to be logged otherwise 
| your log files will fill up very fast.
|
*/
$config['log_threshold'] = 0;

您可以在application/log/中找到日志消息。在启用日志文件之前,请确保此目录可写。

各种错误消息模板可以在application/views/errors/cliapplication/views/errors/html中找到。

CodeIgniter - 文件上传

使用文件上传类,我们可以上传文件,我们还可以限制要上传的文件的类型和大小。请按照给定示例中所示的步骤了解CodeIgniter中的文件上传过程。

示例

复制以下代码并将其存储在application/view/Upload_form.php中。

<html>
 
   <head> 
      <title>Upload Form</title> 
   </head>
	
   <body> 
      <?php echo $error;?> 
      <?php echo form_open_multipart('upload/do_upload');?> 
		
      <form action = "" method = "">
         <input type = "file" name = "userfile" size = "20" /> 
         <br /><br /> 
         <input type = "submit" value = "upload" /> 
      </form> 
		
   </body>
	
</html>

复制下面给出的代码并将其存储在application/view/Upload_success.php

<html>
 
   <head> 
      <title>Upload Form</title> 
   </head>
	
   <body>  
      <h3>Your file was successfully uploaded!</h3>  
		
      <ul> 
         <?phpforeach ($upload_data as $item => $value):?> 
         <li><?php echo $item;?>: <?php echo $value;?></li> 
         <?phpendforeach; ?>
      </ul>  
		
      <p><?php echo anchor('upload', 'Upload Another File!'); ?></p>  
   </body>
	
</html>

复制下面给出的代码并将其存储在application/controllers/Upload.php中。在CodeIgniter的根目录(即application文件夹的父目录)中创建“uploads”文件夹。

<?php
  
   class Upload extends CI_Controller {
	
      public function __construct() { 
         parent::__construct(); 
         $this->load->helper(array('form', 'url')); 
      }
		
      public function index() { 
         $this->load->view('upload_form', array('error' => ' ' )); 
      } 
		
      public function do_upload() { 
         $config['upload_path']   = './uploads/'; 
         $config['allowed_types'] = 'gif|jpg|png'; 
         $config['max_size']      = 100; 
         $config['max_width']     = 1024; 
         $config['max_height']    = 768;  
         $this->load->library('upload', $config);
			
         if ( ! $this->upload->do_upload('userfile')) {
            $error = array('error' => $this->upload->display_errors()); 
            $this->load->view('upload_form', $error); 
         }
			
         else { 
            $data = array('upload_data' => $this->upload->data()); 
            $this->load->view('upload_success', $data); 
         } 
      } 
   } 
?>

application/config/routes.php中的路由文件中进行以下更改,并在文件末尾添加以下行。

$route['upload'] = 'Upload';

现在让我们通过在浏览器中访问以下URL来执行此示例。将yoursite.com替换为您自己的URL。

http://yoursite.com/index.php/upload

它将生成以下屏幕:

Upload Form

成功上传文件后,您将看到以下屏幕:

successfully uploaded

CodeIgniter - 发送邮件

在CodeIgniter中发送电子邮件非常容易。您还可以配置有关CodeIgniter中电子邮件的首选项。CodeIgniter提供以下功能来发送电子邮件:

  • 多种协议 - 邮件、Sendmail和SMTP
  • SMTP的TLS和SSL加密
  • 多个收件人
  • 抄送和密送
  • HTML或纯文本电子邮件
  • 附件
  • 自动换行
  • 优先级
  • BCC批处理模式,允许将大型邮件列表分解成小的BCC批次。
  • 电子邮件调试工具

电子邮件类具有以下功能,以简化发送电子邮件的工作。

序号 语法 参数 返回 返回类型
1 from($from[, $name = ''[, $return_path = NULL]])

$from (字符串) - “发件人”电子邮件地址

$name (字符串) - “发件人”显示名称

$return_path (字符串) - 可选的电子邮件地址,用于将未送达的邮件重定向到该地址

CI_Email实例(方法链) CI_Email
2 reply_to($replyto[, $name = ''])

$replyto (字符串) - 回复的电子邮件地址

$name (字符串) - 回复电子邮件地址的显示名称

CI_Email实例(方法链) CI_Email
2 to($to)

$to (混合) - 以逗号分隔的字符串或电子邮件地址数组

CI_Email实例(方法链) CI_Email
3 cc($cc)

$cc (混合) - 以逗号分隔的字符串或电子邮件地址数组

CI_Email实例(方法链) CI_Email
4 bcc($bcc[, $limit = ''])

$bcc (混合) - 以逗号分隔的字符串或电子邮件地址数组

$limit (整数) - 每个批次发送的最大电子邮件数量

CI_Email实例(方法链) CI_Email
5 subject($subject)

$subject (字符串) - 电子邮件主题行

CI_Email实例(方法链) CI_Email
6 message($body)

$body (字符串) - 电子邮件正文

CI_Email实例(方法链) CI_Email
7 set_alt_message($str)

$str (字符串) - 备用电子邮件正文

CI_Email实例(方法链) CI_Email
8 set_header($header, $value)

$header (字符串) - 标头名称

$value (字符串) - 标头值

CI_Email实例(方法链) CI_Email
9 clear([$clear_attachments = FALSE])

$clear_attachments (布尔) – 是否清除附件

CI_Email实例(方法链) CI_Email
10 send([$auto_clear = TRUE])

$auto_clear (布尔) - 是否自动清除邮件数据

CI_Email实例(方法链) CI_Email
11 attach($filename[, $disposition = ''[, $newname = NULL[, $mime = '']]])

$filename (字符串) - 文件名

$disposition (字符串) - 附件的“处置”。大多数电子邮件客户端都会根据此处使用的MIME规范做出自己的决定。iana

$newname (字符串) - 要在电子邮件中使用的自定义文件名

$mime (字符串) - 要使用的MIME类型(对缓冲数据很有用)

CI_Email实例(方法链) CI_Email
12 attachment_cid($filename)

$filename (字符串) - 现有的附件文件名

附件内容ID或如果未找到则为FALSE 字符串

发送电子邮件

要使用CodeIgniter发送电子邮件,首先您必须使用以下方法加载电子邮件库:

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

加载库后,只需执行以下函数来设置发送电子邮件的必要元素。from()函数用于设置 - 从哪里发送电子邮件,to()函数用于 - 向谁发送电子邮件。subject()message()函数用于设置电子邮件的主题和内容。

$this->email->from('[email protected]', 'Your Name');
$this->email->to('[email protected]');
 
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');

之后,执行如下所示的send()函数来发送电子邮件。

$this->email->send();

示例

创建一个控制器文件Email_controller.php并将其保存在application/controller/Email_controller.php中。

<?php 
   class Email_controller extends CI_Controller { 
 
      function __construct() { 
         parent::__construct(); 
         $this->load->library('session'); 
         $this->load->helper('form'); 
      } 
		
      public function index() { 
	
         $this->load->helper('form'); 
         $this->load->view('email_form'); 
      } 
  
      public function send_mail() { 
         $from_email = "[email protected]"; 
         $to_email = $this->input->post('email'); 
   
         //Load email library 
         $this->load->library('email'); 
   
         $this->email->from($from_email, 'Your Name'); 
         $this->email->to($to_email);
         $this->email->subject('Email Test'); 
         $this->email->message('Testing the email class.'); 
   
         //Send mail 
         if($this->email->send()) 
         $this->session->set_flashdata("email_sent","Email sent successfully."); 
         else 
         $this->session->set_flashdata("email_sent","Error in sending Email."); 
         $this->load->view('email_form'); 
      } 
   } 
?>

创建一个名为email_form.php的视图文件,并将其保存到application/views/email_form.php

<!DOCTYPE html> 
<html lang = "en"> 

   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter Email Example</title> 
   </head>
	
   <body> 
      <?php 
         echo $this->session->flashdata('email_sent'); 
         echo form_open('/Email_controller/send_mail'); 
      ?> 
		
      <input type = "email" name = "email" required /> 
      <input type = "submit" value = "SEND MAIL"> 
		
      <?php 
         echo form_close(); 
      ?> 
   </body>
	
</html>

修改application/config/routes.php文件中的routes.php文件,并在文件末尾添加以下行。

$route['email'] = 'Email_Controller';

访问以下链接执行以上示例。将yoursite.com替换为您网站的URL。

http://yoursite.com/index.php/email

CodeIgniter - 表单验证

验证是构建Web应用程序的重要过程。它确保我们获取的数据是正确且有效的,可以存储或处理。CodeIgniter使这项任务变得非常容易。让我们通过一个简单的例子来理解这个过程。

示例

创建一个视图文件myform.php,并将以下代码保存到application/views/myform.php中。此页面将显示一个表单,用户可以在其中提交姓名,我们将验证此页面以确保在提交时该字段不能为空。

<html>
 
   <head> 
      <title>My Form</title> 
   </head>
	
   <body>
      <form action = "" method = "">
         <?php echo validation_errors(); ?>  
         <?php echo form_open('form'); ?>  
         <h5>Name</h5> 
         <input type = "text" name = "name" value = "" size = "50" />  
         <div><input type = "submit" value = "Submit" /></div>  
      </form>  
   </body>
	
</html>

创建一个视图文件formsuccess.php,并将其保存到application/views/formsuccess.php中。如果表单验证成功,将显示此页面。

<html>
 
   <head> 
      <title>My Form</title>
   </head> 
	
   <body>  
      <h3>Your form was successfully submitted!</h3>  
      <p><?php echo anchor('form', 'Try it again!'); ?></p>  
   </body>
	
</html>

创建一个控制器文件Form.php,并将其保存到application/controller/Form.php中。此表单将显示错误(如果验证不正确),或重定向到formsuccess.php页面。

<?php
  
   class Form extends CI_Controller { 
	
      public function index() { 
         /* Load form helper */ 
         $this->load->helper(array('form'));
			
         /* Load form validation library */ 
         $this->load->library('form_validation');
			
         /* Set validation rule for name field in the form */ 
         $this->form_validation->set_rules('name', 'Name', 'required'); 
			
         if ($this->form_validation->run() == FALSE) { 
         $this->load->view('myform'); 
         } 
         else { 
            $this->load->view('formsuccess'); 
         } 
      }
   }
?>

application/config/routes.php中添加以下行。

$route['validation'] = 'Form';

让我们通过在浏览器中访问以下URL来执行此示例。此URL可能因您的网站而异。

http://yoursite.com/index.php/validation

它将生成以下屏幕:

Validation Form

我们在控制器中添加了一个验证 - 提交表单前“姓名”是必填字段。因此,如果您在不输入姓名字段的情况下单击提交按钮,则系统会要求您在提交前输入姓名,如下面的屏幕截图所示。

Not Validated Successfully

成功输入姓名后,您将被重定向到如下所示的屏幕。

Validated Successfully

在上面的示例中,我们使用了required规则设置。CodeIgniter中还有许多其他规则可用,如下所述。

验证规则参考

以下是所有可用的原生规则列表 -

规则 参数 描述 示例

required

如果表单元素为空,则返回FALSE。

matches

如果表单元素与参数中的元素不匹配,则返回FALSE。 matches[form_item]

regex_match

如果表单元素与正则表达式不匹配,则返回FALSE。 regex_match[/regex/]

differs

如果表单元素与参数中的元素不不同,则返回FALSE。 differs[form_item]

is_unique

如果表单元素对于参数中的表和字段名称不是唯一的,则返回FALSE。注意 - 此规则需要启用查询构建器才能工作。 is_unique[table.field]

min_length

如果表单元素短于参数值,则返回FALSE。 min_length[3]

max_length

如果表单元素长于参数值,则返回FALSE。 max_length[12]

exact_length

如果表单元素不完全等于参数值,则返回FALSE。 exact_length[8]

greater_than

如果表单元素小于或等于参数值或不是数字,则返回FALSE。 greater_than[8]

greater_than_equal_to

如果表单元素小于参数值或不是数字,则返回FALSE。 greater_than_equal_to[8]

less_than

如果表单元素大于或等于参数值或不是数字,则返回FALSE。 less_than[8]

less_than_equal_to

如果表单元素大于参数值或不是数字,则返回FALSE。 less_than_equal_to[8]

in_list

如果表单元素不在预定的列表中,则返回FALSE。 in_list[red,blue,green]

alpha

如果表单元素包含除字母字符以外的任何内容,则返回FALSE。

alpha_numeric

如果表单元素包含除字母数字字符以外的任何内容,则返回FALSE。

alpha_numeric_spaces

如果表单元素包含除字母数字字符或空格以外的任何内容,则返回FALSE。应在trim之后使用,以避免开头或结尾处的空格

alpha_dash

如果表单元素包含除字母数字字符、下划线或破折号以外的任何内容,则返回FALSE。

numeric

如果表单元素包含除数字字符以外的任何内容,则返回FALSE。

integer

如果表单元素包含除整数以外的任何内容,则返回FALSE。

decimal

如果表单元素包含除十进制数字以外的任何内容,则返回FALSE。

is_natural

如果表单元素包含除自然数以外的任何内容,则返回FALSE - 0、1、2、3 等。

is_natural_no_zero

如果表单元素包含除自然数以外的任何内容,但不是零 - 1、2、3 等,则返回FALSE。

valid_url

如果表单元素不包含有效的URL,则返回FALSE。

valid_email

如果表单元素不包含有效的电子邮件地址,则返回FALSE。

valid_emails

如果逗号分隔列表中提供的任何值不是有效的电子邮件,则返回FALSE。

valid_ip

如果提供的IP无效,则返回FALSE。接受“ipv4”或“ipv6”的可选参数以指定IP格式。

valid_base64

如果提供的字符串包含除有效的Base64字符以外的任何内容,则返回FALSE。

CodeIgniter - 会话管理

在构建网站时,我们经常需要跟踪用户的活动和状态,为此,我们必须使用会话。CodeIgniter为此目的提供了会话类。

初始化会话

会话数据可以通过整个站点全局访问,但要使用这些数据,我们首先需要初始化会话。我们可以在构造函数中执行以下行来实现。

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

加载会话库后,您可以简单地使用如下所示的会话对象。

$this->session

添加会话数据

在PHP中,我们只需使用$_SESSION数组即可在会话中设置任何数据,如下所示。

$_SESSION[‘key’] = value;

其中“key”是数组的键,“value”分配在等号的右侧。

在CodeIgniter中可以执行相同操作,如下所示。

$this->session->set_userdata('some_name', 'some_value');

set_userdata()函数接受两个参数。第一个参数some_name是会话变量的名称,some_value将存储在此名称下。

set_userdata()函数还支持另一种语法,您可以在其中传递数组以存储值,如下所示。

$newdata = array( 
   'username'  => 'johndoe', 
   'email'     => '[email protected]', 
   'logged_in' => TRUE
);  

$this->session->set_userdata($newdata);

删除会话数据

在PHP中,我们可以使用unset()函数删除存储在会话中的数据,如下所示。

unset($_SESSION[‘some_name’]);

在CodeIgniter中删除会话数据非常简单,如下所示。unset_userdata()函数的以下版本将仅从会话中删除一个变量。

$this->session->unset_userdata('some_name');

如果要从会话中删除更多值或删除整个数组,可以使用unset_userdata()函数的以下版本。

$this->session->unset_userdata($array_items);

获取会话数据

在会话中设置数据后,我们还可以检索该数据,如下所示。Userdata()函数将用于此目的。如果要访问的数据不可用,此函数将返回NULL

$name = $this->session->userdata('name');

示例

创建一个名为Session_controller.php的控制器类,并将其保存到application/controller/Session_controller.php中。

<?php 
   class Session_controller extends CI_Controller {
	
      public function index() { 
         //loading session library 
         $this->load->library('session');
			
         //adding data to session 
         $this->session->set_userdata('name','virat');
			
         $this->load->view('session_view'); 
      } 
		
      public function unset_session_data() { 
         //loading session library
         $this->load->library('session');
			
         //removing session data 
         $this->session->unset_userdata('name'); 
         $this->load->view('session_view'); 
      } 
		
   } 
?>

创建一个名为session_view.php的视图文件,并将其保存到application/views/session_view.php中。

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter Session Example</title> 
   </head>
	
   <body> 
      Welcome <?php echo $this->session->userdata('name'); ?> 
      <br> 
      <a href = 'https://127.0.0.1:85/CodeIgniter-3.0.1/CodeIgniter3.0.1/index.php/sessionex/unset'>
         Click Here</a> to unset session data. 
   </body>
	
</html>

修改application/config/routes.php文件中的routes.php文件,并在文件末尾添加以下行。

$route['sessionex'] = 'Session_Controller';

使用以下地址执行以上示例。将yoursite.com替换为您网站的URL。

http://yoursite.com/index.php/sessionex

CodeIgniter - 闪存数据

在构建Web应用程序时,我们需要仅存储某些数据一次,然后我们希望删除该数据。例如,显示某些错误消息或信息消息。在PHP中,我们必须手动执行此操作,但CodeIgniter为我们简化了这项工作。在CodeIgniter中,flashdata仅在下一个请求之前可用,并且会自动删除。

添加Flashdata

我们可以简单地存储flashdata,如下所示。

$this->session->mark_as_flash('item');
  • mark_as_flash()函数用于此目的,它仅接受一个要存储的值参数。我们还可以传递数组以存储多个值。

  • set_flashdata()函数也可以使用,它接受两个参数,名称和值,如下所示。我们还可以传递数组。

$this->session->set_flashdata('item','value');

检索Flashdata

可以使用flashdata()函数检索Flashdata,该函数接受一个要获取的项目的参数,如下所示。flashdata()函数确保您仅获取flash数据,而不是任何其他数据。

$this->session->flashdata('item');

如果未传递任何参数,则可以使用相同的函数获取一个数组。

示例

创建一个名为FlashData_Controller.php的类,并将其保存到application/controller/FlashData_Controller.php中。

<?php 
   class FlashData_Controller extends CI_Controller {
	
      public function index() { 
         //Load session library 
         $this->load->library('session');
			
         //redirect to home page 
         $this->load->view('flashdata_home'); 
      } 
  
      public function add() { 
         //Load session library 
         $this->load->library('session'); 
         $this->load->helper('url'); 
   
         //add flash data 
         $this->session->set_flashdata('item','item-value'); 
   
         //redirect to home page 
         redirect('flashdata'); 
      } 
   } 
?>

创建一个名为flashdata_home.php的视图文件,并将其保存到application/views/ flashdata_home.php中。

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter Flashdata Example</title> 
   </head>
	
   <body> 
      Flash Data Example 
      <h2><?php echo $this->session->flashdata('item'); ?></h2> 
      <a href = 'flashdata/add'>Click Here</a> to add flash data. 
   </body>
	
</html>

修改application/config/routes.php文件中的routes.php文件,并在文件末尾添加以下行。

$route['flashdata'] = 'FlashData_Controller'; 
$route['flashdata/add'] = 'FlashData_Controller/add';

访问以下链接执行以上示例。将yoursite.com替换为您网站的URL。

http://yoursite.com/index.php/flashdata

访问上述URL后,您将看到如下所示的屏幕。

Flash Data

单击“单击此处”链接,您将看到如下所示的屏幕。在此屏幕上,您将看到flash数据变量的值。再次刷新页面,您将看到类似于上面的屏幕,并且flash数据变量将自动删除。

Add Flash Data

CodeIgniter - 临时数据

在某些情况下,如果要删除在会话中存储的数据,则可以使用CodeIgniter中的tempdata功能,此操作将在特定时间段后执行。

添加Tempdata

要将数据添加为tempdata,我们必须使用mark_as_tempdata()函数。此函数接受两个参数项目或要存储为tempdata的项目,以及这些项目的到期时间,如下所示。

// 'item' will be erased after 300 seconds(5 minutes) 
$this->session->mark_as_temp('item',300);

您还可以传递数组以存储多个数据。以下存储的所有项目将在300秒后过期。

$this->session->mark_as_temp(array('item','item2'),300);

您还可以为每个项目设置不同的到期时间,如下所示。

// 'item' will be erased after 300 seconds, while 'item2' 
// will do so after only 240 seconds 

$this->session->mark_as_temp(array( 
   'item'=>300, 
   'item2'=>240 
));

检索Tempdata

我们可以使用tempdata()函数检索tempdata。此函数确保您仅获取tempdata,而不是任何其他数据。请查看下面给出的示例,了解如何检索tempdata。tempdata()函数将接受一个要获取的项目的参数。

$this->session->tempdata('item');

如果您省略参数,则可以检索所有现有的tempdata。

删除Tempdata

Tempdata在过期时间后会自动删除,但如果您想在此之前删除tempdata,则可以使用unset_tempdata()函数(该函数接受一个要删除的项目的参数)如下所示进行删除。

$this->session->unset_tempdata('item');

示例

创建一个名为Tempdata_controller.php的类,并将其保存在application/controller/Tempdata_controller.php中。

<?php 
   class Tempdata_controller extends CI_Controller {
	
      public function index() { 
         $this->load->library('session'); 
         $this->load->view('tempdata_view'); 
      } 
  
      public function add() { 
         $this->load->library('session'); 
         $this->load->helper('url'); 
   
         //tempdata will be removed after 5 seconds 
         $this->session->set_tempdata('item','item-value',5); 
   
         redirect('tempdata'); 
      } 
   } 
?>

创建一个名为tempdata_view.php的文件,并将其保存在application/views/tempdata_view.php中。

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter Tempdata Example</title> 
   </head>
	
   <body> 
      Temp Data Example 
      <h2><?php echo $this->session->tempdata('item'); ?></h2>
      <a href = 'tempdata/add'>Click Here</a> to add temp data. 
   </body>
	
</html>

修改application/config/routes.php中的routes.php文件,并在文件末尾添加以下行。

$route['tempdata'] = "Tempdata_controller"; 
$route['tempdata/add'] = "Tempdata_controller/add";

访问以下链接执行以上示例。将yoursite.com替换为您网站的URL。

http://yoursite.com/index.php/tempdata

访问上述URL后,您将看到如下所示的屏幕。

TempData

点击“点击此处”链接,您将看到如下所示的屏幕。

在此屏幕中,您将看到tempdata变量的值。5秒后再次刷新同一页面(因为我们将tempdata设置了5秒),您将看到与上面类似的屏幕,并且tempdata变量将在5秒后自动删除。如果您在5秒前刷新同一页面,则tempdata不会被删除,因为时间段尚未结束。

Add Temp Data

销毁会话

在PHP中,我们使用session_destroy()函数销毁会话,在CodeIgniter中,我们可以如下所示销毁函数。

$this->session->sess_destroy();

调用此函数后,所有会话数据(包括flashdatatempdata)将被永久删除,无法检索。

CodeIgniter - Cookie 管理

Cookie是从Web服务器发送到客户端计算机上存储的一小段数据。CodeIgniter有一个名为“Cookie Helper”的助手用于Cookie管理。

语法

set_cookie($name[, $value = ''[, $expire = ''[, $domain = ''[, $path = '/'[, $prefix = ''[, $secure = FALSE[, $httponly = FALSE]]]]]]]]]])

参数

  • $name (混合类型) - Cookie名称或此函数所有可用参数的关联数组

  • $value (字符串) - Cookie值

  • $expire (整数) - 到期前秒数

  • $domain (字符串) - Cookie域名(通常:.yourdomain.com)

  • $path (字符串) - Cookie路径

  • $prefix (字符串) - Cookie名称前缀

  • $secure (布尔值) - 是否仅通过HTTPS发送Cookie

  • $httponly (布尔值) - 是否对JavaScript隐藏Cookie

返回类型

无效

set_cookie()函数中,我们可以通过两种方式传递所有值。第一种方式只能传递数组,第二种方式也可以传递单个参数。

语法

get_cookie($index[, $xss_clean = NULL]])

参数

  • $index (字符串) - Cookie名称

  • $xss_clean (布尔值) - 是否对返回值应用XSS过滤

返回

Cookie值或未找到时为NULL

返回类型

mixed

get_cookie()函数用于获取使用set_cookie()函数设置的Cookie。

语法

delete_cookie($name[, $domain = ''[, $path = '/'[, $prefix = '']]]])

参数

  • $name (字符串) - Cookie名称

  • $domain (字符串) - Cookie域名(通常:.yourdomain.com)

  • $path (字符串) - Cookie路径

  • $prefix (字符串) - Cookie名称前缀

返回类型

无效

delete_cookie()函数用于删除Cookie。

示例

创建一个名为Cookie_controller.php的控制器,并将其保存在application/controller/Cookie_controller.php中。

<?php 
   class Cookie_controller extends CI_Controller { 
	
      function __construct() { 
         parent::__construct(); 
         $this->load->helper(array('cookie', 'url')); 
      } 
  
      public function index() { 
         set_cookie('cookie_name','cookie_value','3600'); 
         $this->load->view('Cookie_view'); 
      } 
  
      public function display_cookie() { 
         echo get_cookie('cookie_name'); 
         $this->load->view('Cookie_view');
      } 
  
      public function deletecookie() { 
         delete_cookie('cookie_name'); 
         redirect('cookie/display'); 
      } 
		
   } 
?>

创建一个名为Cookie_view.php的视图文件,并将其保存在application/views/Cookie_view.php中。

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter View Example</title> 
   </head> 
	
   <body> 
      <a href = 'display'>Click Here</a> to view the cookie.<br> 
      <a href = 'delete'>Click Here</a> to delete the cookie. 
   </body>
	
</html>

修改application/config/routes.php中的routes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

$route['cookie'] = "Cookie_controller"; 
$route['cookie/display'] = "Cookie_controller/display_cookie"; 
$route['cookie/delete'] = "Cookie_controller/deletecookie";

之后,您可以在浏览器中执行以下URL来执行示例。

http://yoursite.com/index.php/cookie

它将生成如下所示的输出。

cookie_management

CodeIgniter - 常用函数

CodeIgniter库函数和助手函数需要在使用前进行初始化,但有一些常用函数不需要初始化。

这些常用函数及其描述如下所示。

语法 is_php($version)
参数

$version (字符串) - 版本号

返回 如果正在运行的PHP版本至少为指定版本,则为TRUE,否则为FALSE
返回类型 无效
描述 确定正在使用的PHP版本是否大于提供的版本号。
语法 is_really_writable($file)
参数

$file (字符串) - 文件路径

返回 如果路径可写,则为TRUE,否则为FALSE
返回类型 bool
描述 检查文件是否可写。
语法 config_item($key)
参数

$key (字符串) - 配置项键

返回 配置键值或未找到时为NULL
返回类型 mixed
描述 此函数用于获取配置项。
语法 set_status_header($code[, $text = ''])
参数

$code (整数) - HTTP响应状态代码

$text (字符串) - 要与状态代码一起设置的自定义消息

返回
返回类型 无效
描述 此函数允许您手动设置服务器状态标头。
语法 remove_invisible_characters($str[, $url_encoded = TRUE])
参数

$str (字符串) - 输入字符串

$url_encoded (布尔值) - 是否也删除URL编码字符

返回 已清理的字符串
返回类型 字符串
描述 此函数防止在ASCII字符之间插入NULL字符。
语法 html_escape($var)
参数

$var (混合类型) - 要转义的变量(字符串或数组)

返回 HTML转义的字符串
返回类型 mixed
描述 此函数充当本机PHP htmlspecialchars()函数。
语法 get_mimes()
返回 文件类型的关联数组
返回类型 数组
描述 此函数返回对application/config/mimes.php中MIMEs数组的引用。
语法 is_https()

返回 如果当前使用HTTP over SSL,则为TRUE,否则为FALSE
返回类型 bool
描述 如果使用安全(HTTPS)连接,则返回TRUE,否则返回FALSE(包括非HTTP请求)。
语法 is_cli()
返回 如果当前在CLI下运行,则为TRUE,否则为FALSE
返回类型 bool
描述 如果应用程序通过命令行运行,则返回TRUE,否则返回FALSE。
语法 function_usable($function_name)
参数

$function_name (字符串) - 函数名称

返回类型 bool
描述 如果函数存在且可用,则返回TRUE,否则返回FALSE。

下面是一个示例,演示了所有上述函数。

示例

这里我们只创建了一个控制器,我们将在其中使用上述函数。复制下面给出的代码,并将其保存在application/controller/CommonFun_Controller.php中。

<?php 
   class CommonFun_Controller extends CI_Controller { 
	
      public function index() {
         set_status_header(200); 
         echo is_php('5.3')."<br>"; 
         var_dump(is_really_writable('./Form.php')); 
			
         echo config_item('language')."<br>"; 
         echo remove_invisible_characters('This is a ‌test','UTF8')."<br>"; 
			
         $str = '< This > is \' a " test & string'; 
         echo html_escape($str)."<br>"; 
         echo "is_https():".var_dump(is_https())."<br>"; 
         echo "is_cli():".var_dump(is_cli())."<br>"; 
			
         var_dump(function_usable('test'))."<br>"; 
         echo "get_mimes():".print_r(get_mimes())."<br>"; 
      } 
  
      public function test() { 
         echo "Test function"; 
      } 
		
   } 
?>

修改application/config/routes.php中的routes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

$route['commonfunctions'] = 'CommonFun_Controller';

在浏览器地址栏中键入以下URL以执行示例。

http://yoursite.com/index.php/commonfunctions

CodeIgniter - 页面缓存

缓存页面将提高页面加载速度。如果页面被缓存,则它将以其完全呈现的状态存储。下次服务器收到对缓存页面的请求时,它将直接发送到请求的浏览器。

缓存文件存储在application/cache文件夹中。可以基于每个页面启用缓存。在启用缓存时,我们需要设置缓存文件需要保留的时间,在此时间段后,它将自动删除。

启用缓存

可以通过在任何控制器的任何方法中执行以下行来启用缓存。

$this->output->cache($n);

其中$n是希望页面在刷新之间保留的分钟数

禁用缓存

缓存文件在过期时会被删除,但当您想手动删除它时,您必须禁用它。您可以通过执行以下行来禁用缓存。

// Deletes cache for the currently requested URI 
$this->output->delete_cache();
  
// Deletes cache for /foo/bar 
$this->output->delete_cache('/foo/bar');

示例

创建一个名为Cache_controller.php的控制器,并将其保存在application/controller/Cache_controller.php中。

<?php 
   class Cache_controller extends CI_Controller { 
	
      public function index() { 
         $this->output->cache(1); 
         $this->load->view('test'); 
      }
		
      public function delete_file_cache() { 
         $this->output->delete_cache('cachecontroller'); 
      } 
   } 
?>

创建一个名为test.php的视图文件,并将其保存在application/views/test.php中。

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter View Example</title> 
   </head>
	
   <body> 
      CodeIgniter View Example 
   </body>
	
</html>

修改application/config/routes.php中的routes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

$route['cachecontroller'] = 'Cache_controller'; 
$route['cachecontroller/delete'] = 'Cache_controller/delete_file_cache';

在浏览器中键入以下URL以执行示例。

http://yoursite.com/index.php/cachecontroller

访问上述URL后,您将看到为此创建的缓存文件将保存在application/cache文件夹中。要删除该文件,请访问以下URL。

http://yoursite.com/index.php/cachecontroller/delete

CodeIgniter - 页面重定向

在构建Web应用程序时,我们经常需要将用户从一个页面重定向到另一个页面。CodeIgniter使这项工作变得简单。redirect()函数用于此目的。

语法

redirect($uri = '', $method = 'auto', $code = NULL)

参数

  • $uri (字符串) - URI字符串

  • $method (字符串) - 重定向方法('auto'、'location'或'refresh')

  • $code (字符串) - HTTP响应代码(通常为302或303)

返回类型

无效

第一个参数可以具有两种类型的URI。我们可以将完整的站点URL或URI片段传递到您要重定向到的控制器。

第二个可选参数可以具有auto、location或refresh中的任何一个值。默认为auto。

第三个可选参数仅在location重定向中可用,它允许您发送特定的HTTP响应代码。

示例

创建一个名为Redirect_controller.php的控制器,并将其保存在application/controller/Redirect_controller.php中。

<?php 
   class Redirect_controller extends CI_Controller { 
	
      public function index() { 
         /*Load the URL helper*/ 
         $this->load->helper('url'); 
   
         /*Redirect the user to some site*/ 
         redirect('https://tutorialspoint.com'); 
      }
		
      public function computer_graphics() { 
         /*Load the URL helper*/ 
         $this->load->helper('url'); 
         redirect('https://tutorialspoint.com/computer_graphics/index.htm'); 
      } 
  
      public function version2() { 
         /*Load the URL helper*/ 
         $this->load->helper('url'); 
   
         /*Redirect the user to some internal controller’s method*/ 
         redirect('redirect/computer_graphics'); 
      } 
		
   } 
?>

修改application/config/routes.php中的routes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

$route['redirect'] = 'Redirect_controller'; 
$route['redirect/version2'] = 'Redirect_controller/version2'; 
$route['redirect/computer_graphics'] = 'Redirect_controller/computer_graphics';

在浏览器中键入以下URL以执行示例。

http://yoursite.com/index.php/redirect

上述URL将重定向到tutorialspoint.com网站,如果您访问以下URL,则它将重定向到tutorialspoint.com上的计算机图形教程。

http://yoursite.com/index.php/redirect/computer_graphics

CodeIgniter - 应用程序分析

在构建Web应用程序时,我们非常关心网站的性能,包括控制器执行花费的时间以及使用了多少内存。不仅是性能,而且我们还需要查看数据的见解,例如POST数据、数据库查询数据、会话数据等,以便在开发某些应用程序时进行调试。CodeIgniter通过分析应用程序使这项工作变得更容易。

启用性能分析

要启用应用程序的性能分析,只需在控制器的任何方法中执行以下命令。

$this->output->enable_profiler(TRUE);

启用后,可以在页面底部看到性能分析报告。

禁用性能分析

要禁用应用程序的性能分析,只需在控制器的任何方法中执行以下命令。

$this->output->enable_profiler(FALSE);

启用/禁用性能分析器部分

性能分析可以基于部分进行。您可以通过设置布尔值TRUE或FALSE来启用或禁用某个部分的性能分析。如果要为应用程序设置性能分析,则可以在application/config/profiler.php中找到的文件中进行设置。

例如,以下命令将为整个应用程序启用性能分析查询。

$config['queries'] = TRUE;

在下表中,键是参数,可以在config数组中设置以启用或禁用特定配置文件。

描述 默认值

benchmarks

基准点经过的时间和总执行时间 TRUE

config

CodeIgniter配置变量 TRUE

controller_info

请求的控制器类和方法 TRUE

get

请求中传递的任何GET数据 TRUE

http_headers

当前请求的HTTP标头 TRUE

memory_usage

当前请求消耗的内存量(以字节为单位) TRUE

post

请求中传递的任何POST数据 TRUE

queries

所有执行的数据库查询列表,包括执行时间 TRUE

uri_string

当前请求的URI TRUE

session_data

当前会话中存储的数据 TRUE

query_toggle_count

查询块默认为隐藏的查询数量。 25

application/config/profiler.php中文件中设置的性能分析器可以通过在控制器中使用set_profiler_sections()函数来覆盖,如下所示。

$sections = array( 
   'config'  => TRUE, 
   'queries' => TRUE 
); 
 
$this->output->set_profiler_sections($sections);

CodeIgniter - 基准测试

设置基准点

如果您想测量执行一组代码行或内存使用所需的时间,您可以使用 CodeIgniter 中的基准点进行计算。CodeIgniter 中为此目的提供了一个单独的“Benchmarking”类。

此类会自动加载;您无需手动加载。它可以在您的控制器、视图和模型类中的任何位置使用。您只需标记一个起点和一个终点,然后在这两个标记点之间执行elapsed_time()函数,即可获得执行该代码所需的时间,如下所示。

<?php 
   $this->benchmark->mark('code_start');
  
   // Some code happens here  

   $this->benchmark->mark('code_end');
  
   echo $this->benchmark->elapsed_time('code_start', 'code_end'); 
?>

要显示内存使用情况,请使用函数memory_usage(),如下面的代码所示。

<?php 
   echo $this->benchmark->memory_usage(); 
?>

示例

创建一个名为Profiler_controller.php的控制器,并将其保存到application/controller/Profiler_controller.php

<?php 
   class Profiler_controller extends CI_Controller {
  
      public function index() {
	
         //enable profiler
         $this->output->enable_profiler(TRUE); 
         $this->load->view('test'); 
      } 
  
      public function disable() {
	
         //disable profiler 
         $this->output->enable_profiler(FALSE); 
         $this->load->view('test'); 
      }
		
   } 
?>  

创建一个名为test.php的视图文件,并将其保存到application/views/test.php

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter View Example</title> 
   </head>
	
   <body> 
      CodeIgniter View Example 
   </body>
	
</html>

修改application/config/routes.php中的routes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

$route['profiler'] = "Profiler_controller"; 
$route['profiler/disable'] = "Profiler_controller/disable"

之后,您可以在浏览器地址栏中输入以下 URL 来执行示例。

http://yoursite.com/index.php/profiler

上述 URL 将启用分析器,并生成如下所示的输出。

View Example

要禁用分析,请执行以下 URL。

http://yoursite.com/index.php/profiler/disable

CodeIgniter - 添加 JS 和 CSS

在 CodeIgniter 中添加 JavaScript 和 CSS(层叠样式表)文件非常简单。您需要在根目录中创建 JS 和 CSS 文件夹,并将所有 .js 文件复制到 JS 文件夹中,并将 .css 文件复制到 CSS 文件夹中,如下图所示。

Adding JS and CSS

例如,假设您创建了一个 JavaScript 文件sample.js和一个 CSS 文件style.css。现在,要将这些文件添加到您的视图中,请在您的控制器中加载 URL 助手,如下所示。

$this->load->helper('url');

在控制器中加载 URL 助手后,只需在视图文件中添加以下行,即可在视图中加载 sample.js 和 style.css 文件,如下所示。

<link rel = "stylesheet" type = "text/css" 
   href = "<?php echo base_url(); ?>css/style.css">

<script type = 'text/javascript' src = "<?php echo base_url(); 
   ?>js/sample.js"></script>

示例

创建一个名为Test.php的控制器,并将其保存到application/controller/Test.php

<?php 
   class Test extends CI_Controller {
	
      public function index() { 
         $this->load->helper('url'); 
         $this->load->view('test'); 
      } 
   } 
?>

创建一个名为test.php的视图文件,并将其保存到application/views/test.php

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter View Example</title> 
      <link rel = "stylesheet" type = "text/css" 
         href = "<?php echo base_url(); ?>css/style.css"> 
      <script type = 'text/javascript' src = "<?php echo base_url(); 
         ?>js/sample.js"></script> 
   </head>
	
   <body> 
      <a href = 'javascript:test()'>Click Here</a> to execute the javascript function. 
   </body>
	
</html>

创建一个名为style.css的 CSS 文件,并将其保存到css/style.css

body { 
   background:#000; 
   color:#FFF; 
}

创建一个名为sample.js的 JS 文件,并将其保存到js/sample.js

function test() { 
   alert('test'); 
}

修改application/config/routes.php中的routes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

$route['profiler'] = "Profiler_controller"; 
$route['profiler/disable'] = "Profiler_controller/disable"

在浏览器中使用以下 URL 执行上述示例。

http://yoursite.com/index.php/test

CodeIgniter - 国际化

CodeIgniter 中的语言类提供了一种简单的方法来支持多种语言以实现国际化。在某种程度上,我们可以使用不同的语言文件来显示多种语言的文本。

我们可以将不同的语言文件放在 application/language 目录中。系统语言文件可以在 system/language 目录中找到,但是要将您自己的语言添加到您的应用程序中,您应该在 application/language 目录中为每种语言创建一个单独的文件夹。

创建语言文件

要创建语言文件,必须以_lang.php结尾。例如,您想为法语创建语言文件,则必须将其保存为french_lang.php。在此文件中,您可以将所有语言文本存储在$lang数组中的键值对中,如下所示。

$lang[‘key’] = ‘val’;

加载语言文件

要在应用程序中使用任何语言,必须首先加载该特定语言的文件以检索存储在该文件中的各种文本。您可以使用以下代码加载语言文件。

$this->lang->load('filename', 'language');
  • filename - 它是您要加载的文件名。此处不要使用文件的扩展名,而只使用文件名。

  • Language - 包含它的语言集。

获取语言文本

要从语言文件中获取一行,只需执行以下代码。

$this->lang->line('language_key');

其中language_key是用于在加载的语言文件中获取键值的键参数。

自动加载语言

如果全局需要某些语言,则可以在application/config/autoload.php文件中自动加载它,如下所示。

| -----------------------------------------------------------------------
|  Auto-load Language files
| -----------------------------------------------------------------------
| Prototype:
|   $autoload['config'] = array('config1', 'config2');
|
| NOTE: Do not include the "_lang" part of your file. For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
$autoload['language'] = array();

只需将 CodeIgniter 要自动加载的不同语言传递进去即可。

示例

创建一个名为Lang_controller.php的控制器,并将其保存到application/controller/Lang_controller.php

<?php
   class Lang_controller extends CI_Controller {

      public function index(){
         //Load form helper
         $this->load->helper('form');

         //Get the selected language
         $language = $this->input->post('language');
		
         //Choose language file according to selected lanaguage
         if($language == "french")
            $this->lang->load('french_lang','french');
         else if($language == "german")
            $this->lang->load('german_lang','german');
         else
         $this->lang->load('english_lang','english');
		
         //Fetch the message from language file.
         $data['msg'] = $this->lang->line('msg');
		
         $data['language'] = $language;
         //Load the view file
         $this->load->view('lang_view',$data);
      }
   }
?>

创建一个名为lang_view.php的视图文件,并将其保存到application/views/ lang_view.php

<!DOCTYPE html>
<html lang = "en"> 

   <head>
      <meta charset = "utf-8">
      <title>CodeIgniter Internationalization Example</title>
   </head>
	
   <body>
      <?php
         echo form_open('/lang');
      ?>
		
      <select name = "language" onchange = "javascript:this.form.submit();">
         <?php
            $lang = array('english'=>"English",'french'=>"French",'german'=>"German");
				
            foreach($lang as $key=>$val) {
               if($key == $language)
               echo "<option value = '".$key."' selected>".$val."</option>";
               else
               echo "<option value = '".$key."'>".$val."</option>";
            }
				
         ?>
			
      </select>
		
      <br>
		
      <?php
         form_close();
         echo $msg;
      ?>
		
   </body>
	
</html>

application/language中创建三个名为 English、French 和 German 的文件夹,如下图所示。

Three Folders

复制以下代码,并将其保存在application/language/english文件夹中的english_lang.php文件中。

<?php
   $lang['msg'] = "CodeIgniter Internationalization example.";
?>

复制以下代码,并将其保存在application/language/French文件夹中的french_lang.php文件中。

<?php
   $lang['msg'] = "Exemple CodeIgniter internationalisation.";
?>

复制以下代码,并将其保存在application/language/german文件夹中的german_lang.php文件中。

<?php
   $lang['msg'] = "CodeIgniter Internationalisierung Beispiel.";
?>

修改application/config/routes.php中的routes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

$route['lang'] = "Lang_controller";

在浏览器中执行以下 URL 来执行上述示例。

http://yoursite.com/index.php/lang

它将生成如下所示的输出。如果更改下拉列表中的语言,下拉列表下方所写句子的语言也将相应更改。

Internationalization Example

CodeIgniter - 安全性

XSS 防御

XSS 指跨站脚本攻击。CodeIgniter 带有 XSS 过滤安全功能。此过滤器将阻止任何恶意 JavaScript 代码或任何其他试图劫持 Cookie 并进行恶意活动的代码。要通过 XSS 过滤器过滤数据,请使用xss_clean()方法,如下所示。

$data = $this->security->xss_clean($data);

只有在提交数据时才应使用此函数。可选的第二个布尔参数也可用于检查图像文件是否存在 XSS 攻击。这对于文件上传功能很有用。如果其值为 true,则表示图像安全,否则表示不安全。

SQL 注入防御

SQL 注入是对数据库查询发起的攻击。在 PHP 中,我们使用mysql_real_escape_string()函数以及其他技术来防止这种情况,但 CodeIgniter 提供了内置函数和库来防止这种情况。

我们可以通过以下三种方式在 CodeIgniter 中防止 SQL 注入 -

  • 转义查询
  • 查询绑定
  • 活动记录类

转义查询

<?php
   $username = $this->input->post('username');
   $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
      $this->db->escape($email);
   $this->db->query($query);
?>

$this->db->escape()函数会自动在数据周围添加单引号,并确定数据类型,以便它只能转义字符串数据。

查询绑定

<?php
   $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
   $this->db->query($sql, array(3, 'live', 'Rick'));
?>

在上面的示例中,问号(?)将被 query() 函数第二个参数中的数组替换。以这种方式构建查询的主要优点是值会自动转义,从而生成安全的查询。CodeIgniter 引擎会自动为您执行此操作,因此您无需记住它。

活动记录类

<?php
   $this->db->get_where('subscribers_tbl',array
      ('status'=> active','email' => '[email protected]'));
?>

使用活动记录,查询语法由每个数据库适配器生成。它还允许更安全的查询,因为值会自动转义。

隐藏 PHP 错误

在生产环境中,我们通常不希望向用户显示任何错误消息。如果在开发环境中启用它以进行调试目的,则效果很好。这些错误消息可能包含一些信息,出于安全原因,我们不应向网站用户显示这些信息。

有三个与错误相关的 CodeIgniter 文件。

PHP 错误报告级别

不同的环境需要不同级别的错误报告。默认情况下,开发将显示错误,但测试和生产将隐藏错误。根目录下的 CodeIgniter 中有一个名为index.php的文件,用于此目的。如果我们将零作为参数传递给error_reporting()函数,则将隐藏所有错误。

数据库错误

即使您已关闭 PHP 错误,MySQL 错误仍然处于打开状态。您可以在application/config/database.php中关闭它。将$db数组中的db_debug选项设置为FALSE,如下所示。

$db['default']['db_debug'] = FALSE;

错误日志

另一种方法是将错误传输到日志文件。因此,它不会显示在网站上的用户面前。只需将$config数组中的log_threshold值设置为application/cofig/config.php文件中的 1,如下所示。

$config['log_threshold'] = 1;

CSRF 防御

CSRF 代表跨站点请求伪造。您可以通过在application/config/config.php文件中启用它来防止此攻击,如下所示。

$config['csrf_protection'] = TRUE;

当您使用form_open()函数创建表单时,它将自动插入一个 CSRF 作为隐藏字段。您还可以使用get_csrf_token_name()get_csrf_hash()函数手动添加 CSRF。get_csrf_token_name()函数将返回 CSRF 的名称,而get_csrf_hash()将返回 CSRF 的哈希值。

CSRF 令牌每次提交时都可以重新生成,或者您也可以在 CSRF Cookie 的整个生命周期内保持不变。通过在配置数组中使用键‘csrf_regenerate’将值设置为TRUE,将重新生成令牌,如下所示。

$config['csrf_regenerate'] = TRUE;

您还可以通过在配置数组中使用键‘csrf_exclude_uris’设置白名单 URL 来防止 CSRF 保护,如下所示。您还可以使用正则表达式。

$config['csrf_exclude_uris'] = array('api/person/add');

密码处理

许多开发人员不知道如何在 Web 应用程序中处理密码,这可能是许多黑客如此容易侵入系统的原因。在处理密码时,应牢记以下几点 -

  • 不要以纯文本格式存储密码。

  • 始终对密码进行哈希处理。

  • 不要使用 Base64 或类似的编码来存储密码。

  • 不要使用 MD5 或 SHA1 等弱或已损坏的哈希算法。仅使用强密码哈希算法,如 BCrypt,它用于 PHP 自身的密码哈希函数。

  • 切勿以纯文本格式显示或发送密码。

  • 不要对用户的密码设置不必要的限制。

广告