【原创】yii2使用GridView操作ActionColumn栏目根据权限设置显示或隐藏

yii2在使用GridView显示列表内容,最后操作栏目里面的查看、更新删除,根据后台设置路由权限自动显示或隐藏,查看源码后发现原来在\vendor\yiisoft\yii2\grid\ActionColumn.php文件里就有对应的属性可以设置了,例如需要判断按钮是否显示就可以设置visibleButtons属性以下红色部分代码即可。

[
	'class' => 'yii\grid\ActionColumn',
	//'template' => '{update} {delete}',
	'visibleButtons' => [
		'update' => \Yii::$app->user->can('buy/update'),
		'delete' => \Yii::$app->user->can('buy/delete'),
		'view' => \Yii::$app->user->can('buy/view'),
	],
	'buttons' => [
		'delete' => function ($url, $model) {
			return Html::a('    ',

				$url.'&'.http_build_query($model->toArray()),
				[
					//'class'=>'w1-action-del a_delete',
					'title' => Yii::t('yii', '删除'),
					'aria-label' => Yii::t('yii', '删除'),
					//'id'=>'a_delete',
					'data-pjax'=>0,
					'data-method'=>'post',
					'data-confirm' => '您确定要删除此项吗?'
				]
			);
		},
	],
],

Yii::$app->user->can是判断用户路由权限。

button的delete是我自定义的内容,可以不用理会。

发表在 服务器 | 标签为 | 留下评论

2019阿里云域名优惠口令(最新)

阿里云2019【优惠口令】
com英文域名续费:商标优选即买即用
cn英文域名注册:商标监控免费试用
cn英文域名续费:商标注册急速申报
xin域名注册:神来气旺
xin域名续费:抱诚守信

发表在 服务器 | 标签为 | 留下评论

mysql5.6一主多从有台从库并行复制同步错误

今天mysql 一主多从同步复制,有台从库查询状态show slave status\G;发现有错误。

Cannot execute the current event group in the parallel mode. Encountered event Format_desc, relay-log name .

网上查询后是Server version: 5.6.10-log版本并行复制导致bug,我还能说什么呢?暂时没时间去深入研究。

解决: 关闭并行复制

mysql> stop slave;
Query OK, 0 rows affected (0.07 sec)

mysql> set global slave_parallel_workers=0;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.17 sec)

再次查询同步正常了

发表在 服务器 | 标签为 | 留下评论

RockMongo管理MongoDB清空表释放磁盘空间

今天发现mongodb的数据库磁盘爆满了,需要清空一些表。使用的是RockMongo管理。

进入对应表点击清除按钮,确定后即可清空表数据,可是这时候磁盘的空间是没有被释放的。

在确认还有剩余磁盘空间等于删除后数据大小的情况下。

执行官方文档里面的命令

https://docs.mongodb.com/manual/reference/command/repairDatabase/#dbcmd.repairDatabase

{ repairDatabase: 1 }

选择对应需要修复的数据库,输入命令,点击代码执行,等待结果即可。

发表在 服务器 | 标签为 | 留下评论

微信开发者工具打开调试“未绑定网页开发者”页面

