验证码
可以通过Sr::extension('Captcha')
实例化一个验证码类。
使用方法,比如下面的代码:
// 1.完整示例
$image=Sr::extension('Captcha');
$image->config('宽度','高度','字符个数','验证码session索引');
$code=$image->create();//这样就会向浏览器输出一张图片,并返回验证码图片上的内容
//2.简单示例:
$image=Sr::extension('Captcha');
$image->create();//这样就会向浏览器输出一张图片
提示:
1.所有参数都可以省略
默认是:宽80 高20 字符数4 验证码$_SESSION键名称captcha_code
第四个参数即把验证码存到$_SESSION['captcha_code'],第四个参数如果为null,则不会在$_SESSION中设置验证码。
当第四个参数是null的时候,可以通过$image->getCheckCode()
获取写到图片上的验证码字符串
2.设置验证码组成
验证码组成类型,有三种:1.number(纯数字) 2.letter(纯字母) 3.both(数字和数字)
默认是:both
可以通过$image->setCodeMode('类型')进行设置
比如下面的代码:
$image=Sr::extension('Captcha');
$image->setCodeMode('number')
->config('宽度','高度','字符个数','验证码session索引')
$code=$image->create();//这样就会向浏览器输出一张图片,并返回验证码图片上的内容
HTTP操作类
主要功能:
1.模拟登录,cookie自动管理,也可以手动结合自动管理cookie。
2.抓取数据,支持get,post。
可以通过Sr::extension('Http')
实例化一个HTTP操作类。
1.使用GET方式请求一个页面
通过get($url, $data = null, Array $header = null, $max_redirect = 0)
方法,来使用GET方式请求一个页面。
参数说明:
$url 必填:页面地址
$data 选填:要发送的数据数组或者原始数据,比如:array('user'=>'test','pass'=>'354534'),键是表单字段名称,值是表单字段的值,默认 null
$header 选填:附加的HTTP头,比如:array('Connection:keep-alive','Cache-Control:max-age=0'),注意冒号前后不能有空格,默认 null
$max_redirect 选填:遇到301或302时跳转的最大次数 ,默认 0 不跳转
示例如下:
$http = Sr::extension('Http');
//1.返回页面内容
$http->get('https://www.baidu.com/');
//2.返回页面内容并且传递数据
$args['code'] = '1';
$http->get('https://baidu.com/', $args);
//3.返回页面内容并且附加HTTP头
$header = array('Connection:keep-alive','Cache-Control:max-age=0');
$http->get('https://baidu.com/', null, $header);
//4.返回页面内容,遇到301或302时跳转的最大次数,默认 0 不跳转
$http->get('https://baidu.com/', null, null, 1);
2.使用POST方式请求一个页面
通过post($url, $data = null, Array $header = null, $max_redirect = 0)
方法,来使用POST方式请求一个页面。
参数说明:
$url 必填:页面地址
$data 选填:要发送的数据数组,比如:array('user'=>'test','pass'=>'354534'),键是表单字段名称,值是表单字段的值,默认 null
$header 选填:附加的HTTP头,比如:array('Connection:keep-alive','Cache-Control:max-age=0'),注意冒号前后不能有空格,默认 null
$max_redirect 选填:遇到301或302时跳转的最大次数 ,默认 0 不跳转
示例如下:
$http = Sr::extension('Http');
//1.返回页面内容
$html=$http->post('https://www.baidu.com/');
//2.返回页面内容并且传递数据
$args['code'] = '1';
$html=$http->post('https://baidu.com/', $args);
//3.返回页面内容并且附加HTTP头
$header = array('Connection:keep-alive','Cache-Control:max-age=0');
$html=$http->post('https://baidu.com/', null, $header);
//4.返回页面内容,遇到301或302时跳转的最大次数,默认 0 不跳转
$html=$http->post('https://baidu.com/', null, null, 1);
3.设置referer
通过setReferer($referer)
方法,来设置当次请求使用的referer,当get或者post请求完毕后,referer会被重置为null。
参数说明:
$referer 必填:页面地址
示例如下:
$http = Sr::extension('Http');
$http->setReferer('http://www.liepin.com/');
4.获取curl出错代码
通过errorCode()
方法,来获取curl出错代码(大于零的数),如果没有错误,返回0。
示例如下:
$http = Sr::extension('Http');
echo $http->errorCode();
5.获取curl出错字符串信息
通过errorMsg()
方法,来获取curl出错字符串信息,如果没有错误,返回空。
示例如下:
$http = Sr::extension('Http');
echo $http->errorMsg();
6.请求完成后,获取返回的HTTP状态码
通过code()
方法,来获取服务器返回的HTTP状态码。
示例如下:
$http = Sr::extension('Http');
echo $http->code();
7.是否是重定向
通过isRedirect()
方法,来请求完成后,响应是否是重定向。
示例如下:
$http = Sr::extension('Http');
if($http->isRedirect()){
//do something
}
8.获取重定向的地址
通过location()
方法,来请求完成后,响应是重定向的时候,这里会返回重定向的链接,如果不是重定向返回null。
示例如下:
$http = Sr::extension('Http');
echo $http->location();
9.设置UserAgent
通过setUserAgent($user_agent)
方法,来设置UserAgent。
参数说明:
$user_agent 必填:用户代理
示例如下:
$http = Sr::extension('Http');
$http->setUserAgent('Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; c8650 Build/GWK74) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/4.5 Mobile Safari/533.1s');
10.获取请求返回的HTTP头部字符串
通过header()
方法,来获取请求返回的HTTP头部字符串。
示例如下:
$http = Sr::extension('Http');
echo $http->header();
11.获取请求返回的页面内容
通过data($is_json = false)
方法,来获取请求返回的页面内容。
参数说明:
$is_json 选填:是否使用json_decode()解码一下,当返回数据是json的时候这个比较有用。默认false
示例如下:
$http = Sr::extension('Http');
$data=$http->data(true);
12.获取最后一次请求的地址
通过lastUrl()
方法,来请求完成后,获取最后一次请求的地址,这个往往是有重定向的时候使用的。
示例如下:
$http = Sr::extension('Http');
$url=$http->lastUrl();
13.设置curl句柄参数
通过setOpt($opt, $val)
方法,来设置curl句柄参数。
参数说明:
$opt 必填:curl_setopt()的第二个参数
$val 必填:curl_setopt()的第三个参数
示例如下:
$http = Sr::extension('Http');
$http->setOpt(CURLOPT_HEADER, false);
14.设置附加的cookie,这个不会影响自动管理的cookie
通过setCookie($key, $val = NULL)
方法,来设置附加的cookie,这个不会影响自动管理的cookie。
提醒:
1.每次请求完成后附加的cookie会被清空,自动管理的cookie不会受到影响。
2.如果cookie键名和自动管理的cookie中键名相同,那么请求的时候使用的是这里设置的值。
3.如果cookie键名和自动管理的cookie中键名相同,当请求完成后自动管理的cookie中键的值保持之前的不变,这里设置的值会被清除。
比如:
自动管理cookie里面有:name=snail,请求之前用setCookie设置了name=123
那么请求的时候发送的cookie是name=123,请求完成后恢复name=snail,如果再次请求那么发送的cookie中name=snail
参数说明:
$key 必填:cookie的key,也可以是一个键值对数组一次设置多个cookie,此时不需要第二个参数。
$val 选填:cookie的value
示例如下:
$http = Sr::extension('Http');
//1.设置单个cookie
$http->setCookie('username', '1122@qq.com');
//2.设置多个cookie
$http->setCookie(array('username' => '1122@qq.com', 'password' => '123456'));
15.设置每次请求之后需要sleep的时间
通过sleep($microSeconds)
方法,来设置每次请求之后需要sleep的时间,单位是毫秒,比如1000是一秒,
这个往往是抓数据的网站对访问频率进行了限制的时候使用的。
提示:设置参数是0的时候,则每次请求之后不会sleep。
示例如下:
$http = Sr::extension('Http');
$url=$http->sleep(1000);
异常记录数据库类
异常记录数据库类可以在发生系统错误的时候,将详细的错误信息记录到数据库,方便我们安全地调试。
首先我们需要先在数据库里面创建错误日志数据表,表结构如下:
CREATE TABLE `system_error_logger` (
`error_logger_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`domain` VARCHAR( 100 ) NOT NULL COMMENT '域名',
`client_ip` VARCHAR( 15 ) NOT NULL COMMENT '访问者IP',
`server_ip` VARCHAR( 15 ) NOT NULL COMMENT '服务器IP',
`message` TEXT NOT NULL COMMENT '错误信息',
`file` VARCHAR( 1000 ) NOT NULL COMMENT '出错文件路径',
`line` INT NOT NULL COMMENT '出错行数',
`code` INT NOT NULL COMMENT '出错代码',
`type` VARCHAR( 50 ) NOT NULL COMMENT '错误类型',
`request_data` TEXT NOT NULL COMMENT '请求的数据',
`create_time` INT NOT NULL COMMENT '创建时间',
PRIMARY KEY ( `error_logger_id` )
) ENGINE = INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '系统错误日志表'
然后在入口文件里面进行下面的配置:
/* 错误日志记录,注释掉这行会关闭日志记录,去掉注释则开启日志文件记录,
* 第一个参数是日志文件路径,第二个参数为是否记录404类型异常 */
//->addLoggerWriter(new Soter_Logger_FileWriter(SOTER_APP_PATH . 'storage/logs/',false))
->addLoggerWriter(new Soter_LoggerWriter_Database())
我们看到上面最后一句我们注册了一个Soter_LoggerWriter_Database日志数据库记录类。
Soter_LoggerWriter_Database的构造方法__construct($table = 'system_error_logger', $log404 = false, $dbGroup = null)
有三个可选参数,参数含义如下:
第一个参数:$table,也就是错误信息表名称,留空默认是system_error_logger
第二个参数:$log404,是否记录Soter_Exception_404错误,比如控制器不存在,方法不存在,hvmc模块不存在都会触发Soter_Exception_404错误。
第三个参数:$dbGroup,也就是使用->setDatabseConfig('database')
配置的数据库连接信息里面的数据库配置组名称,留空是:默认组
提示:
因为要把错误错误信息记录到数据库,所以注册Soter_LoggerWriter_Database之前必须,
必须在入口文件里使用->setDatabseConfig('database')
配置好数据库连接信息。