未来往事
最怕的东西你就应该去突破。 [2017年 第33周/共52周]

记一次阿里云ECS DDOS攻击。。。

早上上班还不到一小时 发现生产环境主机突然无法访问且ping不同,初步考虑是否主机白名单被篡改,经查看阿里云相关统计报表判断为DDOS攻击,经过持续半小时左右时间终恢复,本文仅用于记录不做为解决方案。

ECS主机默认情况在遭受攻击(例如DDOS)时流量超过本机房设定的黑洞阈值时,阿里云会屏蔽ECS主机的外网访问。当服务器进入黑洞一段时间后,如果系统监控到攻击流量停止,黑洞会自动解封。

遭受攻击时网络拥塞截图如下:



......
+阅读全文

2台机器之间的端口转发iptables

2台机器之间的端口转发iptables方式实现,场景:

两台机器,A机器能正常访问,B机器不能直接被访问,所以希望用A机器进行端口转发间接访问B机器,大致思路:
路由器 —— 指定端口nat到 ———- A机器————-iptables nat 到 ——————B机器的端口

iptables -t nat -A PREROUTING -i em3 -p tcp —dport 5080 -j DNAT —to 192.168.0.230:80
(后面这个ip是B机器的ip加端口,前面的em3是A机器的数据经过的网卡 5080是访问A机器的5080端口就转发到后面机器来)

iptables -t nat -A POST



......
+阅读全文

学会思考,而不只是编程

  中国人常说“授之以鱼不如授之以渔”。如果说教授编程是授之以鱼,那么教授计算机科学就是授之以渔。为什么说学习计算机科学比学会编程要重要得多?来听听 Yevgeniy Brikman 的解释。

  现如今,似乎每个人都在学习编程:Bill Gates、Mark Zuckerberg 和 Chris Bosh 这些名人在 Code.org 网站上告诉人们每个人都拥有编程的能力;CoderDojo 项目在世界各地大张旗鼓;英国已经把编程作为小学官方课程。

  不过,我认为这样有点误入歧途了。但请不要误会——我也确实认为代码能够让世界变得更美好——但编程本身并不是我们的目的。计算机和程序只是工具,它们是我们通向终点的桥梁。

  我们真正的目标应该是教会人们如何思考。换句话说,我们应该教人们计算机科学,而不只是编程。在这篇文章里,我将会解释这两者之间的区别,以及为什么在这两者当中选择正确的一方对于迈向成功来说如此重要。

  我们不妨先问自己一个问题:为什么我们要关心编程或计算机科学?

  欢迎来到真实的世界

+阅读全文

JQuery 插件的编写

jquery的插件机制

为了方便用户创建插件,jquery提供了$.extend()和$.fn.extend()方法。
$.extend(object) ,用于扩展jQuery类本身,也就是用来在jQuery类/命名空间上增加新函数,或者叫静态方法.
例如 jquery内置的 ajax方法都是用$.ajax()这样调用的,有点像 “类名.方法名” 静态方法的调用方式。

  1. $.extend({
  2. minValue: function (a, b) {
  3. // 比较两个值,返回最小值
  4. return a < b ? a : b;
  5. }
  6. });
  7. //调用
  8. var i = 100; j = 101;
  9. var min_value = $.minValue(i, j); // min_value 等于 100
+阅读全文

TP5 save遍历更新,过滤相邻重复字段,问题汇总

  TP5中在model中使用save方法遍历更新字段,会自动过滤掉相邻且值重复的字段,在TP5开发手册中也没有提到这一茬,虽然官方有给遍历更新的例子,但是普通的写法程序也不会报错,可能几千条数据中会过滤一两个字段,让开发者很难察觉到错误。而且也实在想不通过滤掉重复的字段的意义在哪里,测试内容如下:

测试准备工作如下:

1.建立一张数据表如下

2.控制器代码如下:    

  1. public function save(){
  2. $model = model('Foo');
  3. for($i=1;$i<=20;$i++){
  4. $data['Hname'] = $i;
  5. $data['Hid'] = $i;
  6. $model->saveDatas($i,$data);
  7. }
  8. echo '遍历更新'.($i-1).'条数据';
  9. }

3.model代码如下:

+阅读全文

PHP垃圾回收与内存管理基本原理

内存管理机制了解:

var_dump(memory_get_usage());//获取内存方法,加上true返回实际内存,不加则返回表现内存
$a = “http://fity.cn“;
var_dump(memory_get_usage());
unset($a);
var_dump(memory_get_usage());
输出:
int 368752
int 368920
int 368752

可以直观的看出定义变量之后,内存增加,清除变量之后,内存恢复(有些可能不会恢复和以前一样),好像定义变量时申请了一次内存,其实不是这样的,php会预先申请一块内存,不会每次定义变量就申请内存。PHP不像C语言那样,只有你显示的调用内存分配相关API才会有内存的分配。也就是说, 在PHP中,有很多我们看不到的内存分配过程。隐式的内存分配点就有:
1.为变量名分配内存,存入符号表
2.为变量值分配内存
所以, 不能只看表象。别怀疑,PHP的unset确实会释放内存,但这个释放不是C编程意义上的释放,不是交回给OS。当我们调用内存分配相关API申请内存的时候,PHP并不是简单的向OS要内存,而是会像OS要一个大块的内存,然后把其中的一块分配给申请者,这样当再有逻辑来申请内存的时候,就不再需要向OS申请内存了, 避免了频繁的系统调用。详细推荐参考《深入理解PHP内存管理之谁动了我的内存

