2 Star 0 Fork 0

狂奔的蜗牛. / soter-docs

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
Clone or Download
extensions.html 19.18 KB
Copy Edit Raw Blame History
arraykeys authored 2017-07-19 11:41 . No commit message
<!DOCTYPE html>
<html>
<head>
<title>Soter官方拓展包功能列表</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="js/inc.js"></script>
</head>
<body>
<fieldset>
<legend>Soter官方拓展包功能列表</legend>
<ol>
<li><h2 class="title_h2">说明</h2>
除非特殊说明外,本页面的所介绍的功能都需要安装<a href="extension.html">官方拓展包</a>才能使用。
</li>
<li><h2 class="title_h2">验证码</h2>
可以通过<code>Sr::extension('Captcha')</code>实例化一个验证码类。
<br>使用方法,比如下面的代码:
<pre class="brush:php">
// 1.完整示例
$image=Sr::extension('Captcha');
$image->config('宽度','高度','字符个数','验证码session索引');
$code=$image->create();//这样就会向浏览器输出一张图片,并返回验证码图片上的内容
//2.简单示例:
$image=Sr::extension('Captcha');
$image->create();//这样就会向浏览器输出一张图片
</pre>
提示:
<br><b>1.所有参数都可以省略</b>
<br>默认是:宽80 高20 字符数4 验证码$_SESSION键名称captcha_code
<br>第四个参数即把验证码存到$_SESSION['captcha_code'],第四个参数如果为null,则不会在$_SESSION中设置验证码。
<br>当第四个参数是null的时候,可以通过<code>$image->getCheckCode()</code>获取写到图片上的验证码字符串
<br><b>2.设置验证码组成</b>
<br>验证码组成类型,有三种:1.number(纯数字) 2.letter(纯字母) 3.both(数字和数字)
<br>默认是:both
<br>可以通过$image->setCodeMode('类型')进行设置
<br>比如下面的代码:
<pre class="brush:php">
$image=Sr::extension('Captcha');
$image->setCodeMode('number')
->config('宽度','高度','字符个数','验证码session索引')
$code=$image->create();//这样就会向浏览器输出一张图片,并返回验证码图片上的内容
</pre>
</li>
<li>
<h2 class="title_h2">HTTP操作类</h2>
主要功能:
<br>1.模拟登录,cookie自动管理,也可以手动结合自动管理cookie。
<br>2.抓取数据,支持get,post。
<br>可以通过<code>Sr::extension('Http')</code>实例化一个HTTP操作类。
<br><b>1.使用GET方式请求一个页面</b>
<br>通过<code>get($url, $data = null, Array $header = null, $max_redirect = 0)</code>方法,来使用GET方式请求一个页面。
<br>参数说明:
<br>$url 必填:页面地址
<br>$data 选填:要发送的数据数组或者原始数据,比如:array('user'=>'test','pass'=>'354534'),键是表单字段名称,值是表单字段的值,默认 null
<br>$header 选填:附加的HTTP头,比如:array('Connection:keep-alive','Cache-Control:max-age=0'),注意冒号前后不能有空格,默认 null
<br>$max_redirect 选填:遇到301或302时跳转的最大次数 ,默认 0 不跳转
<br>示例如下:
<pre class="brush:php">
$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);
</pre>
<b>2.使用POST方式请求一个页面</b>
<br>通过<code>post($url, $data = null, Array $header = null, $max_redirect = 0)</code>方法,来使用POST方式请求一个页面。
<br>参数说明:
<br>$url 必填:页面地址
<br>$data 选填:要发送的数据数组,比如:array('user'=>'test','pass'=>'354534'),键是表单字段名称,值是表单字段的值,默认 null
<br>$header 选填:附加的HTTP头,比如:array('Connection:keep-alive','Cache-Control:max-age=0'),注意冒号前后不能有空格,默认 null
<br>$max_redirect 选填:遇到301或302时跳转的最大次数 ,默认 0 不跳转
<br>示例如下:
<pre class="brush:php">
$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);
</pre>
<b>3.设置referer</b>
<br>通过<code>setReferer($referer)</code>方法,来设置当次请求使用的referer,当get或者post请求完毕后,referer会被重置为null。
<br>参数说明:
<br>$referer 必填:页面地址
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
$http->setReferer('http://www.liepin.com/');
</pre>
<b>4.获取curl出错代码</b>
<br>通过<code>errorCode()</code>方法,来获取curl出错代码(大于零的数),如果没有错误,返回0。
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
echo $http->errorCode();
</pre>
<b>5.获取curl出错字符串信息</b>
<br>通过<code>errorMsg()</code>方法,来获取curl出错字符串信息,如果没有错误,返回空。
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
echo $http->errorMsg();
</pre>
<b>6.请求完成后,获取返回的HTTP状态码</b>
<br>通过<code>code()</code>方法,来获取服务器返回的HTTP状态码。
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
echo $http->code();
</pre>
<b>7.是否是重定向</b>
<br>通过<code>isRedirect()</code>方法,来请求完成后,响应是否是重定向。
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
if($http->isRedirect()){
//do something
}
</pre>
<b>8.获取重定向的地址</b>
<br>通过<code>location()</code>方法,来请求完成后,响应是重定向的时候,这里会返回重定向的链接,如果不是重定向返回null。
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
echo $http->location();
</pre>
<b>9.设置UserAgent</b>
<br>通过<code>setUserAgent($user_agent)</code>方法,来设置UserAgent。
<br>参数说明:
<br>$user_agent 必填:用户代理
<br>示例如下:
<pre class="brush:php">
$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');
</pre>
<b>10.获取请求返回的HTTP头部字符串</b>
<br>通过<code>header()</code>方法,来获取请求返回的HTTP头部字符串。
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
echo $http->header();
</pre>
<b>11.获取请求返回的页面内容</b>
<br>通过<code>data($is_json = false)</code>方法,来获取请求返回的页面内容。
<br>参数说明:
<br>$is_json 选填:是否使用json_decode()解码一下,当返回数据是json的时候这个比较有用。默认false
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
$data=$http->data(true);
</pre>
<b>12.获取最后一次请求的地址</b>
<br>通过<code>lastUrl()</code>方法,来请求完成后,获取最后一次请求的地址,这个往往是有重定向的时候使用的。
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
$url=$http->lastUrl();
</pre>
<b>13.设置curl句柄参数</b>
<br>通过<code>setOpt($opt, $val)</code>方法,来设置curl句柄参数。
<br>参数说明:
<br>$opt 必填:curl_setopt()的第二个参数
<br>$val 必填:curl_setopt()的第三个参数
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
$http->setOpt(CURLOPT_HEADER, false);
</pre>
<b>14.设置附加的cookie,这个不会影响自动管理的cookie</b>
<br>通过<code>setCookie($key, $val = NULL)</code>方法,来设置附加的cookie,这个不会影响自动管理的cookie。
<br>提醒:<br>
1.每次请求完成后附加的cookie会被清空,自动管理的cookie不会受到影响。<br>
2.如果cookie键名和自动管理的cookie中键名相同,那么请求的时候使用的是这里设置的值。<br>
3.如果cookie键名和自动管理的cookie中键名相同,当请求完成后自动管理的cookie中键的值保持之前的不变,这里设置的值会被清除。<br>
比如:<br>
自动管理cookie里面有:name=snail,请求之前用setCookie设置了name=123<br>
那么请求的时候发送的cookie是name=123,请求完成后恢复name=snail,如果再次请求那么发送的cookie中name=snail<br>
参数说明:
<br>$key 必填:cookie的key,也可以是一个键值对数组一次设置多个cookie,此时不需要第二个参数。
<br>$val 选填:cookie的value
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
//1.设置单个cookie
$http->setCookie('username', '1122@qq.com');
//2.设置多个cookie
$http->setCookie(array('username' => '1122@qq.com', 'password' => '123456'));
</pre>
<b>15.设置每次请求之后需要sleep的时间</b>
<br>通过<code>sleep($microSeconds)</code>方法,来设置每次请求之后需要sleep的时间,单位是毫秒,比如1000是一秒,
<br>这个往往是抓数据的网站对访问频率进行了限制的时候使用的。
<br>提示:设置参数是0的时候,则每次请求之后不会sleep。
<br>示例如下:
<pre class="brush:php">
$http = Sr::extension('Http');
$url=$http->sleep(1000);
</pre>
</li>
<li><h2 class="title_h2">异常记录数据库类</h2>
异常记录数据库类可以在发生系统错误的时候,将详细的错误信息记录到数据库,方便我们安全地调试。
<br>首先我们需要先在数据库里面创建错误日志数据表,表结构如下:
<pre class="brush:php">
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 = '系统错误日志表'
</pre>
然后在入口文件里面进行下面的配置:
<pre class="brush:php">
/* 错误日志记录,注释掉这行会关闭日志记录,去掉注释则开启日志文件记录,
* 第一个参数是日志文件路径,第二个参数为是否记录404类型异常 */
//->addLoggerWriter(new Soter_Logger_FileWriter(SOTER_APP_PATH . 'storage/logs/',false))
->addLoggerWriter(new Soter_LoggerWriter_Database())
</pre>
我们看到上面最后一句我们注册了一个Soter_LoggerWriter_Database日志数据库记录类。
<br>Soter_LoggerWriter_Database的构造方法__construct($table = 'system_error_logger', $log404 = false, $dbGroup = null)
<br>有三个可选参数,参数含义如下:
<br>第一个参数:$table,也就是错误信息表名称,留空默认是system_error_logger
<br>第二个参数:$log404,是否记录Soter_Exception_404错误,比如控制器不存在,方法不存在,hvmc模块不存在都会触发Soter_Exception_404错误。
<br>第三个参数:$dbGroup,也就是使用<code>->setDatabseConfig('database')</code>配置的数据库连接信息里面的数据库配置组名称,留空是:默认组
<b class="text_strong">
<br>提示:
<br>因为要把错误错误信息记录到数据库,所以注册Soter_LoggerWriter_Database之前必须,
<br>必须在入口文件里使用<code>->setDatabseConfig('database')</code>配置好数据库连接信息。
</b>
</li>
</ol>
</fieldset>
<script src="js/inc.foot.js"></script>
</body>
</html>
1
https://gitee.com/snail/soter-docs.git
git@gitee.com:snail/soter-docs.git
snail
soter-docs
soter-docs
master

Search