CodeIgniter - 快速指南

CodeIgniter - 概述

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

如果您非常了解 PHP,那么 CodeIgniter 将使您的任务更轻松。它有一组非常丰富的库和帮助程序。如果您从头开始开发网站,使用 CodeIgniter 将节省大量时间。不仅如此,使用 CodeIgniter 构建的网站也很安全,因为它能够防止通过网站进行的各种攻击。

CodeIgniter 功能

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

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

  • 极轻量级

  • 功能齐全的数据库类,支持多个平台。

  • 查询生成器数据库支持

  • 表单和数据验证

  • 安全和 XSS 过滤

  • 会话管理

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

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

  • 文件上传类

  • FTP 类

  • 本地化

  • 分页

  • 数据加密

  • 基准测试

  • 全页缓存

  • 错误日志记录

  • 应用程序分析

  • 日历类

  • 用户代理类

  • Zip 编码类

  • 模板引擎类

  • 引用类

  • XML-RPC库

  • 单元测试类

  • 搜索引擎友好 URL

  • 灵活的 URI 路由

  • 支持钩子和类扩展

  • 大型"辅助"函数库

CodeIgniter - 安装

安装 CodeIgniter 非常简单。只需按照下面给出的步骤 −

  • 步骤 1 − 从链接 CodeIgniter

  • 下载 CodeIgniter
  • 步骤 2 −解压文件夹。

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

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

访问 URL 时,您将看到以下屏幕 −

安装 CodeIgniter

CodeIgniter - 应用程序架构

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

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

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

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

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

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

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

目录结构

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

目录结构

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

  • Application
  • System
  • User_guide

Application

顾名思义,应用程序文件夹包含您正在构建的应用程序的所有代码。这是您将在其中开发项目的文件夹。 Application 文件夹包含其他几个文件夹,下面将对此进行解释 −

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

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

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

  • Core − 此文件夹将包含应用程序的基类。

  • Helpers −在此文件夹中,您可以放置​​应用程序的帮助程序类。

  • Hooks − 此文件夹中的文件提供了一种无需破解核心文件即可利用和修改框架内部工作原理的方法。

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

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

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

  • Models − 数据库登录将放置在此文件夹中。

  • Third_party −在此文件夹中,您可以放置​​任何将用于您的应用程序的插件。

  • Views − 应用程序的 HTML 文件将放置在此文件夹中。

System

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

此文件夹包含所有 CodeIgniter 代码,组织到各个文件夹中 −

  • 核心 − 此文件夹包含 CodeIgniter 的核心类。请勿在此处修改任何内容。您的所有工作都将在应用程序文件夹中进行。即使您打算扩展 CodeIgniter 核心,也必须使用钩子来完成,并且钩子位于应用程序文件夹中。

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

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

  • Helpers − 帮助程序文件夹包含标准 CodeIgniter 帮助程序(例如日期、cookie 和 URL 帮助程序)。

  • 语言 − 语言文件夹包含语言文件。您现在可以忽略它。

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

User_guide

这是您的 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"的输出,因为我们已将"hello"作为方法名称传递,位于 URI 中的控制器"test"名称之后。

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'); 
      } 
   } 
?>

以下是上述代码的输出 −

测试输出

以下流程图说明了一切的工作原理 −

流程图

模型

模型类旨在处理数据库中的信息。例如,如果您使用 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/ 目录。每个帮助程序(无论是自定义帮助程序还是系统帮助程序)都必须在使用前加载。

S.N. 助手名称 &描述
1

数组助手

数组助手文件包含可帮助处理数组的函数。

2

CAPTCHA 助手

CAPTCHA 助手文件包含可帮助创建 CAPTCHA 图像的函数。

3

Cookie 助手

Cookie 助手文件包含可帮助处理 cookie 的函数。

4

日期助手

日期助手文件包含可帮助您处理的函数日期。

5

目录助手

目录助手文件包含协助处理目录的功能。

6

下载助手

下载助手可让您将数据下载到桌面。

7

电子邮件助手

电子邮件助手提供了一些用于处理电子邮件的辅助功能。有关更强大的电子邮件解决方案,请参阅 CodeIgniter 的电子邮件类。

8

文件助手

文件助手文件包含协助处理文件的函数。

9

表单助手

表单助手文件包含协助处理表单的函数。

10

HTML 助手

HTML 助手文件包含协助处理 HTML 的函数。

11

变形器助手

Inflector Helper 文件包含允许您将单词更改为复数、单数、驼峰式大小写等的功能。

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 中有三种保留路由。

