ENPHP非常适合中小型web应用的开发设计,内置数据验证,多数据库分离,Redis,数据缓存,会话认证,中间件等支持及常用的库函数。 以优化80%重复功能为目标设计的全栈框架。
PHP7+
mb_string扩展
入口文件配置 | 常量设置 | 数据库配置 | 全局变量数组 |
Controller控制器 | View视图 | Model数据模型 |
Input输入 | Output输出 | Session会话 | Cookie管理 |
数据库基本操作 | Model数据对象 | Model数据验证 |
Redis缓存 | Cache缓存 |
Authorize认证 | Security安全 | Captcha验证码生成 |
Upload上传文件 | Html标签生成 | Grid表格生成 |
Image图片修饰 | Smtp发送邮件 | Captcha验证码生成 |
入口文件一般是网站的根目录index.php文件,有几个重要的常量配置。
设置运行环境变量,三个值分别为测试环境,产品环境,开发环境。
// test,production,development
define('ENVIRONMENT', 'development');
define('APP_DIR', realpath('app_dir') . DIRECTORY_SEPARATOR);
define('SYS_DIR', realpath('system_dir') . DIRECTORY_SEPARATOR);
设置controller模块目录常量,模块必须是APP_DIR目录下module文件夹的子目录。
define('MODULE', 'www');
设置模板目录常量,模板必须是APP_DIR目录下template文件夹的子目录。
define('TEMPLATE', 'www');
常量文件位置在APP_DIR/config/下面三个子目录test,production,development中的constans.php文件分别按环境设置。
地址路由配置,以/index.php?c=main&a=index为例子。
c代表控制器类名字,默认控制器为Main。
a代表action方法名称,默认action为index。
你可以自定义设置这些值。
define('DEFAULT_CONTROLLER', 'main');
define('DEFAULT_ACTION', 'index');
define('CONTROLLER_KEY_NAME', 'c');
define('ACTION_KEY_NAME', 'a');
输出字符编码设置,以便Output::view()和Output::json()输出
define('CHARSET', 'utf-8');
//有效域名
define('COOKIE_DOMAIN', 'test.com');
//是否https发送
define('COOKIE_SECURE', false);
//有效路径
define('COOKIE_PATH', '/');
//http只读
define('COOKIE_HTTPONLY', false);
//过期时间秒
define('COOKIE_EXPIRE', 0);
//自定义session cookie名
define('SESSION_COOKIE_NAME', 'SE');
//session保存时间,0为关闭浏览器即失效,秒为单位
define('SESSION_EXPIRE', 0);
//加密安全混淆值
define('ENCRYPTION_KEY', 'weryi9878sdfddtgtbsdfh');
//表单提交token session 名称
define('TOKEN_SESSION_NAME', '34efddddre');
//表单token字段名
define('TOKEN_INPUT_NAME', 'fh40dfk9dd8dkfje');
//token过期时间,秒为单位
define('TOKEN_EXPIRE', 3600);
//认证方式,cookie,jwt,session
define('AUTH_TYPE', 'session');
//加密密钥
define('AUTH_SECRET', 'dsd#@4ddz!ds');
//认证名称
define('AUTH_NAME', 'auth');
//jwt存活时间,秒为单位
define('AUTH_JWT_EXPIRE', 600);
//jwt数据过载方式,header或url
define('AUTH_JWT_MODE', 'header');
//认证cookie存活时间
define('AUTH_COOKIE_EXPIRE', 0);
//默认语言环境
define('LANG', 'zh_cn');
URL重写转换输出模版,和路由无关,以配合Helper::url()使用
//url 重写
define('URL', ['mod_name'=>['controller_name/action_name'=>'/{controller_key}/{action_key}']]);
例子:
//注意Helper::url()参数和数组key的顺序
define('URL', [
'www' => [
//www表示模块名称
'main/index' => '/',
//echo $this->helper->url(['c'=>'main','a'=>'index'])
//输出 /
'main/lists/type' => '/list/{type}.html',
//echo $this->helper->url(['c'=>'main','a'=>'lists','type'=>'2'])
//输出 /list/2.html
'main/lists/type/page' => '/list/{type}_{page}.html'
//echo $this->helper->url(['c'=>'main','a'=>'lists','type'=>'2','page'=>'34'])
//输出 /list/2_34.html
]
]);
//分析器日志文件
define('PROFILER_LOG_FILE', APP_DIR . 'log/profiler.log');
define('MIDDLEWARE', [
//controller运行之前
'before' => [
'auth' => \middleware\Auth::class,
'authorize' => \middleware\Authorize::class
],
//controller运行之后
'after' => []
]);
数据库文件位置在APP_DIR/config/下面三个子目录test,production,development中的database.php文件分别按环境设置。
暂时只支持mysqli
default为默认数据库,可以直接Db::instance()访问默认数据库
Db::instance('read)访问read数据库
//例子
return [
//默认数据库
'default' =>
[
'driver' => 'mysqli',
'host' => 'set.database.to.hosts.file',
'username' => 'root',
'password' => '123456',
'database' => 'dataname',
'port' => 3306,
'charset' => 'utf8'
],
//读数据库
'read'=>
[
'driver' => 'mysqli',
'host' => 'set.database.to.hosts.file',
'username' => 'root',
'password' => '123456',
'database' => 'dataname',
'port' => 3306,
'charset' => 'utf8'
]
];
全局变量数组$var[]
//默认已包含$vars['controller']当前控制器值
//默认已包含$vars['action']当前action值
global $vars;
暂时只支持mysqli
default为默认数据库,可以直接Db::instance()访问默认数据库
Db::instance('read)访问read数据库
原始SQL语句执行,如是select返回数据集,delete,insert,update返回布尔值。
use system/Database as Db;
$db=Db::instance();
//返回一个结果集对象句柄
$result=$db->query('select * from table1 where f=2;');
//返回数据的条数,int类型
$result->num_rows;
//返回结果集其中一条数据,默认第一条以对象形式返回字段
$result->row();
//以数组形式返回第3条数据
//$row['f'];
$row=$result->row(2,'array');
//以对象形式返回第4条数据
//$row->f;
$row=$result->row(3,'object')
//返回数据集,默认对象形式
$recordset=$result->result();
foreach($recordset as $rs){
echo $rs->f;
}
//数组形式返回数据集
$recordset=$result->result('array');
foreach($recordset as $rs){
echo $rs['f'];
}
查询数据库表返回数据集对象。
参数说明
$table 数据表名称
$condition 查询条件数组,如果为空返回全部
//查询条件
$condition= [
'where' => ['f1'=>'2','f3>'=>'3','f4!='=>'8'], //where条件,支持运算符>,<,<>,!=,=,in,like,>=,<=
'fields' => ['f1','f2','f3'],//返回字段
'orderby' => ['f1'=>'desc','f2'=>'asc'], //排序
'limit' => [0,20] //返回数据条数 ,也可以是一个int值,如:limit=>10
];
//返回数据句对象
$recordset=$db->select('table1',$condition);
foreach($recordset->result() as $rs){
echo $rs->f1;
}
插入数据到数据库表,返回布尔值。
参数说明
$table 数据表名称
$data 插入表的数据数组
//需要插入的数据
$data=['f1'=>'1','f2'=>'2'];
$rs=$db->insert('table1',$data);
if($rs){
//插入成功,返回最后一条插入语句产生的自增ID
$this->db->insert_id;
}
删除数据集,返回布尔值
参数说明
$table 数据表名称
$where where条件数组,为空删除全部,谨慎使用!
//删除条件
$data=['f1'=>'1','f2'=>'2'];
$rs=$db->delete('table1',$data);
if($rs){
//删除成功,返回影响数据行数
$this->db->affected_rows;
}
SQL语句中的特殊字符进行转义,返回转义后字符串。
//参见 http://php.net/manual/zh/mysqli.real-escape-string.php
$db->escape('str');
数据集主键如果存在就替换不然插入新数据,返回布尔值。
参数说明
$table 数据表名称
$data 需要操作的数据数组
//需要插入或替换的数据,如果主键primary=1已存在,即替换本条数据,不然插入新数据。
$data=['primary'=>1,'f1'=>'1','f2'=>'2'];
$rs=$db->replace('table1',$data);
更新数据,返回布尔值或影响行数。
参数说明
$table 数据表名称
$data 需要更新的数据数组
$where where条件,为空更新全部
$data=['f1'=>'3','f3'=>'1'];
$where=['id'=>2];
$rs=$db->update('table1',$data,$where);
if($rs){
//更新成功,返回影响数据行数
$this->db->affected_rows;
}
关闭数据库链接,返回布尔值。
正常情况下,框架在执行完到最后自动关闭链接,也可以提前手动关闭。
//关闭默认数据链接
$db->close();
每个model必须于数据库某个表对应。
通过继承\system\Model,我们可以使用框架自带的功能便捷操作数据。
例如我们创建APP_DIR/model/Tablemodel.php。
//Tablemodel.php
//命名空间
namespace model;
//类必须继承系统\system\Model类
class Tablemodel extends \system\Model
{
//构造函数必须有
public function __construct()
{
//必须设置一个数据表
$this->table = 'test';
//必须设置一个主键
$this->primary = 'id';
//设置一个表的结构,以便验证过滤
$this->schema = [
'id' => [
'rules' => 'num',
'label' => 'ID',
'default' => null,
'required' => false
],
'name' => [
'validate' => ''required|string|filter:html',
'label' => '名称',
'default' => '',
'required' => true
]];
}
}
use model\Tablemodel;
//我们可以这样调用model
$model=new Tablemodel();
$model->one(1);
设置读数据库,默认为default数据库
$this->RDB='read_database';
设置写数据库,默认为default数据库
$this->WDB='write_database';
设置model对应数据表
$this->table='table1';
设置数据表主键字段
$this->primary='id';
设置数据表结构,以便验证过滤,数组key必须和字段名一致
validate['regex'] 正则验证字段数据合法性
validate['message'] 提示信息
filter 过滤数据,blank|tag|entity 三个值组合使用,
blank把连续多个空白字符转换成一个,
tag过滤html标签,
entity把html标签转换成实体字符。
literal 字段的字面名字
default 字段默认值
required 是否必须填写字段
$this->schema = [
'id' => [
'validate' => ['regex' => '/^\d+$/', 'message' => 'ID 不能为空'],
'literal' => 'ID',
'default' => null,
'required' => false
],
'name' => [
'validate' => ['regex' => '/^\S+$/', 'message' => '名称不能为空'],
'filter'=>'blank|tag|entity'
'literal' => '名称',
'default' => '',
'required' => true
]
];
获取数据表全部数据集,大表谨慎使用。
$recordset=$this->all(['fname1','fname2']);
//注意直接返回数据集,而不是result对象
foreach($recordset as $rs){
echo $rs->fname1;
}
获取数据表数据条数,适合myisam表。
//带条件的计算
$this->count(['field'=>'val']);
//获取表总条数
$this->count();
删除表数据,成功返回true不然返回false。
$rs=$this->delete(['f1'=>'2']);
if($rs){
//删除成功返回true
echo $rs;
}
插入数据,返回布尔值。
$data=['f1'=>'1','f1'=>'2'];
$rs=$this->insert($data);
if($rs){
//插入成功
}
获取最后插入的自增主键ID。
$data=['f1'=>'1','f1'=>'2'];
$rs=$this->insert($data);
if($rs){
//获取最后插入自增主键
echo $this->lastid();
}
通过主键数字ID或唯一字段获取一条记录。
//如果是主键数字id
$this->one(12);
//如果是唯一字段
$this->one(['uniqname'=>'abc']);
执行通用SQL语句,
如果是select返回基础数据库result对象,
执行update,insert,delete返回布尔值。
$result=$this->query('select * from table1');
按条件获取表数据对象集,参数为空,返回全部数据。
$condition=[
'where' => ['f1'=>'2'],
'fields' => ['f1','f2'],
'orderby' => ['f1'=>'desc','f2'=>'asc'],
'limit' => [0,20] //或 'limit'=>20
];
$this->select($condition);
更新数据记录,成功返回true,失败返回false
$data=['f1'=>2,'f2'=>3];
$where=['id'=>12];
$rs=$this->update($data,$where);
if($rs){
//修改成功,返回影响true
echo $rs;
}
按条件返回数据对象集,主要为了简化$this->select()
$where=['f1'=>'2'];
$fields=['f1','f2'];
$this->where($where,$fields);
验证过滤入库字段数据,返回system/Safe实例。
具体参见 文档Model数据验证部分
//可以在控制器这样调用
$this->model('Tablemodel')->safe->clear($data);
Model数据验证,为了用户输入数据的合法性,
提供了几个实用方法函数以配合Model的$this->schema属性使用。
接受返回验证不通过非法字段名数组
接受返回不在表字段中的非法字段名数组
接受返回未完成及必须填写的字段名数组
清理不存在于schema里面的字段,
不是成员的字段保存于$this->notMemberFields
返回清理后的数据
//清理之前的数据
$beforedata=[
//假如nomember不存在于$this->schema中,将被清理掉
'notmember'=>'val',
//假如f1字段名存在于$this->schema
'f1'=>'val'
];
//清理之后
$afterdata=$this->safe->clear($data);
//输出['f1'=>'val']
var_dump($afterdata);
//输出不是成员字段名['notmember']
var_dump($this->notMemberFields);
验证是否缺少必要字段,
缺少的必要字段保存于$this->incompleteFields
返回布尔值
//假如$this->schema包含字段f1,f2必须填写不能为空
//注意$data没有包含字段f2
$data=['f1'=>'val'];
//验证完整性
$result=$this->safe->complete($data);
if($result){
//通过完整性验证
}else{
//没有通过验证
var_dump($this->incompleteFields);
//输出['f2']
}
与schema默认数据覆盖合并,并且清理不存在于schema里面的字段,
不是成员的字段保存于$this->notMemberFields
返回合并及清理的数据
//假如$this->schema中存在f1字段,默认值等于val1
//注意f1现在的值为val2
$data=['f1'=>'val2','notmember'=>'valxx'];
//合并覆盖数据并清理非成员字段
$result=$this->safe->merge($data);
//输出['f1'=>'val2']
var_dump($result);
//输出不是成员字段名['notmember']
var_dump($this->notMemberFields);
验证数据合法性,非法字段保存于$this->illegalFields
返回布尔值
//假如$this->schema中字段f1必须为int类型
//注意f1是字符串
$data=['f1'=>'val'];
//验证合法性
$result=$this->safe->validate($data);
if($result){
//通过合法性验证
}else{
//没有通过验证
var_dump($this->illegalFields);
//输出['f1']
}
控制器文件必须放置在APP_DIR/module/module_name目录下,文件名必须和类名一致。
必须继承system/Controller。
创建一个控制器,以APP_DIR/module/www/Testcontroller.php为例。
//命名空间
namespace module\www;
//Testcontroller继承自定的inherit/Controller或system/Controller
class Testcontroller extends \inherit\Controller
{
public function index()
{
$data['hello_world']='hello wolrd';
//调用一个model
$this->model('Testmodel')->select();
//获取表单全部字段数据
$postdata=$this->input->post();
//清理不是schema成员字段
$afterdata=$this->model('Testmodel')->safe->clear($data);
//插入表单提交的数据到数据库
$this->model('Testmodel')->insert($afterdata);
//视图输出
$this->output->view('main',$data);
}
}
视图模板文件必须放置APP_DIR/template/module_name/目录下面
模板文件都是标准的原生php与htm混合代码,框架没有专门的模板功能
例如我们创建一个APP_DIR/template/www/test.php,www为module模块名。
<html>
<head><title><?php echo $title; ?></title></head>
<body>
<h1>
<?php echo $heading; ?>
</h1>
<div><?php echo $content; ?></div>
</body>
</html>
我们可以在控制器里调用模板。
比如下面代码:
//模板变量
$data=['title'=>'网页标题','heading'=>'小标题','content'=>'内容'];
//只需要填写文件名,支持子目录
$this->output->view('test',$data);
自定义帮助函数文件必须放置APP_DIR/helper/目录下面
必须以类的形式组织功能函数
例如我们创建APP_DIR/helper/Testhelper.php
//命名空间
namespace helper;
//我可以继承\system\System,以便使用框架内建属性和函数方法,如果不需要可以忽略
class Testhelper extends \system\System
{
public function returntex($param){
//只有继承\system\System才能调用此方法
$this->input->get('str');
return $param;
}
}
//我们可以在控制器,视图,model里面这样调用
//$this->helper->testhelper->returntex('str');
此方法框架自带
参数说明
param 查询字符串数组
path 入口文件路径,默认值 ENTRY常量值
anchor 锚点
配合常量URL使用,返回被匹配的URL地址字符串
//注意$this->helper->url()参数和数组key的顺序
define('URL', [
'www' => [
//www表示模块名称
'main/index' => '/',
//echo $this->helper->url(['c'=>'main','a'=>'index'])
//输出 /
'main/lists/type' => '/list/{type}.html',
//echo $this->helper->url(['c'=>'main','a'=>'lists','type'=>'2'])
//输出 /list/2.html
'main/lists/type/page' => '/list/{type}_{page}.html'
//echo $this->helper->url(['c'=>'main','a'=>'lists','type'=>'2','page'=>'34'])
//输出 /list/2_34.html
]
]);
不匹配URL常量返回
//假如入口文件为index.php
$this->helper->url();
//输出 /index.php?c=main&a=index
$this->helper->url(['p1'=>'1','p2'=>2]);
//输出 /index.php?c=main&a=index&p1=1&p2=2
//注意a参数和/mod/list.php以及anchor
$this->helper->url(['a'=>'lists','p1'=>'1','p2'=>2],'/mod/list.php','anchor');
//输出 /mod/list.php?c=main&a=lists&p1=1&p2=2#anchor
框架自带分页方法
//每个页面10条数据
$size=10;
//数据总数
$total=100;
//当前页码
$page=$this->input->get('page',1);
//地址模板
$url='/index/list/<%page%>.html';
//显示多少个页码链接
$visible=5;
//调用pager
$pager=$this->helper->pager($size, $total, $page, $url, $visible);
echo $pager;
//输出HTML
//
//<div class="pager">
//<a class="number" href="/index/list/1.html">1</a>
//<a class="number " href="/index/list/2.html">2</a>
//<a class="number " href="/index/list/3.html">3</a>
//<a class="number " href="/index/list/4.html">4</a>
//<a class="number " href="/index/list/5.html">5</a>
//<span class="ellipsis">...</span>
//<a class="number" href="/index/list/10">10</a>
//<a href="/index/list/2.html" class="next">下一页</a>
//<span class="info">共 100 条记录</span>
//</div>
获取地址查询字符串值,不填参数返回全部数据数组
//如果var_name为null,就返回默认值default_str
$this->input->get('var_name','default_str');
//返回全部数据
$this->input->get();
获取表单数据,没有参数返回全部表单字段数组
//字段不存在返回null
$this->input->post('field_name');
//返回全部
$this->input->post();
获取v4 IP地址
//如果没有获取成功返回0.0.0.0
$this->input->ip();
判断是否ajax请求,前端必须带HTTP_X_REQUESTED_WITH请求头部
返回布尔值
//$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'
$this->input->isAjax();
获取原始请求数据,一般用于API接口
$this->input->body();
获取上一个来源地址url,以便重定向
//如果没有为空
$prev_url=$this->input->referer();
//重定向
$this->output->redirect($prev_url);
获取当前请求方法
//返回 POST,GET,OPTION等
$this->input->method();
删除html多余空白字符
返回处理之后的字符串
$string='<b style="" > str </b><div> ste </div>';
$result=$this->output->compress($string);
echo $result;
//输出 <b style="">str</b><div>ste</div>
错误页面模板必须放置在APP_DIR/error/目录下面
参数说明
$name模板文件名,默认模板 genrnal
$data变量数据数组,默认数组 $data=['heading' => 'Error Message', 'message' => 'An error occurred.']
错误页面设置,自动echo内容
//通用错误页面,
$this->output->error();
//自定义错误页面,假如APP_DIR/error/404.php已存在
$this->output->error('404',['title'=>'Not Found']);
输出json格式数据
参数说明
$status 设置一个状态码
$message 设置一个状态消息字符串
$data 需要输出的数组数据,默认为空数组
$return 设置布尔值,是否返回内容自定义echo输出,默认自动echo内容
$this->output->json('1002','操作成功',['data'=>'val','data2'=>'val2']);
//输出 {'status':'1002','message':'操作成功','data':{'data1':'val','data2':'val2'}}
//有返回值的自定义输出
$result=$this->output->json('1002','操作成功',['data'=>'val','data2'=>'val2'],true);
echo $result;
请求重定向
参数说明
$uri 重定向地址
$http_response_code http头响应码,默认值为302
//转到index.php,默认响应码302
$this->output->redirect('/index.php');
//重定向到404页面
$this->output->redirect('/notfound.php',404);
设置响应头
$this->output->status('404');
//如同 header('HTTP/1.1 404 Not Found',true)
输出视图,自动echo输出。
参数说明
$view 视图模板文件名称
$data 视图变量数据数组
$return 是否返回内容自动输出,默认值false
$compress 是否压缩HTML,默认值false
//假如已存在APP_DIR/template/www/test.php
//模板数据
$data['var1'=>'val','var2'=>'val'];
//框架自动echo输出,
$this->output->view('test',$data);
//返回自定义echo输出,并压缩html
$result=$this->output->view('test',$data,true,true);
echo $result
删除一个会话元素,可以同时删除多个,没有返回值。
//设置一个session元素
$this->session->set('name','bob');
$this->session->set('name2','foo');
//删除,
$this->session->delete('name');
//删除多个
$this->session->delete(['name','name2']);
注销当前会话,返回布尔值。
取得某个会话字段的值之后删除此会话字段,字段不存在返回null。
取得某个会话字段,字段不存在返回null。
设置一个会话字段,永远返回true。
使用新生成的会话ID更新现有会话ID。
删除一个或多个cookie,参数接受一个字符串或一个数组,返回布尔值。
//删除某个cookie
$this->cookie->delete('name');
//删除多个cookie
$this->cookie->delete(['name1','name2','name3']);
获取一个cookie值,如果$name不存在返回null。
$this->cookie->set($name, $value, $expire = COOKIE_EXPIRE, $path = COOKIE_PATH, $domain = COOKIE_DOMAIN, $secure = COOKIE_SECURE, $httponly = COOKIE_HTTPONLY) 方法
设置一个cookie,返回布尔值。
参数说明
$name cookie名字
$value cookie值
$expire 过期时间,如果设置0,关闭浏览器失效,默认值COOKIE_EXPIRE常量
$path 有效路径,默认值COOKIE_PATH常量
$domain 有效域名,默认值COOKIE_DOMAIN常量
$secure 是否https,默认值COOKIE_SECURE常量
$httponly 是否http只读,默认值COOKIE_HTTPONLY常量
$this->cookie->many($data, $expire = COOKIE_EXPIRE, $path = COOKIE_PATH, $domain = COOKIE_DOMAIN, $secure = COOKIE_SECURE, $httponly = COOKIE_HTTPONLY) 方法
设置多个cookie,返回bool值。
参数说明
$data是一个数组,例如$data=['name'=>'val','name2'>'val2'].
其它参数参考 $this->cookie->set()方法
语言包必须放置APP_DIR/language目录下面。
我们以en_us和zh_cn为例:
创建英文APP_DIR/language/en_us/test.php
<?php
return ['test'=>'test','good'=>'very good'];
创建中文APP_DIR/language/zh_cn/test.php
<?php
return ['test'=>'测试','good'=>'非常好'];
echo $this->lang('zh_cn')->test['good'];
//输出 非常好
echo $this->lang('en_us')->test['good'];
//输出 very good
//如果设置了LANG常量为zh_cn,我们可以这样调用
echo $this->lang->test['good'];
// 输出 非常好
必须安装redis扩展才能使用
放置配置文件redis.php到APP_DIR/config/development(test 或 production)目录下。
文件代码内容:
<?php
return [
//默认
'default' => [
'host' => 'set.redis.to.hosts.file',
'port' => 6379,
'password' => '',
'database' => 0,
'timeout' => 30,
'serialization' => true //是否自动序列化
],
//队列服务器
'queue' => [
'host' => 'set.redis.to.hosts.file',
'port' => 6379,
'password' => '',
'database' => 0,
'timeout' => 30,
'serialization' => true //是否自动序列化
]
];
所有方法函数和属性均继承原生redis模块
//如果设置了default服务器,我们可以这样调用
$this->redis->get('key');
//调用一个自定义redis服务
$this->redis('queue')->get('key');
此类提供了一些常用的安全方法函数
把多个空白字符转换成一个空白字符,已被model验证引用。
$str=' dd dd d ';
echo $this->security->blank($str);
// 输出 ' dd dd d '
把html标签转换成实体字符,已被model验证引用。
如同php内建函数 htmlspecialchars($str, ENT_QUOTES | ENT_HTML401, CHARSET);
清理html标签,已被model验证引用。
如同php内建函数strip_tags($str)
生成一个表单token值,返回字符串。
<input name="_tokenname_" value="<?php echo $this->security->token() ?>" />
生成一个表单token名字,返回字符串。
<input name="<?php echo $this->security->tokenName() ?>" value="<?php echo $this->security->token() ?>" />
验证一个被提交上来的token是否有效,返回布尔值。
if($this->security->checkToken()){
//token 有效
}
//设置保存目录
$upload->dir='/www/upload';
//设置被允许的文件类型数组
$upload->extension=['jpg','gif'];
//设置接受表单数据字段
$upload->data=$_FILES['filedata'];
//自定文件名,如果不填写,将自动设置。
$upload->filename='filename';
//设置上传文件夹权限码,默认0777
$upload->mode='0777';
//必要属性设置完毕,执行上传处理,返回布尔值。
$upload->execute();
//执行完结果返回状态码
$upload->code;
// 详细请查看 $upload::ERROR_MSG
//执行完结果返回消息提示
$upload->message;
// 详细请查看 $upload::ERROR_MSG
//实例上传类
$upload = new \system\library\Upload();
//设置被允许的文件扩展
$upload->extension = ['jpg', 'gif', 'png', 'jpge'];
//设置上传保存目录
$upload->dir = $_SERVER['DOCUMENT_ROOT'] . '/upload/' .date('y/nd/');
//接受表单数据字段
$upload->data = $_FILES['filedata'];
//自定义生成一个文件名
$upload->filename = uniqid();
//执行上传操作
if ($upload->execute()) {
echo $upload->code; // 输出 '0'
echo $upload->message; //输出 '上传成功'
echo $upload->filename; //输出完成的文件名+最终扩展名
return;
}
生成html标签
//参数数组
$param=[
[
//标签名p
'name'='p',
//标签的属性
'properties'=>['name'=>'ptag'],
//子标签元素
'elements'=>[
[
'name'='i',
'properties'=>['name'=>'itag']
]
],
[ //标签div
'name'='div',
//标签属性
'properties'=>['name'=>'pdiv'],
]
];
//创建类实例
$html= new \System\Library\Html();
//生成标签
echo $html->tags($param);
//输出
//<p name="ptag">
// <i name="itag"></i>
//</p>
//<div name="pdiv"></div>
待优化
对图片进行加水印和缩放操作
//创建实例
$image= new \System\Library\Image();
//设置图片宽度
$image->width=300;
//设置图片高度
$image->height=300;
//源文件路径
$image->source='G:\fw.png';
//处理之后保存路径
$image->save='G:\fw300.png';
//水印字体大小
$image->fontsize=20;
//字体文件路径
$image->font=APP_DIR.'font/1.ttf';
//图片质量
$image->quality=90;
//文本水印
$image->text='text';
//是否开启水印功能,默认false
$image->watermark=true;
//水印文件地址,图片优先
$image->markimg='G:\water.png';
//处理图片,返回布尔值
if($image->resize()){
//处理结果状态码
$image->code;
//处理结果返回信息
$image->message;
}
//具体状态码和状态信息请查看 $image::MAG 常量
SMTP邮件发送, 支持发送纯文本邮件和HTML格式的邮件
//设置smtp服务器
$mail = new \system\library\Smtp([
'server'=>'smtp.qq.com',
'username' => "name",
'password' => "123456",
'port' => 25
]);
//设置发件人
$mail->from("XXXXX");
//设置发件人名字
$mail->fromname("XXXXX");
//设置收件人,多个收件人,调用多次
$mail->to("XXXXX");
//设置抄送,多个抄送,调用多次
$mail->cc("XXXX");
//设置秘密抄送,多个秘密抄送,调用多次
$mail->bcc("XXXXX");
//设置邮件主题
$mail->subject("test");
//设置邮件内容
$mail->body("<b>test</b>");
//发送邮件,返回布尔值
if($mail->send()){
//发送成功
}else{
//发送失败,返回错误信息
$mail->error();
}
设置验证码背景16进制颜色
$captcha->bgcolor='#333333';
设置是否显示边框,布尔值
$captcha->showBorder=true;
设置验证码边框16进制颜色
$captcha->borderColor='#cccccc';
设置验证码的位数
$captcha->charLen=4;
设置字体放置目录,绝对路径,默认目录APP_DIR/font/
$captcha->fontPath=APP_DIR.'/font/';
设置图片宽度,单位像素
设置图片高度,单位像素
获取生成的文字,以便保存到session
生成渲染图像
发送显示到浏览器
//假如地址 index.php?c=captcha&a=showimg
$authcode = new \system\library\Captcha();
$authcode->create();
$this->session->set('authcode', $authcode->getCode());
$authcode->show();
//html img标签显示 <img src="index.php?c=captcha&a=showimg" />