问题描述
continue” targeting switch is equivalent to “break”.Did you mean to use “continue 2”?

解决办法
在 php 7.3 的 switch 中使用 continue 会出现警告 1 2 3
最好的方式是把 \PHPExcel\Shared\OLE.php 文件中的 continue; 改为 continue 2; 或 break;



continue” targeting switch is equivalent to “break”.Did you mean to use “continue 2”?

在 php 7.3 的 switch 中使用 continue 会出现警告 1 2 3
最好的方式是把 \PHPExcel\Shared\OLE.php 文件中的 continue; 改为 continue 2; 或 break;



这几天博客经常有出现监控报警VPS宕机的问题,开始我还认为是VPS不稳定造成的(目前用的VPS也有遇到不稳定问题),然后通过日志看到应该是由于有被攻击利用导致的WEB卡死导致的。原因在于使用的WORDPRESS程序默认xmlrpc.php开启,而被用来DDOS攻击导致占用资源过高。

通过日志我们可以看到如下的内容:

location ~* /xmlrpc.php {
deny all;
}在主题对应的 functions.php 中添加如下代码:
add_filter('xmlrpc_enabled', '__return_false');# protect xmlrpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
前面我们记录了 使用WdatePicker日期组件时,选择日期后,执行某个方法 。下面我们记录一下如何计算2个时间差,写成天小时分的格式

function time_different( date1 , date2 ){
var date3 = new Date(date2).getTime() - new Date(date1).getTime(); //时间差的毫秒数
//------------------------------
//计算出相差天数
var days=Math.floor(date3/(24*3600*1000))
//计算出小时数
var leave1=date3%(24*3600*1000) //计算天数后剩余的毫秒数
var hours=Math.floor(leave1/(3600*1000))
//计算相差分钟数
var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数
var minutes=Math.floor(leave2/(60*1000))
//计算相差秒数
var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数
var seconds=Math.round(leave3/1000)
return days+" 天 "+hours+" 小时 "+minutes+" 分钟 "+seconds+" 秒";
} $("#begin_time").click(function(){
WdatePicker({readOnly:true,dateFmt:'yyyy-MM-dd H:m'});
});
$("#end_time").click(function(){
WdatePicker({readOnly:true,dateFmt:'yyyy-MM-dd H:m',onpicked:function(){
var date2 = $('#end_time').val();
var date1 = $('#begin_time').val();
$('.duration').html( time_different(date1,date2) );
}});
});
$("#end_time").click(function(){
WdatePicker({readOnly:true,dateFmt:'yyyy-MM-dd H:m:s',onpicked:function(){
alert(123);
}});
}); 1、onpicked:选择日期后执行的方法。
2、dateFmt:显示日期的格式。
3、maxDate:日期组件能选择和输入的最大日期,该格式默认为系统当前日期为最大日期。
还有很多参数和样式,可以参照日期组件网站。

我们在javascript中,如果有监听change事件,无法直接获取到对应option的指定属性,我们需要使用如下写法才行:
var strValue=$("#select_id").val(); //获取Select选择的Value
var strText=$("#select_id").find("option:selected").text(); //获取Select选择的text
var strText=$("#select_id").find("option:selected").attr('指定属性'); //获取Select选择的指定属性值
jquery中使用 .each() 循环return fasle;无效。这里记录一下如何解决。
$('#addForm').submit(function(){
flag = true;
$('table.detail tr').each(function(){
if( $(this).find('.property').val() == '' ){
alert('请填写性质');flag = false;return false;
}
if( $(this).find('.category').val() == '' ){
alert('请填写类别');flag = false;return false;
}
if( $(this).find('.people').val() == '' && $(this).find('.property').val() != '消耗品' ){
alert('请填写使用人');flag = false;return false;
}
if( $(this).find('.amount').val() == '' ){
alert('请填写数量');flag = false;return false;
}
});
if( ! flag ){
return false;
}
});我们这里使用 flag 进行标记,如果有一个为false都无法进行提交。

Query删除表行(table tr):本文介绍如何删除选定的表行(table tr)。如何用jQuery按钮单击事件,按id或class-name删除表行。 在按钮单击时,我们删除选定的行/ tr可能是其动态添加的表行或已在DOM上使用的。 使用jQuery .on()将能够通过指定其类名或Id来选择动态添加的元素,然后使用.remove()方法删除所选的表行。
输出

首先,我们在HTML页面中添加了一个表标记,其中包含一些“tr”表行和“td”表数据以及一个名为Delete的按钮。 这里删除按钮用于删除特定的表行。我们的HTML结构如下面的代码所示。
<table id="tbUser">
<tr>
<th>Sr</th><th>Name</th><th>Location</th><th></th>
</tr>
<tr>
<td>1</td><td>Amit</td><td>Ghatkopar</td>
<td><button class="btnDelete">Delete</button></td>
</tr>
<tr>
<td>2</td><td>Vicky</td><td>Powai</td>
<td><button class="btnDelete">Delete</button></td>
</tr>
<tr>
<td>3</td><td>Sunny</td><td>Powai</td>
<td><button class="btnDelete">Delete</button></td>
</tr>
<tr>
<td>4</td><td>John</td><td>NewYork</td>
<td><button class="btnDelete">Delete</button></td>
</tr>
</table>在上表中,我们添加了一些数据,在每一行中,我们有一个公共类为“btnDelete”的按钮。 现在将在按钮单击时添加单击事件,单击它将从HTML表中删除该行tr。
在这里,首先我们在按钮标签上创建一个jQuery单击事件,然后使用nearest()方法选择tr,之后用remove()方法删除该tr,类似于使用.next()方法和.remove()删除下一个表行tr。 这是我们能够删除表格行的方式,我们的最终代码如下所示。
$("#tbUser").on('click', '.btnDelete', function () {
$(this).closest('tr').remove();
});
没事研究一下nginx的反向代理,从网上扒了一段,添加 g.laoji.org.conf 配置文件如下:
server
{
listen 80;
server_name g.laoji.org; #你的域名
location / {
proxy_pass https://www.google.com/; #需要反代的域名
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#add_header X_Via $server_addr; #添加响应头部信息,真实服务器
#add_header X_cache_hit $upstream_cache_status; #添加响应头部信息,是否命中缓存
#sub_filter downloads.wordpress.org downloads.wp.laoji.org; #替换字符串
#sub_filter_last_modified on;
#sub_filter_once off;
}
在这里我使用清华源来做示范
win+R 打开用户目录%HOMEPATH%,在此目录下创建 pip 文件夹,在 pip 目录下创建 pip.ini 文件, 内容如下,


在pip文件夹里新建的pip.ini代码如下
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn另外还有一些其他国镜像
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

我们在实际开发中,需要在多维数组中挑选一个键名将其转换成一位数组,可以使用 array_column 函数来做。但是有些时候我们需要将一位数组的值重新组成一个二维数组,并使其键名 key 与值 value相等。
比如我们获取所有职员的姓名。get_table_option() 方法得出的经过如下:

我们需要在这个多维数组中取其 name 字段,变成 name=>name的新数组。代码如下:
function get_all_staff_names(){
$staff = get_table_option("user" , "is_del=0");
$tmp = array_column($staff,'name');
return array_combine(array_keys(array_flip($tmp)),$tmp);
}