php使用blpop时,隔一段时间连接被关闭,做以下检查

  1. redis.conf 配置 timeout = 0
  2. php设置配置  default_socket_timeout, 如 ini_set(‘default_socket_timeout’, -1);

根据请求的api获取class, 即需要一个Api class loader,  api格式如 xxx.xxx.xx

需要一个api 的基类,根据请求参数返回结果

弄个js客户端

接口文档及web接口测试

1233

加一个接口日志及统计收工

有需要web在线查看对象文档需求,简单测试可行

 

Phalcon的注解(Phalcon\Annotations\*)

 

Reflection
注解反射对象, 获取类方法,属性,类等的注释

常用方法, 返回 Collection, 可遍历的对象集合(Annotation)

Reflection的使用参考:

Annotation 注解类
获取单个注解的名称、参数表达式等

注解示例

 

PHP相关工具参考:

doctrine/annotations
https://github.com/doctrine/annotations

PHP反射相关接口参考:

http://php.net/manual/zh/book.reflection.php

一直没有时间整理之前的笔记,现在打算每个星期花点时间整理一下,以存根

错误(Error)

php程序自身不能正常的执行,根据严重情况分为多种错误等级

  • 致命错误:语法、未定义调用(对象、函数)等,立即中断流程执行,属于程序严重bug,  必须立即修复
  • 其它错误:php执行未达预期的结果, 程序流程继续执行,潜在bug需要记录错误,并修复
  • 用户错误:使用trigger_error主动抛出,不中断程序执行流程

错误处理机制

  • 非致命错误:set_error_handle(error_function, error_types)
  • 致命错误:程序只能中止执行,在中止前可以通过 注册 register_shutdown_function, 使用 error_get_last获取相关错误信息,以便于记录查阅
  • 记录错误日志: 可以使用error_reporting来设置当前脚本的错误报告级别,在php.ini配置或通过ini_set()函数设置log_errors = on, error_log = LOG_FILE来记录错误日志

异常(Exception)

大多数应用于应用逻辑未达预期,中断当前业务流程处理,直到将流程控制权交给适合的错误处理者,利于程序多层结构,每层处理自己能处理的错误,避免各层对错误大量if判断处理的存在,便于程序将正常处理代码与错误处理代码进行分离

异常处理机制

  • 立即处理:在当前异常发生后立即处理,及时采取补救措施不影响业务逻辑的完整性, 比如为保证数据一至性等需求
  • 上层处理:处理当前层能处理的错误
  • 集中处理:最后一道处理异常的机会, 比如集中记录异常,显示错误信息提示,根据异常类型作出合适的跳转等,也可通过set_exception_handler()捕获未处理的异常

递归查找指定类型的文件

弄个函数

 

在实现正常的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变量名,以在程序作出相应处理

多台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 最后一行