目录

CodeIgniter - 快速指南

CodeIgniter - Overview

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

如果您熟悉PHP,那么CodeIgniter将使您的任务更容易。 它有一套非常丰富的库和帮助器。 如果您从头开发网站,通过使用CodeIgniter,您将节省大量时间。 不仅如此,CodeIgniter内置的网站也是安全的,因为它能够防止通过网站发生的各种攻击。

CodeIgniter功能

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

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

  • 极轻的重量

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

  • Query Builder数据库支持

  • 表格和数据验证

  • 安全性和XSS过滤

  • 会话管理

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

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

  • 文件上传类

  • FTP类

  • Localization

  • Pagination

  • 数据加密

  • Benchmarking

  • 全页缓存

  • 错误记录

  • 应用程序分析

  • 日历班

  • 用户代理类

  • Zip编码类

  • 模板引擎类

  • 引用类

  • XML-RPC库

  • 单元测试类

  • 搜索引擎友好的URL

  • 灵活的URI路由

  • 支持挂钩和类扩展

  • 大型“帮助”功能库

CodeIgniter - Installing

安装CodeIgniter非常容易。 只需按照以下步骤操作 -

  • Step-1 - 从CodeIgniter链接下载CodeIgniter

  • Step-2 - 解压缩文件夹。

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

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

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

安装CodeIgniter

CodeIgniter - Application Architecture

CodeIgniter应用程序的体系结构如下所示。

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

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

  • 如果请求的页面已经在Caching ,则Routing将把请求传递给步骤3,响应将返回给用户。

  • 如果Caching中不存在请求的页面,则Routing会将请求的页面传递到步骤4以进行Security检查。

  • 在将请求传递给Application Controller ,检查提交数据的Security性。 Security检查后, Application Controller加载必要的Models, Libraries, Helpers, PluginsScripts ,并将其传递给View

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

目录结构

下面给出的图像显示了CodeIgniter的目录结构。

目录结构

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

  • Application
  • System
  • User_guide

申请(Application)

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

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

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

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

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

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

  • Hooks - 此文件夹中的文件提供了一种方法,可以在不破坏核心文件的情况下利用和修改框架的内部工作方式。

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

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

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

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

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

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

系统

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

此文件夹包含所有CodeIgniter的后果代码,组织到各种文件夹中 -

  • Core - 此文件夹包含CodeIgniter的核心类。 这里不要修改任何东西。 您的所有工作都将在应用程序文件夹中进行。 即使你的目的是扩展CodeIgniter核心,你也必须使用钩子,钩子存在于应用程序文件夹中。

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

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

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

  • Language - 语言文件夹包含语言文件。 你现在可以忽略它。

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

User_guide

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

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

CodeIgniter - MVC Framework

CodeIgniter基于Model-View-Controller (MVC) development pattern 。 MVC是一种将应用程序逻辑与表示分离的软件方法。 实际上,它允许您的网页包含最少的脚本,因为演示文稿与PHP脚本分开。

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

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

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

CodeIgniter - Basic Concepts

控制器(Controllers)

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

创建一个控制器

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

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

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

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

呼叫控制器

上面的控制器可以通过URI调用,如下所示 -

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

请注意index.php之后的上述URI中的“ test ”一词。 这表示控制器的类名。 由于我们给出了控制器“ Test ”的名称,我们在index.php之后写了“ test ”。 类名必须以uppercase letter但是当我们通过URI调用该控制器时,我们需要写lowercase letter 。 调用控制器的一般语法如下 -

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 ”。

指数输出

访问浏览器中的第二个URI,我们得到相同的输出,如上图所示。 在这里,我们在URI中的控制器名称之后传递了方法的名称。 由于方法的名称是“ index ”,我们得到相同的输出。

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

你好输出

注意事项 (Points to Remember)

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

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

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

Views

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

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

以下是上述代码的输出 -

测试输出

以下流程图说明了一切如何运作 -

流程图

Models

模型类旨在处理数据库中的信息。 例如,如果您使用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-loading Models

