分类归档 技术杂谈

通过seo圣人

wordpress博客启用SSL证书后标志带感叹号怎么办?

今天把网站域名申请了SSL证书,在后台也设置好了域名,结果发现网站全站的SSL证书标致都带感叹号,wordpress博客启用SSL证书后标志带感叹号怎么办?

出现这样的情况,一般是站内引用的资源依然使用的是HTTP协议,知道问题之后我们开始去排查,果然,在一个地方发现了问题,看下面的代码:

<link rel="shortcut icon" href="https://www.dobunkan.com/wp-content/uploads/2019/09/111111.png" /> 

看吧,问题就出在这里了,下面我们开始解决问题,通过对模板header.php的跟踪,发现这一段路径是以数组的形式存储在数据库里面:

数据表名为:wp_options

字段为:appointment_options

里面的内容是这样的:

s:61:"http://www.dobunkan.com/wp-content/uploads/2019/09/111111.png";}

好了,我们把里面的http替换为https就可以解决了:

s:61:"https://www.dobunkan.com/wp-content/uploads/2019/09/111111.png";}

保存数据库,然后清理缓存,在刷新,然后,网站正常了:

通过seo圣人

windows下搭建NTP时间服务器

最近因为监控服务器时间莫名其妙的回到了几个月前,几十台监控服务器如果挨个去接显示器设置时间,实在是太麻烦,经过一番胡乱的点击发现海康威视里面有一个NTP服务器设置。

到这里,思路来了,如果我们在内网搭建一个NTP时间服务器,问题是不是就解决了?说干就干,实践出真知嘛:

修改注册表项。在搜索框中打开注册表,使用命令: regedit,结果如下图所示:

进入注册表项HKEY_LOCAL_MACHINE—>SYSTEM—>CurrentControlSet—>Services—>W32Time—>TimeProviders—>NtpServer
Enabled 设置为 1打开NTP,(系统默认0) ,结果如下图所示:

进入注册表项HKEY_LOCAL_MACHINE—>SYSTEM—>CurrentControlSet—>Services—>W32Time—>Config
AnnounceFlags 设置为 5 (系统默认 10),结果如下图所示:

进入系统服务,找到Windows time服务,使用命令:services.msc,结果如下图所示:

将Windows time服务设置为自动启动,点击应用和确定,结果如下图所示:

鼠标右键重新启动windows time服务,结果如下图所示:

重新启动电脑或者主机,所有配置生效,NTP时钟搭建完毕,此时去海康威视的面板设置下时间服务器,重启海康威视,时间恢复正常:

通过seo圣人

华为路由屏蔽TeamViewer5938端口

大家都知道,最近Teamviewer出了非常严重的漏洞,这给TeamViewer用户造成了巨大的安全隐患,官方给出的解决方案是暂时封杀5938端口和禁止访问teamviewer.com这个域名。

很多用华为路由的用户就懵逼了,不知道在哪关闭5938端口,下面我来将下这个命令:

acl number 3003
 rule 0 deny tcp source-port eq 5938
 rule 1 deny udp source-port eq 5938

执行上述命令即可封杀5938端口。

通过seo圣人

C#去掉button按钮的边框线

在用C#编写的软件里面,按钮用的是背景图,有一个问题就是图片按钮带了C#的背景和边框,这样看起来感觉很不爽,那么,怎么去button自带的边框和背景色呢?

第一种方法:Winform的话,设置FlatStyle为Flat,并且设置FlatAppearance下的BorderSize为0.

第二种方法:系统自带的按钮无法去除边框。重写按钮的OnPaint事件

class newbtn : System.Windows.Forms.Button //继承之系统按钮控件


{
 

protected override void OnPaint(PaintEventArgs e)
{//重写



 

base.OnPaint(e);
System.Drawing.Pen pen = new Pen(this.BackColor, 3);
e.Graphics.DrawRectangle(pen, 0, 0, this.Width, this.Height);//填充


pen.Dispose();
 
}
}

然后将designer。cs文件中你要修改的按钮重新继承至newbtn就可。

去除按钮的背景色其实很简单,只需要按下图的设置即可,找到Flatstyle,把属性设置为flat即可,如下图所示:

下面是按上述设置之后的样子,边框和背景都没了,按钮使用的是透明色:

通过seo圣人

C#编写软件怎样删除dataGridView的第一列?

在用C#编写软件的过程中因为需要用到dataGridView这个控件,默认情况是这样显示的:

第一列等于是什么都没有,但是他默认就是存在,我们怎样才能删除或者隐藏dataGridView的第一列呢?查阅了下手册,发现解决方法还是挺简单的,我们只需要将RowHeadersVisible设置为false即可,代码如下:

dataGridView1.RowHeadersVisible = false;//隐藏第一列

还有一个问题,如果dataGridView控件直接显示从数据库的查询结果,里面有的字段数据比较长,有的比较短,我们怎样把表格的列宽设置成自适应列宽呢?请看下面的代码:

dataGridView1.AutoResizeColumns();//自适应列宽