今天因为工作需要,要在微信开发者工具里面打开一个网页,在手机上是可以打开的,正常你是必须绑定对应公众号开发者信息才能调试自己的网页,可是这次没办法,这时候就要想法办法了,既然手机上是可以的,那就证明以普通浏览者访问是没问题,此时就必须在手机访问后保存下来的状态转移到微信开发工具上,这时候就要借助有名的fiddler和插件FreeCookies了。
1:安装最新的Fiddler
2:进入Fiddler安装目录下的Scripts目录下,将FreeCookies.dll复制到该目录下(下载请至:https://github.com/lulianqi/FreeCookies/raw/master/bin/Debug/FreeCookies.dll 或 http://lulianqi.com/file/FreeCookies.dll)

3:重启Fiddler即可在面板中出现 free cookies 标签,然后点旁边Filters过滤设置,设置只显示你要监控的域名,不然会乱到你分不清。

接着选项里面设置https 把勾选都选上,因为要监控的是https协议网址。

打开fiddler后再打开微信电脑端,在电脑端打开需要监控的网页并点击上面复制链接地址,这时候就能看到需要监控网站出现在列表上,点击右边的free cookies标签下的Get Cookies按钮,获取到相关session信息。把要写入cookies监控的域名写入contain后面的输入框里。勾选下面的Inject Cookies写入一次,后面的是只要监控到一直写入。

接着打开微信开发者工具这时候很有可能会提示:

应该是被fiddler拦截了导致的,点击信任。然后就尝试在地址黏贴刚刚复制链接地址,回车访问。如果fidller能监控到并写入信息域名会变成黄色如下图:

正常写入的session有可能和原来的重复对应着修改成要写入的value即可。其实不多你都可以自己手动写入。最后重新访问页面即可,在微信开发者工具上模拟手机端身份访问页面就可以进入调试状态了。

发表在 服务器 | 标签为 , | 留下评论

composer很慢?

今天使用composer发现很慢。使用的是“Packagist 中国全量镜像”。
添加镜像:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
尝试打开https://packagist.phpcomposer.com网址竟然显示403,看来有时候也不靠谱

使用另一个Laravel提供的镜像服务。
composer config -g repo.packagist composer https://packagist.laravel-china.org

取消镜像:
composer config -g –unset repos.packagist

发表在 服务器 | 标签为 | 留下评论

php7.2打开Opcache缓存加速性能

今天更新一台服务器的php版本发现安装php7.2默认是没有打开Opcache缓存加速的。
很简单
首先输出phpinfo看Loaded Configuration File指定/usr/local/php/etc/php.ini位置

在对应位置加入以为内容:
[opcache]
zend_extension = opcache.so
opcache.enable=1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2
opcache.enable_cli = 1

重起php,刷新phpinfo页面,搜索看到有Zend OPcache就是成功了,有个属性Cache hits查看命中率

显示参数代表什么参考官方文档
https://www.php.net/manual/zh/opcache.configuration.php

发表在 服务器 | 标签为 | 留下评论

MySQL批量kill被锁的线程

今天突然发现库量有大量时间很长的sleep线程,手动kill上百个id太累人了
1、show processlist;

导出命令格式的id文件
2、select concat(‘KILL ‘,id,’;’) from information_schema.processlist into outfile ‘/tmp/kill.txt’;

查看文件中是否都是需要的kill,不要随便全部都kill,然后导入执行命令
3、source /tmp/kill.txt;

发表在 服务器 | 标签为 | 留下评论

mysql快速生成插入亿级会员数据

今天突然想试试看亿级会员单表的性能,分三步,首先创建表,接着生成会员数据,最后导入既可。注意如果有索引必须先创建好,不然等你导入后再创建就。。。
还有记得要表要用MyISAM,如果是innodb应该超过24小时都完成不了。配置缓存参数也要调高,例如以下:
[mysqld]
myisam_max_sort_file_size = 30G
myisam_sort_buffer_size = 2048M

首先创建表结构,实际内容你们随便改了。

DROP TABLE IF EXISTS `member`;
CREATE TABLE `member` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '会员ID',
  `username` varchar(20) DEFAULT NULL COMMENT '用户名',
  `nickname` varchar(20) DEFAULT NULL COMMENT '会员呢称',
  `password` varchar(255) DEFAULT NULL COMMENT '用户密码',
  `mobile` varchar(11) DEFAULT NULL COMMENT '手机号码',
  `open_id` char(32) DEFAULT NULL COMMENT '微信公众号唯一ID',
  `price` int(11) DEFAULT '1' COMMENT '存款',
  `status` smallint(1) NOT NULL DEFAULT '1' COMMENT '用户状态:0 - 未启用;1 - 已启用',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `create_time` (`create_time`),
  KEY `price` (`price`) USING BTREE,
  KEY `username` (`username`),
  KEY `mobile` (`mobile`),
  KEY `open_id` (`open_id`),
  KEY `nickname` (`nickname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='会员表';

接着用php循环生成模拟会员数据,代码:

ini_set('display_errors',1);            //错误信息
ini_set('display_startup_errors',1);    //php启动错误信息
error_reporting(-1);                    //打印出所有的 错误信息
set_time_limit(0);//防止超时
ini_set('memory_limit',"2048M");//怕内存太小

$strs="QWERTYUIOPASDFGHJKLZXCVBNM1234567890qwertyuiopasdfghjklzxcvbnm";//用于生成随机数

for ($j = 1;$j <= 50; $j++) {//循环50次一亿条
	$str='';
	for ($i = 1;$i <= 2000000; $i++) {//200万写入文件1次
		$str.=substr(str_shuffle($strs),mt_rand(0,strlen($strs)-7),6)."\t".getChar(2)."\t".substr(str_shuffle($strs),mt_rand(0,strlen($strs)-9),8)."\t". mt_rand(100000,199999).mt_rand(10000,99999)."\t".md5(uniqid(microtime(true),true))."\t".mt_rand(10000,99999)."\t".mt_rand(0,1)."\t".date("Y-m-d H:i:s", mt_rand(946659661,1551690447))."\n";
	}
	file_put_contents('member.sql', $str,FILE_APPEND);
}
echo ok;

function getChar($num)  // $num为生成汉字的数量
{
	$b = '';
	for ($i=0; $i<$num; $i++) {
		// 使用chr()函数拼接双字节汉字,前一个chr()为高位字节,后一个为低位字节
		$a = chr(mt_rand(0xB0,0xD0)).chr(mt_rand(0xA1, 0xF0));
		// 转码
		$b .= iconv('GB2312', 'UTF-8', $a);
	}
	return $b;
}

我生成一亿条数据大概10g,接下来就要快速插入数据了。
这里选择load data infile方式,命令如下:

use test;
load data infile '/data/member.sql' into table member(username,nickname,password,mobile,open_id,price,status,create_time);

最后就等待结果即可,2亿条导入时间大概需要21分钟,之后创建索引大概花了1个小时多几分钟, 可见索引创建在大表里面多难。
其它包括索引,查询大家都可以自己调整试试看效率如何。
接下来如何优化呢?

发表在 服务器 | 标签为 | 留下评论

2019阿里云域名优惠口令

阿里云2019【优惠口令】
续费/首年(优惠与同产品其他优惠如代金券、折扣等不能同时使用)
com英文域名续费:珠光宝气
cn英文域名续费:诸事顺利
xin域名续费:抱诚守信
xin域名注册:神来气旺

其他阿里云云产品优惠券(云服务器 ECS,关系型数据库 RDS 等)可以领取我的 优惠券链接

发表在 服务器 | 标签为 , | 留下评论