递归查找指定类型的文件

弄个函数

 

在实现正常的TCP/IP 双方通信情况下,是无法伪造来源 IP 的,也就是说,在 TCP/IP 协议中,可以伪造数据包来源 IP ,但这会让发送出去的数据包有去无回,无法实现正常的通信。这就像我们给对方写信时,如果写出错误的发信人地址,而收信人按信封上的发信人地址回信时,原发信人是无法收到回信的。一些DDoS 攻击,如 SYN flood,  就是利用了 TCP/ip 的此缺陷而实现攻击的。对这种行为定义为“发射出去就不管”。

HTTP 是一个应用层协议,基于请求 / 响应模型。客户端(往往是浏览器)请求与服务器端响应一一对应。请求头均以回车换行结束,即“\r\n   最后是一个空行(内容为 \r\n  , 表示请求 header 结束。而请求 header 中除第一行外,其它行均由 header 名称, header 值组成, 在HTTP 应用程序中,如何取得指定的请求 header 信息呢?这里使用 PHP 语言为例说明。对所有客户端请求 header, PHP 程序中取得其值的方式如下: 

$_SERVER[‘HTTP_ HEADER_NAME ‘]

HEADER_NAME应该以换成对应的 header 名称,此项的规律是:全大写,连接线变成下划线。比如要取得客户端的User-Agent 请求头,则使用 $_SERVER[‘HTTP_USER_AGENT’],  掌握这个规律,即可达到举一反三的效果。如要取得 COOKIE 信息,则使用 $_SERVER[‘HTTP_COOKIE’] 即可。也就是说, $_SERVER 数组中,以 HTTP开头的项均属于客户端发出的信息。

 为防止http客户端伪造ip, 服务器重新配置X-Forward-For 为正确的值。以nginx为例

……
fastcgi_param HTTP_X_FORWARDED_FOR $remote_addr;
include  fastcgi_params;
……

如果网站做了cdn, 或是用作其它代理,那与代理层协商真实ip变量名,以在程序作出相应处理

一些麻烦事儿

平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题
1.页面和其打开的新窗口的数据传递
2.多窗口之间消息传递
3.页面与嵌套的iframe消息传递
4.上面三个问题的跨域数据传递

发送消息 postMessage()

这些问题都有一些解决办法,但html5引入的message的API可以更方便、有效、安全的解决这些难题。postMessage()方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本档、多窗口、跨域消息传递。

postMessage(data,origin)方法接受两个参数

1.data:要传递的数据,html5规范中提到该参数可以是JavaScript的任意基本类型或可复制 的对象,然而并不是所有浏览器都做到了这点儿,部分浏览器只能处理字符串参数,所以我们在传递参数的时候需要使用JSON.stringify()方法对 对象参数序列化,在低版本IE中引用json2.js可以实现类似效果。

2.origin:字符串参数,指明目标窗口的源,协议+主机+端口号[+URL],URL会被忽略,所以可以 不写,这个参数是为了安全考虑,postMessage()方法只会将message传递给指定窗口,当然如果愿意也可以建参数设置为”*”,这样可以传 递给任意窗口,如果要指定和当前窗口同源的话设置为”/”。

接收消息 onMessage

增加监控callback即可

参考

http://www.cnblogs.com/dolphinX/p/3464056.html
http://www.php100.com/html/program/html5/2013/0905/5442.html
http://segmentfault.com/a/1190000002448922

多台PHP服务器,  为方便管理,使用NFS共享程序文件(用过sersync实现实时同步),在访问量少的情况没啥问题,当php-fpm进程数与访问量上来后,

php-fpm错误日志报告大量执行超时;
系统日志报告大量php-fpm进程段错误或其它错误信息;
php服务器负载变得出奇的高,cpu,mem,io等负载都很低;
在Top中nfs的rpc进程排在前面;

由于单一访问可能加载上百的php程序文件,即使使用xcache缓存了opcode, 但还需要判断文件是否被修改,如下流程所示
xache原理

如果能减少从网络获取文件信息的大量操作,那此问题就能得到很大程度的解决,opcache很早就知道,只认为是与xcache, apc, ea之类的类似缓存或缓存opcode之类的,当时也就懒得理它,后来仔细查看有我们所期望的参数,在一时间间隔内不判断php文件修改时间

opcache.validate_timestamps(默认值:1)
禁用时, 您必须手动重置Zend Optimizer +或重新启动Web服务器,以使文件系统的更改生效. 检查的频率是由指令 “opcache.revalidate_freq” 控制.

opcache.revalidate_freq(默认值:2)
多久(以秒为单位)检查文件时间戳以改变共享内存的分配.”1″ 表示一秒校验一次, 但是是每个请求一次. “0″ 表示总是在校验.

通过ab测试发现qps还有20%左右的提高,最关键的是服务器top中看不到nfs的rpc进程身影,到此问题解决

opcache命中率

参考
xcache: http://blog.linuxeye.com/361.html
opcache: http://blog.haohtml.com/archives/14646

 

wordpress换了一个域名网站无法正常打开

更新数据库配置
update wp_options set option_value = ‘{new_domain}’ where option_id = 1 or option_id = 2;

 

没有仔细看过代码,不保证不影响相关功能

#grep ‘genericons/genericons.css’ -r ./*
#vim ./wp-content/themes/twentyfifteen/functions.php
注释函数 twentyfifteen_scripts
第一行 wp_enqueue_style( ‘twentyfifteen-fonts’, …);

#grep ‘gravatar.com’ -r ./*
#vim ./wp-includes/link-template.php
注释函数 get_avatar_data 最后一行