从数据库读出来的数据,每个字段都是英文的,这也导致了dataGridView控件表格的表头也是英文,怎样把他改成显示中文的呢?代码如下:

            dataGridView1.Columns[0].HeaderCell.Value = "编号";
            dataGridView1.Columns[1].HeaderCell.Value = "姓名";
            dataGridView1.Columns[2].HeaderCell.Value = "部门";
            dataGridView1.Columns[3].HeaderCell.Value = "显示器";
            dataGridView1.Columns[4].HeaderCell.Value = "CPU";
            dataGridView1.Columns[5].HeaderCell.Value = "内存条";
            dataGridView1.Columns[6].HeaderCell.Value = "硬盘";
            dataGridView1.Columns[7].HeaderCell.Value = "IP";
            dataGridView1.Columns[8].HeaderCell.Value = "显卡";
            dataGridView1.Columns[9].HeaderCell.Value = "主板";

下面,来段完整的例子,从数据库读取数据,然后在dataGridView控件中显示出来,并自动列宽,删除第一列的空白,代码如下:

//连接并写入数据库
            String connsql = "server=127.0.0.1;database=computer;uid=sa;pwd=1234567890"; //数据库配置

            SqlConnection sqlCont = new SqlConnection(connsql); //创建数据库连接

            if (sqlCont.State == ConnectionState.Open)         //检查连接状态
            {

                sqlCont.Close();

            }

            sqlCont.Open();   //打开数据库连接
            string strselect = "select id,name,dept,showq,cpu,memory,disk3,ip,video,BoardInfo from peizhi";
            //返回查询结果

            DataSet ds = new DataSet();

            //SqlDataAdapter dataAdpt = new SqlDataAdapter(strselect, sqlCont);  //执行查询
            SqlCommand dataAdpt = new SqlCommand(strselect, sqlCont);
            SqlDataAdapter sda = new SqlDataAdapter(dataAdpt);
            DataSet dss = new DataSet();
            sda.Fill(dss, "peizhi");

            dataGridView1.DataSource = dss;
            dataGridView1.DataMember = "peizhi";
            dataGridView1.RowHeadersVisible = false;//隐藏第一列
            dataGridView1.Columns[0].HeaderCell.Value = "编号";
            dataGridView1.Columns[1].HeaderCell.Value = "姓名";
            dataGridView1.Columns[2].HeaderCell.Value = "部门";
            dataGridView1.Columns[3].HeaderCell.Value = "显示器";
            dataGridView1.Columns[4].HeaderCell.Value = "CPU";
            dataGridView1.Columns[5].HeaderCell.Value = "内存条";
            dataGridView1.Columns[6].HeaderCell.Value = "硬盘";
            dataGridView1.Columns[7].HeaderCell.Value = "IP";
            dataGridView1.Columns[8].HeaderCell.Value = "显卡";
            dataGridView1.Columns[9].HeaderCell.Value = "主板";
            dataGridView1.AutoResizeColumns();
            sqlCont.Close();

下面展示下成功的截图:

通过seo圣人

js中this的四种调用模式详解

js中this的四种调用模式主要分为方法调用模式、函数调用模式、构造器调用模式和(apply、call、bind)调用模式。

第一种:方法调用模式 (也就是用.调用的)this就是这个对象本身

当一个函数被保存为对象的一个属性时,我们称它为一个方法,当一个方法被调用时,this被绑定到该对象,如果一个调用表达式包含一个属性表达式(即一个.点表达式或者[subscript]下标表达式)那么它被当做一个方法调用。

    var myObject = {
        value:0;
        increment:function(inc){
            this.value + = typeof inc === 'number'?inc:1;
        }
    }
    myObject.increment();
    document.writeln(myObject.value);//1
    myObject.increment(2);
    document.writen(myObject.value;)

方法可以使用this去访问对象,所以它能从对象中取得或修改该对象,this到对象的绑定发生在调用它的时候,这个超级“迟绑定”(very later binding)使用函数可以对this高度复用,通过this可取得它们所属对象的上下文的方法称为公共方法。

第二种:函数调用模式


当函数并非一个对象的属性时,那么它被当做一个函数来调用:

var sum = add(3,4);

当函数以些模式调用时,this被绑定到全局对象,这是语言设计上的一个错误,如果语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this对象,这个错误设计的后果就是方法不能利用内部函数来帮助它工作,因为内部函数的this被绑定了错误的值,所以不能共享该方法对对象的访问权,有一个很容易的解决办法如果该方法定义一个变量并给它赋值为this,那么内部函数就可以通过这个变量来访问到this。

    //给myObject增加一个double方法
    myObject.double = function(){
        that = this; 
        var helper = function(){
            that.value = add(that.value,that.value);
        }
        helper();以函数的形式来调用helper
    }
    //以方法的形式来调用double
    myObject.double();
    document.wtiten(myObject.getValue());//6

第三种:构造函数调用模式

    var Class = function(){
        this.value = 100;
    }
    var class = new Class();
    console.log(class.value); //100