在某些情况下,您可能需要在整个应用程序中使用某些模型类。 在这种情况下,如果我们自动加载它会更好。

/*
| ---------------------------------------------------------------
|  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();

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

Helpers

顾名思义,它将帮助您构建系统。 它分为小功能以提供不同的功能。 CodeIgniter中提供了许多帮助程序,如下表所示。 我们也可以建立自己的帮手。

助手通常存储在您的system/helpers application/helpers directoryapplication/helpers directory 。 自定义助手存储在application/helpers目录中,系统助手存储在system/helpers目录中。 CodeIgniter将首先在您的application/helpers directory查找。 如果目录不存在或找不到指定的帮助程序,则CodeIgniter将查找全局system/helpers/directory 。 每个帮助程序(无论是自定义程序还是系统帮助程序)都必须在使用之前加载。

SN 助手名称和描述
1

Array Helper

Array Helper文件包含有助于使用数组的函数。

2

CAPTCHA Helper

CAPTCHA Helper文件包含有助于创建CAPTCHA图像的功能。

3

Cookie Helper

Cookie Helper文件包含有助于使用Cookie的功能。

4

Date Helper

Date Helper文件包含可帮助您处理日期的功能。

5

Directory Helper

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

6

Download Helper

Download Helper允许您将数据下载到桌面。

7

Email Helper

电子邮件帮助程序为使用电子邮件提供了一些辅助功能。 有关更强大的电子邮件解决方案,请参阅CodeIgniter的电子邮件类。

8

File Helper

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

9

Form Helper

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

10

HTML Helper

HTML Helper文件包含有助于使用HTML的函数。

11

Inflector Helper

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

12

Language Helper

语言助手文件包含有助于处理语言文件的功能。

13

Number Helper

Number Helper文件包含可帮助您处理数字数据的函数。

14

Path Helper

Path Helper文件包含允许您使用服务器上的文件路径的功能。

15

Security Helper

Security Helper文件包含与安全相关的功能。

16

Smiley Helper

Smiley Helper文件包含可以管理表情符号(表情符号)的功能。

17

String Helper

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

18

Text Helper

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

19

Typography Helper

Typography Helper文件包含的功能可帮助您以语义相关的方式格式化文本。

20

URL Helper

URL帮助程序文件包含有助于处理URL的函数。

21

XML Helper

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

加载助手

可以加载帮助程序,如下所示 -

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

其中name是帮助程序的名称。 例如,如果要加载URL Helper,则可以将其加载为 -

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

路由 (Routing)

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

your-domain.com/class/method/id/
  • first segment表示应该调用的控制器类。

  • second segment表示应该调用的类函数或方法。

  • third和任何其他段表示ID和将传递给控制器​​的任何变量。

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

自定义路由规则

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

SN 预留路由和描述
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段中的下划线自动替换短划线(' - '),从而在需要时节省其他路径条目。 这是必需的,因为破折号不是有效的类或方法名称字符,如果您尝试使用它,将导致致命错误。

路由可以通过wildcards或使用regular expressions进行自定义,但请记住,这些自定义的路由规则必须遵循保留规则。

通配符(Wildcards)

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

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

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

Example

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

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

常用表达

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

Example

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

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

CodeIgniter - Configuration

在设置站点之后,我们应该做的下一件事是配置站点。 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 - 在此处设置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'; //This will set the default environment

$active_group = 'test'; //This will set the test environment

自动加载配置

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

  • 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”将被引用为数组('codeigniter');

  • Models - 它是模型文件列表,应该自动加载。 提供阵列中的模型列表,如下所示,由CodeIgniter自动加载。 以下是如何自动加载多个模型文件的示例。

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

CodeIgniter - Working with Database

与任何其他框架一样,我们需要经常与数据库进行交互,CodeIgniter使我们的工作变得轻松。 它提供了丰富的功能,可以与数据库进行交互。

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

表名:螺柱
roll_noint(11)
namevarchar(30)

连接到数据库

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

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

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

$this->load->database();

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

插入记录

要在数据库中插入记录,请使用insert()函数,如下表所示 -

Syntax

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

Parameters

  • $tablestring ) - 表名

  • $setarray ) - 字段/值对的关联数组

  • $escapebool ) - 是否转义值和标识符

Returns

成功时为TRUE,失败时为FALSE

Return Type

bool

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

$data = array( 
   'roll_no' => ‘1’, 
   'name' => ‘Virat’ 
); 
$this->db->insert("stud", $data);

更新记录

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

Syntax

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

Parameters

  • $keymixed ) - 字段名称或字段/值对的数组

  • $valuestring ) - 字段值,如果$ key是单个字段

  • $escapebool ) - 是否转义值和标识符

Returns

CI_DB_query_builder instance (method chaining)

Return Type

CI_DB_query_builder

where()函数将决定要更新的记录。

Syntax

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

Parameters

  • $keymixed ) - 要比较的字段名称或关联数组

  • $valuemixed ) - 如果是单个键,则与此值相比较

  • $escapebool ) - 是否转义值和标识符

Returns

DB_query_builder instance

Return Type

object

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

Syntax

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

Parameters

  • $tablestring ) - 表名

  • $setarray ) - 字段/值对的关联数组

  • $wherestring ) - WHERE子句

  • $limitint ) - LIMIT子句

Returns

成功时为TRUE,失败时为FALSE

Return Type

bool
$data = array( 
   'roll_no' => ‘1’, 
   'name' => ‘Virat’ 
); 
$this->db->set($data); 
$this->db->where("roll_no", ‘1’); 
$this->db->update("stud", $data);

删除记录

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

Syntax

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

Parameters

  • $tablemixed ) - 要删除的表格; 字符串或数组

  • $wherestring ) - WHERE子句

  • $limitint ) - LIMIT子句

  • $reset_databool ) - TRUE重置查询“write”子句

Returns

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

Return Type

mixed

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

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

选择记录

要在数据库中选择记录,请使用get函数,如下表所示 -

Syntax

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

Parameters

  • $tablestring ) - 查询数组的表

  • $limitint ) - LIMIT子句

  • $offsetint ) - OFFSET子句

Returns

CI_DB_result instance (method chaining)

Return Type

CI_DB_result

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

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

关闭连接

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

$this->db->close(); 

例子 (Example)

创建一个名为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来执行此示例。 用您的URL替换yoursite.com。

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

CodeIgniter - Libraries

CodeIgniter框架的基本部分是它的库。 它提供了丰富的库,间接地提高了开发应用程序的速度。 系统库位于系统/库中。 我们需要做的就是加载我们想要使用的库。 可以加载库,如下所示 -

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

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

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

图书馆课程

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

SN 图书馆类和描述
1

Benchmarking Class

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

2

Caching Class

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

3

Calendaring Class

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

4

Shopping Cart Class

使用此类,您可以在购物车中添加或删除项目。 这些项目保存在会话中,并将保持活动状态,直到用户浏览该站点。

5

Config Class

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

6

Email Class

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

7

Encryption Class

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

8

File Uploading Class

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

9

Form Validation Class

此类提供各种函数来验证表单。

10

FTP Class

此类提供各种FTP相关功能,如传输文件以删除服务器,移动,重命名或删除服务器上的文件。

11

Image Manipulation Class

可以在此课程的帮助下完成图像的操作,如调整大小,缩略图创建,裁剪,旋转,水印。

12

Input Class

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

13

Language Class

该类用于国际化。

14

Loader Class

此类加载视图文件,驱动程序,助手,模型等元素。

15

Migrations Class

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

16

Output Class

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

17

Pagination Class

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

18

Template Parser Class

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

19

Security Class

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

20

Session Library

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

21

HTML Table

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

22

Trackback Class

Trackback类提供的功能使您可以发送和接收Trackback数据。

23

Typography Class

Typography Class提供了有助于格式化文本的方法。

24

Unit Testing Class

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

25

URI Class

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

26

User Agent Class

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

27

XML-RPC and XML-RPC Server Classes

CodeIgniter的XML-RPC类允许您将请求发送到另一台服务器,或者设置您自己的XML-RPC服务器以接收请求。

28

Zip Encoding Class

此类用于创建数据的zip存档。

创建库

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

  • 创建新库
  • 扩展本机库
  • Replace the native library

创建新库

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

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

Mylibrary.php

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

Loading the Custom Library

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

$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 class ,请使用如下所示的代码。 使用Email.php保存文件名,并为Email.php提供类名。

Email.php

Class CI_Email { 
}

CodeIgniter - Error Handling

很多时候,在使用应用程序时,我们遇到了错误。 如果错误处理不当,对用户来说非常烦人。 CodeIgniter提供了一种简单的错误处理机制。

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

通过从index.php文件更改下面给出的行,可以更改应用程序的环境。 这可以设置为任何东西,但通常有三个值(开发,测试,生产)用于此目的。

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

不同的环境需要不同级别的错误报告。 默认情况下,开发模式将显示错误,测试和实时模式将隐藏它们。 CodeIgniter提供了如下所示的三个函数来处理错误。

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

Syntax

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

Parameters

  • $messagemixed ) - 错误消息

  • $status_codeint ) - HTTP响应状态代码

  • $headingstring ) - 错误页面标题

Return Type

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

Syntax

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

Parameters

  • $pagestring ) - URI字符串

  • $log_errorbool ) - 是否记录错误

Return Type

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

Syntax

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

Parameters

  • $levelstring ) - 日志级别:'错误','调试'或'信息'

  • $messagestring ) - 要记录的消息

  • $php_errorbool ) - 我们是否记录了本机PHP错误消息

Return Type

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 - File Uploading

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

例子 (Example)

复制以下代码并将其存储在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来执行此示例。 用您的URL替换yoursite.com。

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

它将产生以下屏幕 -

上传表格

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

成功上传

CodeIgniter - Sending Email

在CodeIgniter中发送电子邮件要容易得多。 您还可以在CodeIgniter中配置有关电子邮件的首选项。 CodeIgniter提供以下发送电子邮件的功能 -

  • 多个协议 - 邮件,Sendmail和SMTP
  • SMTP的TLS和SSL加密
  • 多个收件人
  • CC and BCCs
  • HTML或纯文本电子邮件
  • Attachments
  • Word wrapping
  • Priorities
  • BCC批处理模式,可以将大型电子邮件列表分成小的BCC批次。
  • 电子邮件调试工具

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

SN 句法 参数 返回 退货类型
1 from( $from [, $name = '' [, $return_path = NULL ]])

$fromstring ) - “From”电子邮件地址

$namestring ) - “From”显示名称

$return_pathstring ) - 用于将未传递的电子邮件重定向到的可选电子邮件地址

CI_Email instance (method chaining)CI_Email
2 reply_to( $replyto [, $name = '' ])

$replytostring ) - 回复的电子邮件地址

$namestring ) - 显示回复电子邮件地址的名称

CI_Email instance (method chaining)CI_Email
2to( $to )

$tomixed ) - 以逗号分隔的字符串或一组电子邮件地址

CI_Email instance (method chaining)CI_Email
3cc( $cc )

$ccmixed ) - 以逗号分隔的字符串或一组电子邮件地址

CI_Email instance (method chaining)CI_Email
4 密送( $bcc [, $limit = '' ])

$bccmixed ) - 以逗号分隔的字符串或一组电子邮件地址

$limitint ) - 每批发送的最大电子邮件数

CI_Email instance (method chaining)CI_Email
5subject( $subject )

$subjectstring ) - 电子邮件主题行

CI_Email instance (method chaining)CI_Email
6message( $body )

$bodystring ) - 电子邮件正文

CI_Email instance (method chaining)CI_Email
7set_alt_message( $str )

$strstring ) - 备用电子邮件正文

CI_Email instance (method chaining)CI_Email
8set_header( $header, $value )

$headerstring ) - 标题名称

$valuestring ) - 标头值

CI_Email instance (method chaining)CI_Email
9 清除([ $clear_attachments = FALSE ])

$clear_attachmentsbool ) - 是否清除附件

CI_Email instance (method chaining)CI_Email
10 发送([ $auto_clear = TRUE ])

$auto_clearbool ) - 是否自动清除消息数据

CI_Email instance (method chaining)CI_Email
11 attach($ filename [,$ disposition =''[,$ newname = NULL [,$ mime ='']]])

$filenamestring ) - 文件名

$dispositionstring ) - 附件的“处置”。 无论此处使用的MIME规范如何,大多数电子邮件客户端都会自行决定。 iana

$newnamestring ) - 要在电子邮件中使用的自定义文件名

$mimestring ) - 要使用的MIME类型(对缓冲数据有用)

CI_Email instance (method chaining)CI_Email
12attachment_cid( $filename )

$filenamestring ) - 现有附件文件名

附件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();

例子 (Example)

创建一个控制器文件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替换为您网站的网址。

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

CodeIgniter - Form Validation

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

例子 (Example)

创建一个视图文件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来执行此示例。 此网址可能因您的网站而异。

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

它将产生以下屏幕 -

验证表格

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

未成功验证

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

验证成功

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

验证规则参考

以下是可供使用的所有本机规则的列表 -

规则 参数 描述

required

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

matches

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

regex_match

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

differs

Yes 如果表单元素与参数中的表单元素没有不同,则返回FALSE。 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。 修剪后应使用,以避免开始或结束时的空格

alpha_dash

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

numeric

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

integer

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

decimal

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

is_natural

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

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 Management

在构建网站时,我们经常需要跟踪用户的活动和状态,为此,我们必须使用session 。 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'     => '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');

例子 (Example)

创建一个名为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 = '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替换为您网站的网址。

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()函数,它接受两个参数:name和value,如下所示。 我们也可以传递一个数组。

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

检索Flashdata

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

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

如果您没有传递任何参数,那么您可以获得具有相同功能的数组。

例子 (Example)

创建一个名为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替换为您网站的网址。

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

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

Flash数据

点击“ Click Here ”链接,您将看到如下所示的屏幕。 在此屏幕中,您将看到闪存数据变量的值。 再次刷新页面,您将看到如上所示的屏幕,闪存数据变量将自动删除。

添加Flash数据

CodeIgniter - Tempdata

在某些情况下,您希望在某个特定时间段之后删除存储在会话中的数据,这可以使用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()函数执行如下所示的unset_tempdata() ,该函数将删除项目的一个参数。

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

例子 (Example)

创建一个名为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替换为您网站的网址。

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

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

TempData的

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

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

添加临时数据

销毁会话

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

$this->session->sess_destroy();

调用此函数后,将永久删除包括flashdataflashdata在内的所有会话数据,并且无法检索回来。

CodeIgniter - Cookie Management

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

Syntax

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

Parameters

  • $namemixed ) - 此函数可用的所有参数的Cookie名称或关联数组

  • $valuestring ) - Cookie值

  • $expireint ) - 到期前的秒数

  • $domainstring ) - Cookie域名(通常为:.yourdomain.com)

  • $pathstring ) - Cookie路径

  • $prefixstring ) - Cookie名称前缀

  • $securebool ) - 是否只通过HTTPS发送cookie

  • $httponlybool ) - 是否从JavaScript隐藏cookie

Return Type

void

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

Syntax

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

Parameters

  • $indexstring ) - Cookie名称

  • $xss_cleanbool ) - 是否对返回的值应用XSS过滤

Return

cookie值,如果未找到则为NULL

Return Type

mixed

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

Syntax

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

Parameters

  • $namestring ) - Cookie名称

  • $domainstring ) - Cookie域名(通常为:.yourdomain.com)

  • $pathstring ) - Cookie路径

  • $prefixstring ) - Cookie名称前缀

Return Type

void

delete_cookie()函数用于删除cookie()。

例子 (Example)

创建一个名为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 - Common Functions)

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

这些常用功能及其描述如下。

句法 is_php( $version )
参数

$versionstring ) - 版本号

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

$filestring ) - 文件路径

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

$keystring ) - 配置项密钥

返回 配置键值,如果未找到则为NULL
退货类型 mixed
描述 此函数用于获取配置项
句法 set_status_header( $code [, $text = '' ])
参数

$codeint ) - HTTP响应状态代码

$textstring ) - 使用状态代码设置的自定义消息

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

$strstring ) - 输入字符串

$url_encodedbool ) - 是否删除URLencoded字符

返回 Sanitized string
退货类型 string
描述 此功能可防止在ASCII字符之间插入NULL字符
句法 html_escape( $var )
参数

$varmixed ) - 要转义的变量(字符串或数组)

返回 HTML escaped string(s)
退货类型 mixed
描述 此函数充当本机PHP htmlspecialchars()函数。
句法 get_mimes()
返回 文件类型的关联数组
退货类型 array
描述 此函数从application/config/mimes.php返回对MIME数组的引用。
句法 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_namestring ) - 函数名称

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

下面给出了一个示例,它演示了所有上述功能。

例子 (Example)

这里我们只创建了一个控制器,我们将在其中使用上述功能。 复制下面给出的代码并将其保存在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 - Page Caching

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

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

启用缓存

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

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

其中$nminutes,minutes,您希望页面在刷新之间保持缓存状态。

禁用缓存

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

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

例子 (Example)

创建一个名为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.phproutes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

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

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

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

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

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

CodeIgniter - Page Redirection

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

Syntax

重定向( $uri = '', $method = 'auto', $code = NULL

Parameters

  • $uristring ) - URI字符串

  • $methodstring ) - 重定向方法('auto','location'或'refresh')

  • $codestring ) - HTTP响应代码(通常为302或303)

Return type

void

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

第二个可选参数可以包含auto,location或refresh中的三个值中的任何一个。 默认为auto。

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

例子 (Example)

创建一个名为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('http://www.iowiki.com'); 
      }
      public function computer_graphics() { 
         /*Load the URL helper*/ 
         $this->load->helper('url'); 
         redirect('http://www.iowiki.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.phproutes.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会将您重定向到iowiki.com网站,如果您访问以下URL,它会将您重定向到iowiki.com上的计算机图形教程。

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

CodeIgniter - Application Profiling

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

启用分析

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

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

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

禁用分析

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

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

启用/禁用Profiler部分

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

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

$config['queries'] = TRUE;

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

描述 默认

benchmarks

基准点的累计时间和总执行时间 TRUE

config

CodeIgniterConfig variablesTRUE

controller_info

请求的Controller类和方法 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

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

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

CodeIgniter - Benchmarking

设定基准点数

如果要测量执行一组行或内存使用所花费的时间,可以使用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(); 
?>

例子 (Example)

创建一个名为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 - Adding 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>

例子 (Example)

创建一个名为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.phproutes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

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

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

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

CodeIgniter - Internationalization

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

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

创建文件语言

要创建语言文件,必须使用_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自动加载。

例子 (Example)

创建一个名为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创建三个名为英语,法语和德语的文件夹,如下图所示。

三个文件夹

复制下面给出的代码并将其保存在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.phproutes.php文件,为上述控制器添加路由,并在文件末尾添加以下行。

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

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

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

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

国际化的例子

CodeIgniter - Security

XSS预防

XSS表示跨站点脚本。 CodeIgniter带有XSS过滤安全性。 此过滤器可以防止任何恶意JavaScript代码或任何其他试图劫持cookie并进行恶意活动的代码。 要通过XSS过滤器过滤数据,请使用xss_clean()方法,如下所示。

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

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

SQL Injection Prevention

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

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

  • 转义查询
  • 查询招标
  • Active Record Class

转义查询

<?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' => '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'在配置数组中设置来保护CSRF保护的URL,如下所示。 您还可以使用正则表达式。

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

密码处理

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

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

  • 始终哈希您的密码。

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

  • 不要使用弱或破坏的哈希算法,如MD5或SHA1。 只使用像BCrypt这样的强密码哈希算法,它在PHP自己的密码哈希函数中使用。

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

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

↑回到顶部↑
WIKI教程 @2018