垃圾回收机制(Garbage Collector 简称GC):
+阅读全文

html无损截取_保留html标签

  1. /**
  2. * 字符串切割
  3. * 功能:截取字符串(支持中文),如果字符串中包括html标签,截取的字符串则会保留完整的html标签
  4. * @param string $string 输入字符串
  5. * @param unknown $length 截取长度
......
+阅读全文

告别Bo-Blog~~~

粗略算下使用Bo-Blog开源博客系统记录日志已6年12天时间之久,主要用于学习、记录、分享一些基础的内容,毕竟复杂的内容整理起来也比较麻烦twemoji-1f602,系统很简单综合性能也不错,对于一个只是期望简单用于记录的用户来说功能也相对够用了,不像WordPress那样的庞然大物。

......
+阅读全文

php/java网页快照(网页截屏)

网页生成快照、网页截屏、网页转图片、网页转pdf——本文基于wkhtmltopdf工具编写。

服务器端
为实现网页快照或截图的程序须借助服务器端程序:wkhtmltopdf,可将网页转换为pdf或者图片,32和64位有区别,找个适合自己服务器的版本,安装过程很简单:解压后找个合适的路径放下,windows下需要运行安装程序。

命令调用示例:
网页转图片:
linux下:/opt/wkhtmltopdf/wkHtmlToImage fity.cn fity.cn.png
windows下:D:\Program Files\wkhtmltopdf\bin>wkhtmltoimage.exe fity.cn fity.cn.
......
+阅读全文

tp5 Excel表格导入_tp5导出Excel

thinkphp5使用PHPExcel导入Excel、csv表格,thinkphp5表格导入导出

tp5使用PHPExcel导入Excel表格文件:

  1. PS:将PHPExcel扩展包放到vendor目录下  
  2. /vendor/PHPExcel.php  
  3. /vendor/PHPExcel  
  4.   
  5. public function uploadUser(){  
......
+阅读全文

tp5分页 搜索条件不保留/失效处理方法

thinkphp5.0分页 搜索条件不保留/失效解决

一般写法:分页跳转不包含搜索条件的
  1. $where = array();  
  2. $regionId = input('regionId/d');  
  3. $regionId && 
......
+阅读全文

tp5上传文件自定义名称

thinkphp5上传文件自定义名称
$file->move($path,自定义的名称); //指定名称
$file->validate(['size'=>1048576,'ext'=>'jpeg,jpg'])->rule('uniqid')->move($path); //唯一命名,validate为验证

tp5附件上传示例
  1. public function uploadPic(){  
  2.    &nbs
......
+阅读全文

tp5 save遍历新增数据第二次变为update问题处理

......
+阅读全文

下拉刷新/上拉加载更多/上滑加载更多-移动端

元素容器
<div class="wrap"></div>

下拉载入更多处理方法

  1. <script src="http://apps.bdimg.com/libs/zepto/1.1.4/zepto.min.js"></script>
  2. <

......
+阅读全文

jQuery图片裁剪插件Cropper

Cropper:一个简单的jQuery前端图片裁剪插件。

功能特性:

支持选项
支持方法
支持事件
支持触屏 (移动端)
支持缩放
支持旋转
支持翻转
支持 canvas
支持多个 croppers
跨浏览器支持

主要文件Main:

dist/
├── cropper.css     ( 5 KB)
├── cropper.min.css ( 4 KB)
├── cropper.js      (67 KB)
└── cropper.min.js  (24 KB)

使用介绍:



已知问题:

1.关于getCroppedCanvas方法:canvas.drawImage API 在某些 Mac OS / iOS 浏览器上将会根据 EXIF 方向自动旋图片,所以输出的剪裁画布可能不正确。要修复这个问题,你需要上传剪裁的数据到服务器上完成剪裁的操作,查看例子:Crop Avatar。或者你也可以在使用 cropper 之前处理一下 EXIF方向。
PS:cropper EXIF照片旋转方向前端处理方法参考:
 (a)Exif.js读取图像的元数据
 (b)利用exif.js解决IOS系统手机上传竖拍照片旋转90度问题
 (c)H5中图片上传的那些坑
2.已知的 iOS 资源限制: 由于 IOS 设备会限制内存,浏览器也许会在你剪裁一张大图(iPhone 相机分辨率)的时候崩溃掉。要避免这个问题,你需要在使用 cropper 之前重置图片大小(小于1024 px,如使用localResizeIMG4压缩图片)。

Demo案例参考:

本站Demo参考-建议使用手机浏览器打开测试
点击在新窗口中浏览此图片
+阅读全文