S.N. 保留路由和说明
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 array key 部分中使用正则表达式。如果任何 URI 与正则表达式匹配,则它将被路由到 $route 数组中设置的值部分。

示例

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

在上面的例子中,类似于 products/shoes/123 的 URI 将调用"shoes"控制器类和"id_123"方法。

CodeIgniter - 配置

设置站点后,我们应该做的下一件事是配置站点。 application/config 文件夹包含一组设置站点基本配置的文件。

配置基本 URL

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

http://example.com/

如果未设置,则 CodeIgniter 将尝试猜测安装的协议、域和路径。但是,您应该始终明确配置它,而不要依赖自动猜测,尤其是在生产环境中。您可以使用键"base_url"在 $config 数组中配置基本 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 − 这是要自动加载的辅助文件列表。提供数组中的库列表,如下所示,以便 CodeIgniter 自动加载。在给定的示例中,我们正在自动加载 URL 和文件帮助程序。

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

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

  • model − 这是模型文件列表,应该自动加载。提供如下所示的数组中的模型列表,以便 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 表,我们只需将此数组传递给第二个参数中的插入函数即可。

$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 实例

返回类型

对象

最后,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 重置查询"write"子句

返回

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。每个类都有各种功能来简化开发工作。下表显示了库类的名称及其描述。

S.N. 库类 &描述
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

Typography 类

Typography 类提供帮助格式化文本的方法。

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() {
      }
   }
	
/* Mylibrary.php 文件结束 */

加载自定义库

只需在控制器中执行以下行即可加载上述库。

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

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

$this->mylibrary->some_function();

扩展本机库

有时,您可能需要向 CodeIgniter 提供的库添加自己的功能。 CodeIgniter 提供了扩展本机库并添加自己的函数的功能。要实现这一点,您必须扩展本机库类的类。例如,如果您想扩展电子邮件库,则可以按如下所示进行操作 −

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 (mixed) −错误消息

  • $status_code (int) − HTTP 响应状态代码

  • $heading (string) −错误页面标题

返回类型

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

语法

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

参数

  • $page (string) – URI 字符串

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

返回类型

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

语法

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

参数

  • $level (string) − 日志级别:'error'、'debug' 或 'info'

  • $message (string) −要记录的消息

  • $php_error (bool) − 我们是否记录本机 PHP 错误消息

返回类型

void

可以在 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 的根目录(即应用程序文件夹的父目录)中创建"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 或纯文本电子邮件
  • 附件
  • 自动换行
  • 优先级
  • 密送批处理模式,可将大型电子邮件列表拆分为小型密送批处理。
  • 电子邮件调试工具

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

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

$from (string) − "发件人"电子邮件地址

$name (string) − "发件人"显示名称

$return_path (string) −可选的电子邮件地址,用于将未送达的电子邮件重定向到

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

$replyto (string) − 回复的电子邮件地址

$name (string) −回复电子邮件地址的显示名称

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

$to (mixed) − 逗号分隔的字符串或电子邮件地址数组

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

$cc (mixed) −逗号分隔的字符串或电子邮件地址数组

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

$bcc (mixed) − 逗号分隔的字符串或电子邮件地址数组

$limit (int) − 每批发送的最大电子邮件数量

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

$subject (string) − 电子邮件主题行

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

$body (string) −电子邮件正文

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

$str (string) − 备用电子邮件正文

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

$header (string) −标头名称

$value (string) −标头值

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

$clear_attachments (bool) – 是否清除附件

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

$auto_clear (bool) − 是否自动清除消息数据

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

$filename (string) − 文件名

$disposition (string) − 附件的'disposition'。大多数电子邮件客户端都会自行做出决定,而不管此处使用的 MIME 规范如何。iana

$newname (string) − 电子邮件中使用的自定义文件名

$mime (string) − 要使用的 MIME 类型(适用于缓冲数据)

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

$filename (string) − 现有附件文件名

附件 Content-ID,若未找到则为 FALSE string

发送电子邮件

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

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

加载库后,只需执行以下函数即可设置发送电子邮件所需的元素。from() 函数用于设置电子邮件的发送方,to() 函数用于设置电子邮件的发送方。subject()message() 函数用于设置电子邮件的主题和消息。

$this->email->from('your@example.com', 'Your Name');
$this->email->to('someone@example.com');

