Soter官方拓展包功能列表
  1. 说明

    除非特殊说明外,本页面的所介绍的功能都需要安装官方拓展包才能使用。
  2. 验证码

    可以通过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();//这样就会向浏览器输出一张图片,并返回验证码图片上的内容
    					
  3. 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);
                                            
  4. 异常记录数据库类

    异常记录数据库类可以在发生系统错误的时候,将详细的错误信息记录到数据库,方便我们安全地调试。
    首先我们需要先在数据库里面创建错误日志数据表,表结构如下:
    						 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')配置好数据库连接信息。