Canal是一个开源的数据同步工具
CloudCanal是阿里巴巴基于Canal开发的,但并不开源,有免费和付费版本之分。
Canal基于binary log增量订阅和消费,canal可以做:
- 数据库镜像
- 数据库实时备份
- 索引构建和实时维护
- 业务cache(缓存)刷新
- 带业务逻辑的增量数据处理
使用 Canal 可以将 mysql 数据增量同步到 es中。
Canal是一个开源的数据同步工具
CloudCanal是阿里巴巴基于Canal开发的,但并不开源,有免费和付费版本之分。
Canal基于binary log增量订阅和消费,canal可以做:
使用 Canal 可以将 mysql 数据增量同步到 es中。
默认不能返回多个列。
函数语法:
$arr = array_column($array, $key, $index_key);
第二个参数,可以是NULL,此时返回所有的列(通常用于修改 key )
除了 NULL,可以传递字符串,返回该列数据。
第三个参数,是返回的数组 key 的规则,默认是索引(数字)
如果希望使用关联数组,再指定字符串,用于指定key。
对于一次返回多个列,比如原本 5 列数据,只读取其中的2列,该函数默认是不可以的,需要手动写一个循环读取。
例如:
/**
* 提取二维数组的一个或多个列(如果为一个值,则和 array_column 一模一样)
* @param $input -- 原数组
* @param null $column_keys
* @param null $index_key
* @return array
*/
function array_columns($input, $column_keys=null, $index_key=null){
$result = array();
//多个字符串用,分割 (可以直接传递array)
if(is_string($column_keys)){
$column_keys = explode(',', $column_keys);
}
//默认值
$keys = $column_keys ?: array();
if($input){
foreach($input as $k=>$v){
// 指定返回列
if($keys){
$tmp = array();
//多列时带列名的数组
if(count($keys)>1){
foreach($keys as $key){
$tmp[$key] = $v[$key];
}
}
//没有列名的基本元素(确保和 array_column 返回值一致)
else{
$tmp = $v[$keys[0]];
}
}
//返回所有列
else{
$tmp = $v;
}
//指定键名
if(isset($index_key)){
$result[$v[$index_key]] = $tmp;
}
//默认索引键名
else{
$result[] = $tmp;
}
}
}
return $result;
}
打开表数据后,点击左上角的“文本”,此时会出现一个较大的输入框显示该值,可以查看和编辑(可以拖拽缩放)
除了“文本”格式外,还可以显示为 : 16进制、图片、网页等格式。
再次点击该按钮,会隐藏。
nearby 的翻译
词性 | 翻译 | 反向翻译 | 频率help_outline |
---|---|---|---|
副词 | 附近 | nearby, about, hereabouts, hereabout | |
就近 | nearby, in the neighborhood, without having to go so far | ||
近旁地 | nearby | ||
在附近 | nearby |
形容词 | 附近的 | by, nearby, vicinal | |
---|---|---|---|
合宜的 | accessible, adjacent, available, commodious, near at hand, nearby | ||
近旁的 | nearby |
获取函数的参数列表。(类似js)
fun_num_args取得参数数量
fun_get_args取得参数列表
function foo(){
$numargs = func_num_args(); //参数数量
echo "参数个数是: $numargs<br />\n";
if ($numargs >= 2) {
echo "第二个参数的值:" . func_get_arg(1) . "<br />\n";
}
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++) {
echo "第{$i}个参数值:{$arg_list[$i]}<br />\n";
}}
foo(1, 'd', 3,4);
方法一:concat直接把string1和string2等等的字符串拼接起来
concat 语法:
CONCAT(string1,string2,...)
说明:此方法在拼接的时候如果有一个值为NULL,则返回NULL
方法二:concat_ws 带分隔符拼接
concat_ws语法:
CONCAT_WS(separator,string1,string2,...)
说明:string1,string2代表的是字符串,而separator代表的是连接其他参数的分隔符,可以是符号,也可以是字符串。如果分隔符为NULL,则结果为NULL。此方法参数可以为NULL。
方法三:group_concat([distinct] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
SELECT id,GROUP_CONCAT(type) FROM log_sys_interview GROUP BY type ;
其他:如果直接使用 + ,则被当作数字进行相加。
去除标签使用 strip_tags 函数
去掉字符串str的所有html标签。参数二是可保留的标签列表
strip_tags($str[, $allow]);
参数二,使用字符串表示。比如 strip_tags($str, “<p><b>”) 则表示保留p和b标签。
此函数要求字符串中的标签正确闭合,否则解析后的字符串不正常。
另外,对于 等字符实体,不会自动转换。如果需要,则使用 str_replace 把 替换为 ”
strip_tags(str_replace(' ','',$str));
批量替换为空字符串:
str_replace(array(" ","&nbsp;","\t","\r\n","\r","\n"),"")
正则消除标签:
$str=preg_replace("/<s*imgs+[^>]*?srcs*=s*(''|")(.*?)\1[^>]*?/?s*>/i","", $str); //过滤img标签
$str=preg_replace("/s+/","", $str); //过滤多余回车
$str=preg_replace("/<[ ]+/si","<",$str); //过滤<__("<"号后面带空格)
$str=preg_replace("/<!--.*?-->/si","",$str); //注释
$str=preg_replace("/<(!.*?)>/si","",$str); //过滤DOCTYPE
$str=preg_replace("/<(/?html.*?)>/si","",$str); //过滤html标签
$str=preg_replace("/<(/?head.*?)>/si","",$str); //过滤head标签
$str=preg_replace("/<(/?meta.*?)>/si","",$str); //过滤meta标签
$str=preg_replace("/<(/?body.*?)>/si","",$str); //过滤body标签
$str=preg_replace("/<(/?link.*?)>/si","",$str); //过滤link标签
$str=preg_replace("/<(/?form.*?)>/si","",$str); //过滤form标签
$str=preg_replace("/cookie/si","COOKIE",$str); //过滤COOKIE标签
$str=preg_replace("/<(applet.*?)>(.*?)<(/applet.*?)>/si","",$str); //过滤applet标签
$str=preg_replace("/<(/?applet.*?)>/si","",$str); //过滤applet标签
$str=preg_replace("/<(style.*?)>(.*?)<(/style.*?)>/si","",$str); //过滤style标签
$str=preg_replace("/<(/?style.*?)>/si","",$str); //过滤style标签
$str=preg_replace("/<(title.*?)>(.*?)<(/title.*?)>/si","",$str); //过滤title标签
$str=preg_replace("/<(/?title.*?)>/si","",$str); //过滤title标签
$str=preg_replace("/<(object.*?)>(.*?)<(/object.*?)>/si","",$str); //过滤object标签
$str=preg_replace("/<(/?objec.*?)>/si","",$str); //过滤object标签
$str=preg_replace("/<(noframes.*?)>(.*?)<(/noframes.*?)>/si","",$str); //过滤noframes标签
$str=preg_replace("/<(/?noframes.*?)>/si","",$str); //过滤noframes标签
$str=preg_replace("/<(i?frame.*?)>(.*?)<(/i?frame.*?)>/si","",$str); //过滤frame标签
$str=preg_replace("/<(/?i?frame.*?)>/si","",$str); //过滤frame标签
$str=preg_replace("/<(script.*?)>(.*?)<(/script.*?)>/si","",$str); //过滤script标签
$str=preg_replace("/<(/?script.*?)>/si","",$str); //过滤script标签
$str=preg_replace("/javascript/si","Javascript",$str); //过滤script标签
$str=preg_replace("/vbscript/si","Vbscript",$str); //过滤script标签
$str=preg_replace("/on([a-z]+)s*=/si","On\1=",$str); //过滤script标签
$str=preg_replace("/&#/si","&#",$str); //过滤script标签
去除 < 和 > 包裹的标签:
function delhtml($str){ //清除html标签
$st=-1; //开始
$et=-1; //结束
$stmp=array();
$stmp[]=" ";
$len=strlen($str);
for($i=0;$i<$len;$i++){
$ss=substr($str,$i,1);
if(ord($ss)==60){ //ord("<")==60
$st=$i;
}
if(ord($ss)==62){ //ord(">")==62
$et=$i;
if($st!=-1){
$stmp[]=substr($str,$st,$et-$st+1);
}
}
}
$str=str_replace($stmp,"",$str);
return $str;
}
纯正则消除标签和字符实体:
function clear_html_label($html)
{
$search = array ("''<script[^>]*?>.*?</script>''si", "''<[/!]*?[^<>]*?>''si", "''([rn])[s]+''", "''&(quot|#34);''i", "''&(amp|#38);''i", "''&(lt|#60);''i", "''&(gt|#62);''i", "''&(nbsp|#160);''i", "''&(iexcl|#161);''i", "''&(cent|#162);''i", "''&(pound|#163);''i", "''&(copy|#169);''i", "''&#(d+);''e");
$replace = array ("", "", "1", """, "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), "chr(1)");
return preg_replace($search, $replace, $html);
}
可以直接在 ms store 安装。
shareX 快速截图编辑(取消自动上传功能、不要上传至远程服务器)
screentoGif 专业的gif软件
不额外安装软件的办法:使用 web 浏览器打开。
比如 ie, chrome , edge等均可。
无线网卡可根据不同的接口类型来区分,第
笔记本通常不需要额外的无线网卡,一般只有台式机需要。
较新的台式机主板,已经开始内置wifi,台式机可以使用USB或PCIE无线网卡,两者的价格相近,都是几十元左右。