【原创】生成锚文本preg_replace替换字符串返回Null的问题

今天实现文章锚文本,使用preg_replace数组替换字符串的时候发生了一下情况
$content = preg_replace(‘/netpc(括号)/’,’abc’,’测试netpc(括号)文本’);
$content返回值为Null,也并没有告诉你错误原因和位置。
最后测试得出,preg_replace在替换字符串中包括了 ()全角和半角括号同时存在的时候会出错
使用addcslashes转义还不行,查询文档最后发现用quotemeta转义元字符集后替换就正常了。
函数说明:https://www.php.net/manual/zh/function.quotemeta.php
返回 在下面这些特殊字符前加 反斜线(\) 转义后的字符串。 这些特殊字符包含:
. \ + * ? [ ^ ] ( $ )

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

【原创】Nginx反向代理根据url参数访问后端指定服务器

今天因为工作需要,需要指定图片访问的是后端指定的反向代理服务器。
最后修改nginx配置实现,访问效果//img.netpc.com.cn/1.jpg?server=100或者//img.netpc.com.cn/1.jpg?server=101
配置大家自己看就好了,不懂留言。

upstream images {
	ip_hash;
	server 192.168.0.100:8008 weight=5;
	server 192.168.0.101:8008 weight=5;	
}
server {
	listen       80;
	server_name  img.netpc.com.cn;
	#charset utf-8;

	access_log  /data/logs/nginx/cluster.img.log;

	location / {
		#limit_req zone=ddos burst=30 nodelay;
		
		set $server 0;
		if ($query_string ~* "server=(\d+)$") {
			set $server $1;
		}
		if ($server = "100"){
			proxy_pass http://192.168.0.100:8008;
		}
		if ($server = "100"){
			proxy_pass http://192.168.0.101:8008;
		}
		if ($server = "0"){
			proxy_pass http://images;
		}
		
		proxy_redirect off;    
		proxy_set_header Host $host;    
		proxy_set_header X-Real-IP $remote_addr;    
		proxy_set_header SSL_CERT $ssl_client_cert;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
		client_max_body_size 10m;    
		client_body_buffer_size 128k;    
		proxy_connect_timeout 90;    
		proxy_send_timeout 90;    
		proxy_read_timeout 90;    
		proxy_buffer_size 4k;    
		proxy_buffers 4 32k;    
		proxy_busy_buffers_size 64k;    
		proxy_temp_file_write_size 64k;
		#proxy_ignore_headers "Cache-Control" "Expires";
		#proxy_pass_header Set-Cookie; 
		#expires 7d;
		#proxy_http_version 1.1;
	}
}
发表在 服务器 | 标签为 | 留下评论

【原创】CentOS6和CentOS7系统安装配置RabbitMQ

因为工作项目需要消息队列插件,今天安装RabbitMQ测试。

安装erlang

从CentOS7/6无依赖的erlang GitHub release 页面中下载安装包:
CentOs6下载 erlang-21.2.2-1.el6.x86_64.rpm
CentOs7下载 erlang-21.2.2-1.el7.centos.x86_64.rpm

其它版本 https://github.com/rabbitmq/erlang-rpm/releases

提示要签名key文件

GitHub release 页面中下载 rabbitmq-release-signing-key.asc

rabbitmq rpm安装包

在 rabbitmq-server 的 GitHub release 页面中选择合适的版本并选择适合的安装包,当前最新的release版本是3.7.15 (2019年5月),则:
CentOs6下载 rabbitmq-server-3.7.15-1.el6.noarch.rpm
CentOs7下载 rabbitmq-server-3.7.15-1.el7.noarch.rpm

安装

安装包准备好之后,我们来安装(yum命令需要root权限

# 安装 erlang
rpm -ivh erlang-21.2.2-1.el6.x86_64.rpm
# 导入签名
rpm --import rabbitmq-release-signing-key.asc
# 安装 rabbitmq
yum install -y rabbitmq-server-3.7.15-1.el6.noarch.rpm

安装遇到错误

[root@localhost src]# rpm -ivh erlang-21.2.2-1.el6.x86_64.rpm
warning: erlang-21.2.2-1.el6.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY
Preparing… ########################################### [100%]
file /usr/lib64/erlang/bin/epmd from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/erl from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/erlc from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/escript from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/run_erl from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/to_erl from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/start from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64

卸载掉冲突的就可以了

[root@localhost src]# yum remove erlang-erts-R14B-04.3.el6.x86_64

确定Y,然后重新安装即可。

启动管理

## 服务管理命令
service rabbitmq-server start # 启动
service rabbitmq-server status # 状态
service rabbitmq-server stop # 停止
rabbitmq-plugins enable rabbitmq_management # 启用15672 web管理

## 常用命令
rabbitmqctl # 帮助
rabbitmqctl status # 状态 同上

rabbitmqctl stop # 停止服务 会将节点及应用程序同时关闭
# 由于同一节点可能运行除rabbitmq 其他erlang程序,停止整个节点是不可取的

rabbitmqctl stop_app # 保持25672不停
rabbitmqctl start_app # 启动5672 和 15672

## 用户管理
rabbitmqctl add_user admin admin# 添加用户admin
rabbitmqctl delete_user admin # 删除用户
rabbitmqctl change_password admin 123456# 修改密码
rabbitmqctl list_users # 查看用户列表
rabbitmqctl set_user_tags admin administrator # 赋予管理员权限

3.7.15 默认情况下guest用户只能localhost访问。

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

【原创】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

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