rust translation

Mutability, 改变某个事物的能力,在Rust中的表现与其他语言有所不同。第一个方面就是没有默认状态:

1
2
let x = 5;
x = 6; // error!

我们可以通过mut关键字来声明:

1
2
let mut x = 5;
x = 6; // no problem!

这是一个可变的变量绑定。当绑定是可变的时候,意味着你可以改变此绑定。所以在上面的例子中,x可以从一个值变为另一个值。

如果你想

yii2过滤器:Filters

过滤器是一种运行于控制器动作之前或之后的对象。例如,运行于动作之前,用于确认终端用户是否有权访问的访问控制过滤器;运行与动作之后,用于压缩输出的内容压缩过滤器。

过滤器通常包含前置过滤器和后置过滤器。

过滤器的使用

过滤器实际是一类特殊的行为(behaviors)。因此,过滤器的使用跟行为的使用是一样的。我们可以通过重写控制器类中behaviors()方法来声明过滤器,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public function behaviors()
{

return [
[
'class' => 'yii\filters\HttpCache',
'only' => ['index', 'view'],
'lastModified' => function ($action, $params) {
$q = new \yii\db\Query();
return $q->from('user')->max('updated_at');
},
],
];
}

默认情况下,在控制器类中声明的过滤器会应用到当前控制器下的所有动作。But,我们可以通过配置only属性来指定当前过滤器应用的动作,如上例。我们也可以通过配置except属性来指出哪些动作不应用于当前过滤器。

yii2独立模块:Modules

Modules是一个由模型层、视图层、控制器层构成的自包含模块,另外还支持组件(components),终端用户可以直接访问modules的控制器。所以,modules会被视为一个小型的应用,模块却别于正常应用的是,其不能独立存在,而必须隶属于应用的一部分。

创建Modules

模块通常位于根目录,在这个目录内包含有子目录,如controllersmodelsviews,形如一个正常的应用,下面是一个模块的例子:

1
2
3
4
5
6
7
8
9
forum/
Module.php the module class file
controllers/ containing controller class files
DefaultController.php the default controller class file
models/ containing model class files
views/ containing controller view and layout files
layouts/ containing layout view files
default/ containing view files for DefaultController
index.php the index view file

PHP常用算法(排序、排序插入、xml转array)

一、排序

1、二维数组排序

主要思路是取出要用来的排序的字段,并以源数组键为建,对其进行相应排序后,对应回源数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* 二维数组排序(保留键、值)
* @param $arr array 排序数组
* @param $keys string 排序字段
* @param $order int 排序依据 0正序,1逆序
* @return $new_array array 返回排序后数组
*/

function array_sort($arr,$keys,$order){
//判断是否为数组,否则直接返回false
if(!is_array($arr)){
return false;
}
//定义一个存储排序字段的空数组
$keysvalue = array();
//遍历排序要排序的数组,将要排序的字段取出,形成一个一维数组,键为源数组键,值为排序字段值
foreach($arr as $key=>$val){
$keysvalue[$key] = $val[$keys];
}
//根据order参数,对上述以为数组排序,注意需采用asort以保留键名
if($order == 0){
asort($keysvalue);
}else{
arsort($keysvalue);
}
//将指针重置至第一个
reset($keysvalue);
//定一个空数组,用以保存排序后的数组
$new_array = array();
//遍历排序后的一维数组,由于其键就是源数组的键,对应其键就可形成一个新数组
foreach($keysort as $key=>$val){
$new_array[$key] = $arr[$key];
}
//返回排序后的新数组
return $new_array;
}

2、快速排序

前段时间遇到一个需要根据二位数组的中的多个维度进行排序的情况,于是将快速排序进行了一点改造,以支持多个维度的排序。

OpenSSL

OpenSSL可以对签名进行生成和验证,对数据进行加密和解密

PHP中CURL方法curl_setopt()函数的参数(mark待查...)

PHP CURL curl_setopt 参数

bool curl_setopt (int ch, string option, mixed value)
curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。

下列选项的值将被作为长整形使用(在option参数中指定):
? CURLOPT_INFILESIZE : 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小。
? CURLOPT_VERBOSE : 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值。
? CURLOPT_HEADER : 如果你想把一个头包含在输出中,设置这个选项为一个非零值。
? CURLOPT_NOPROGRESS: 如果你不会PHP为CURL传输显示一个进程条,设置这个选项为一个非零值。注意:PHP自动设置这个选项为非零值,你应该仅仅为了调试的目的来改变这个选项。
? CURLOPT_NOBODY : 如果你不想在输出中包含body部分,设置这个选项为一个非零值。
? CURLOPT_FAILONERROR : 如果你想让PHP在发生错误(HTTP代码返回大于等于300)时,不显示,设置这个选项为一人非零值。默认行为是返回一个正常页,忽略代码。
? CURLOPT_UPLOAD: 如果你想让PHP为上传做准备,设置这个选项为一个非零值。
? CURLOPT_POST : 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。

VPN下如何使用SSH连接(greenVPN)

环境:ubunut14.04

一直用greenVPN做代理,但是有一个问题,就是green把SSH给封了,导致连接VPN的时候,SSH无法连接远程服务器,那可如何是好,恐怕只有一条路了,就是让这些IP绕过VPN。

绕之前我们先route一下,看看使用VPN前后的网络变化:

before

Destination Gateway Genmask Flags Metric Ref Use Iface
default localhost 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 * 255.255.255.0 U 9 0 0 wlan0

yii2MVC应用

MVC是应用中常用的组织架构,对于一些基础的东西这里不做赘述,只介绍一些不是很常用的但是颇有裨益的内容,希望在以后的开发中能够加以运用。

Controller

controller主要负责接收请求数据并转发给model层处理,然后将返回值交给view层展现给用户。

独立actions(standalone actions)

satandalone actions 是指独立于controller的单独的一个action,一般负责一个独立功能,这个功能会被多方复用,比如获取验证码的captcha,捕获错误error。此类action需继承自yii\base\Action或是其子类,并实现其run()方法。