我们通过new关键字来调用构造函数,此时this会绑定在该新对象上(也就是这个实例对象上)

第四种:apply和call以及bind的调用模式:指定绑定对象

    var myObject = {value:100};
    var foo = function(){
        console.log(this);
    };
    foo(); //global
    foo.apply(myObject);//{value:100}
    foo.call(myObject);//{value:100}
    var newFoo = foo.bind(myObject);
    newFoo(); //{value:100}

apply()方法接受两个参数第一个是函数运行时的作用域,另一个是参数的数组(arguments)

call()方法第一个参数与apply是一样的,第二个参数需要一个个列举出来

call方法更接近我们平时调用函数,而apply需要我们传递 Array形式的数组做为参数,它们是可以相互转换的。

通过seo圣人

mysql和mssql创建数据表的方法

现在数据库工具很多,无论是mysql还是mssql,都有很多对应的工具,这也导致了现在很多技术员只会使用工具创建数据表,离开工具就什么都干不了了,今天我就是给大家讲讲,不用工具,怎样创建数据表。

创建一个数据表,这里面肯定有数据表名、字段、字段类型以及长度,基本就这些,这里我假设数据表名为dobunkan_a,字段有id、name、tel三个字段,我们先用sqlserver命令创建这个表。

CREATE TABLE [dbo].[dobunkan_a]
(
    [id] [tinyint] IDENTITY(1,1) NOT NULL,
    [name] [nvarchar](max) NOT NULL DEFAULT (N'无'),
    [tel] [nvarchar](max) NOT NULL DEFAULT (N'无'),
    PRIMARY KEY ([id])
)

现在我们在mysql下创建这样一个表:

CREATE TABLE IF NOT EXISTS `dobunkan_a`(
--创建数据表
--create table if not exists `表名`(
--如果不用IF NOT EXISTS,创建同名的表就会报错。

   `id` INT UNSIGNED AUTO_INCREMENT,
--`字段名` 字符类型 AUTO_INCREMENT 定义id列为自增的属性,一般用于主键,数值会自动加1。

   `name` VARCHAR(100) NOT NULL,
--字段名为name,字段类型为VARCHAR,长度为100,不允许为空
   
   `tel` VARCHAR(40) NOT NULL,

   PRIMARY KEY ( `id` )
--PRIMARY KEY关键字用于定义列id为主键。 您可以使用多列来定义主键,列间以逗号分隔。

)ENGINE=InnoDB DEFAULT CHARSET=utf8;
--ENGINE 设置存储引擎,CHARSET 设置编码。

到这里为止,mysql和sqlserver数据表的建立和字段的设置就完成了。

通过seo圣人

用php读取帝国CMS字段

相信很多人在使用帝国CMS的时候都遇到过同样的问题,用帝国默认的标签无法满足需求,比如,某标签读出来是一个带a标签的字符串,这时候我只想要其中的部分资料怎么办?

比如:帝国CMS文章模板里面有一个标签是[!–writer–],他调用出来的结果是这样的:

<a href="">作者名字</a>

但是我们的需求只需要作者名字,应该怎么办呢?其实帝国CMS里面有一个数组,你直接使用就是了,请看下面的例子:

<?php
//echo $navinfor[字段名称];
echo $navinfor[writer];

?>

其实变量navinfor支持的字段有下面这些:

主标题、副标题等等[!–title–]、[!–ftitle–]、[!–newstime–]、[!–titlepic–]、[!–smalltext–]、[!–writer–]、[!–befrom–]、[!–newstext–]、[!–diggtop–]。像上面的方法一样使用就行了。

通过seo圣人

帝国CMS样式交替的写法

今天一个朋友有一个需求,哪就是样式交替,他网站后台用的是帝国CMS,可能是因为对这套系统了解的不够全面,在实现一些特殊需求的时候遇到了困难。

在为他解决问题的同时,我也想把解决方案分享出来,一来是自己做个笔记,而来是方便大家,下面我们直接进入正题。

他的需求是这样的:

<a class="a1" href="https://ask.dobunkan.com">网站优化</a>
<a class="a2" href="https://www.dobunkan.com">学课网</a>
就是a1和a2两个样式在循环列表中如此反复交替的出现。

思路:
如果是这样交替出现 ,我们其实可以利用判断来实现,因为帝国CMS模板是支持PHP语句的,而且帝国CMS里面还带有一个计数的标签,这个标签就是$bqno,他是从第一次循环后面一直加1,有了这样的标签,问题就好解决了,我们可以判断当这个变量的值为能整除2的时候,样式等于a2,当样式不能整除2的时候,样式等于a1,下面我们直接上代码:

[e:loop={3,6,0,1}]

<a class="<? if($bqno==1){?>a1<? }else{ ?>a2<? } ?>" href="https://ask.dobunkan.com">网站优化</a>

[/e:loop]

到这里,问题很轻松的就解决了。是不是很简单,如果有需求的需求,用这样的方法也是可以解决的。希望本文能够对你有所帮助。