$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 = "your@example.com"; 
         $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() { 
        /* 加载表单助手 */
        $this->load->helper(array('form'));
        
        /* 加载表单验证库 */
        $this->load->library('form_validation');
        
        /* 设置表单中名称字段的验证规则 */
        $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

我们在控制器中添加了一个验证 − 在提交表单之前,Name 是必填字段。因此,如果您单击提交按钮而未在名称字段中输入任何内容,则系统会要求您在提交之前输入名称,如下面的屏幕所示。

未验证成功

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

验证成功

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

验证规则参考

以下是所有可用的本机规则的列表 −

规则 参数 描述 示例

required

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

匹配

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

regex_match

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

不同

Yes 如果表单元素与参数中的元素没有区别。 differs[form_item]

is_unique

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

min_length

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

max_length

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

exact_length

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

greater_than

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

greater_than_equal_to

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

less_than

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

less_than_equal_to

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

in_list

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

alpha

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

alpha_numeric

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

alpha_numeric_spaces

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

alpha_dash

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

numeric

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

integer

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

十进制

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

is_natural

No 如果表单元素包含除自然数以外的任何内容 − 0、1、2、3 等。

is_natural_no_zero

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

valid_url

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

valid_email

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

valid_emails

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

valid_ip

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

valid_base64

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

CodeIgniter - 会话管理

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

初始化会话

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

$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'     => 'johndoe@some-site.com', 
   '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() {
    //加载会话库
    $this->load->library('session');
    
    //向会话添加数据
    $this->session->set_userdata('name','virat');
    
    $this->load->view('session_view');
    }
    
    public function unset_session_data() {
    //加载会话库
    $this->load->library('session');
    
    //删除会话数据
    $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 = 'http://localhost: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 - Flashdata

在构建 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() 函数确保您只获取闪存数据,而不获取任何其他数据。

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

如果不传递任何参数,则可以获得具有相同功能的数组。

示例

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

<?php 
   class FlashData_Controller extends CI_Controller {
	
        public function index() {
        //加载 session 库
        $this->load->library('session');
        
        //重定向到主页
        $this->load->view('flashdata_home');
        }
        
        public function add() {
        //加载 session 库
        $this->load->library('session');
        $this->load->helper('url');
        
        //添加 flash 数据
        $this->session->set_flashdata('item','item-value');
        
        //重定向到主页
        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 数据变量将自动删除。

添加 Flash 数据

CodeIgniter - Tempdata

在某些情况下,如果您想在特定时间段后删除存储在会话中的数据,可以使用 CodeIgniter 中的 tempdata 功能来完成。

添加 Tempdata

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

// 'item' 将在 300 秒(5 分钟)后被删除
$this->session->mark_as_temp('item',300);

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

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

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

// 'item' 将在 300 秒后被删除,而 'item2'
// 仅在 240 秒后才会被删除

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

检索临时数据

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

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

如果省略该参数,则可以检索所有现有的临时数据。

删除临时数据

临时数据在到期后会自动删除,但如果您想在此之前删除临时数据,则可以按如下所示使用 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

单击 "单击此处" 链接,您将看到如下所示的屏幕。

在此屏幕中,您将看到临时数据变量的值。五秒钟后再次刷新同一页面,因为我们已将临时数据设置为五秒钟,您将看到如上所示的屏幕,并且临时数据变量将在五秒钟后自动删除。如果您在 5 秒之前刷新同一页面,则不会删除临时数据,因为时间段尚未结束。

添加临时数据

销毁会话

在 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 (mixed) − 此函数可用的所有参数的 Cookie 名称或关联数组

  • $value (string) − Cookie 值

  • $expire (int) − 距离到期还有多少秒

  • $domain (string) − Cookie 域(通常为:.yourdomain.com)

  • $path (string) − Cookie 路径

  • $prefix (string) − Cookie 名称前缀

  • $secure (bool) − 是否仅通过 HTTPS 发送 cookie

  • $httponly (bool) − 是否对 JavaScript 隐藏 cookie

返回类型

void

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

语法

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

参数

  • $index (string) − Cookie 名称

  • $xss_clean (bool) −是否对返回值应用 XSS 过滤

返回

cookie 值,如果未找到则返回 NULL

返回类型

mixed

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

语法

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

参数

  • $name (string) − Cookie 名称

  • $domain (string) − Cookie 域(通常为:.yourdomain.com)

  • $path (string) − Cookie 路径

  • $prefix (string) − Cookie 名称前缀

返回类型

void

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 (string) − 版本号

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

$file (string) −文件路径

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

$key (string) −配置项键

返回 配置键值,若未找到则返回 NULL
返回类型 mixed
说明 此函数用于获取配置项
语法 set_status_header($code[, $text = ''])
参数

$code (int) − HTTP 响应状态代码

$text (string) −使用状态代码设置的自定义消息

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

$str (string) − 输入字符串

$url_encoded (bool) −是否同时删除 URL 编码字符

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

$var (mixed) −要转义的变量(字符串或数组)

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

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

$function_name (string) −函数名称

返回类型 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 是您希望页面在刷新之间保持缓存的 分钟 数。

禁用缓存

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

// 删除当前请求的 URI 的缓存
$this->output->delete_cache();

// 删除 /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 (string) − URI 字符串

  • $method (string) − 重定向方法 ('auto'、'location' 或 'refresh')

  • $code (string) − HTTP 响应代码(通常为 302 或 303)

返回类型

void

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

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

第三个可选参数仅适用于位置重定向,它允许您发送特定的 HTTP 响应代码。

示例

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

<?php 
   class Redirect_controller extends CI_Controller { 
	
        public function index() {
            /*加载 URL 帮助器*/
            $this->load->helper('url');
            
            /*将用户重定向到某个站点*/
            redirect('https://www.tutorialspoint.com');
        }
        
        public function computer_graphics() {
            /*加载 URL 帮助器*/
            $this->load->helper('url');
            r​​edirect('https://www.tutorialspoint.com/computer_graphics/index.htm');
        }
        
        public function version2() {
            /*加载 URL 帮助器*/
            $this->load->helper('url');
            
            /*将用户重定向到某个内部控制器的方法*/
            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;

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

描述 默认

benchmarks

基准点的耗时和总执行时间 TRUE

config

CodeIgniterConfig 变量 TRUE

controller_info

请求的 Controller 类和方法 TRUE

get

在请求 TRUE

http_headers

当前请求的 HTTP 标头 TRUE

memory_usage

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

post

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

查询

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

uri_string

当前请求的 URI TRUE

session_data

当前会话中存储的数据 TRUE

query_toggle_count

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

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

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

CodeIgniter - 基准测试

设置基准测试点

如果您想要测量执行一组行或内存使用所花费的时间,您可以使用 CodeIgniter 中的基准测试点来计算。CodeIgniter 中有一个单独的"基准测试"类用于此目的。

该类会自动加载;您不必加载它。它可以在您的控制器、视图和模型类中的任何位置使用。您所要做的就是标记一个起点和终点,然后在这两个标记点之间执行 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 将启用分析器,并将生成输出,如以下屏幕截图所示。

查看示例

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

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

CodeIgniter - 添加 JS 和 CSS

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

添加 JS 和 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(){
        //加载表单助手
        $this->load->helper('form');
        
        //获取所选语言
        $language = $this->input->post('language');
        
        //根据所选语言选择语言文件
        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');
        
        //从语言文件中获取消息。
        $data['msg'] = $this->lang->line('msg');
        
        $data['language'] = $language;
        //加载视图文件
        $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

它将产生如以下屏幕截图所示的输出。如果您在下拉列表中更改语言,则下拉列表下方的句子的语言也会相应更改。

国际化示例

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 注入 −

  • 转义查询
  • 查询竞价
  • Active Record 类

转义查询

<?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 引擎会自动为您完成此操作,因此您不必记住它。

Active Record 类

<?php
   $this->db->get_where('subscribers_tbl',array
      ('status'=> active','email' => 'info@arjun.net.in'));
?>

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

隐藏 PHP 错误

在生产环境中,我们通常不想向用户显示任何错误消息。如果在开发环境中启用它以进行调试,那就好了。这些错误消息可能包含一些信息,出于安全原因,我们不应该向站点用户显示这些信息。

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

PHP 错误报告级别

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

数据库错误

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

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

错误日志

另一种方法是将错误传输到日志文件。因此,它不会显示给网站上的用户。简单来说,在 application/cofig/config.php 文件中将 $config 数组中的 log_threshold 值设置为 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 的整个生命周期内保持令牌不变。通过设置值 TRUE,在配置数组中使用键 'csrf_regenerate' 将重新生成令牌,如下所示。

$config['csrf_regenerate'] = TRUE;

您还可以通过在配置数组中使用键 'csrf_exclude_uris' 设置白名单,从而将 URL 列入 CSRF 保护白名单,如下所示。您也可以使用正则表达式。

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

密码处理

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

  • 请勿以纯文本格式存储密码。

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

  • 请勿使用 Base64 或类似编码来存储密码。

  • 请勿使用弱或损坏的哈希算法(如 MD5 或 SHA1)。仅使用强密码哈希算法(如 BCrypt),它在 PHP 自己的密码哈希函数中使用。

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

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