月度归档:2015年12月

php timezone

$timezones =
array (
 '(GMT-12:00) International Date Line West' => 'Pacific/Wake',
 '(GMT-11:00) Midway Island' => 'Pacific/Apia',
 '(GMT-11:00) Samoa' => 'Pacific/Apia',
 '(GMT-10:00) Hawaii' => 'Pacific/Honolulu',
 '(GMT-09:00) Alaska' => 'America/Anchorage',
 '(GMT-08:00) Pacific Time (US & Canada); Tijuana' => 'America/Los_Angeles',
 '(GMT-07:00) Arizona' => 'America/Phoenix',
 '(GMT-07:00) Chihuahua' => 'America/Chihuahua',
 '(GMT-07:00) La Paz' => 'America/Chihuahua',
 '(GMT-07:00) Mazatlan' => 'America/Chihuahua',
 '(GMT-07:00) Mountain Time (US & Canada)' => 'America/Denver',
 '(GMT-06:00) Central America' => 'America/Managua',
 '(GMT-06:00) Central Time (US & Canada)' => 'America/Chicago',
 '(GMT-06:00) Guadalajara' => 'America/Mexico_City',
 '(GMT-06:00) Mexico City' => 'America/Mexico_City',
 '(GMT-06:00) Monterrey' => 'America/Mexico_City',
 '(GMT-06:00) Saskatchewan' => 'America/Regina',
 '(GMT-05:00) Bogota' => 'America/Bogota',
 '(GMT-05:00) Eastern Time (US & Canada)' => 'America/New_York',
 '(GMT-05:00) Indiana (East)' => 'America/Indiana/Indianapolis',
 '(GMT-05:00) Lima' => 'America/Bogota',
 '(GMT-05:00) Quito' => 'America/Bogota',
 '(GMT-04:00) Atlantic Time (Canada)' => 'America/Halifax',
 '(GMT-04:00) Caracas' => 'America/Caracas',
 '(GMT-04:00) La Paz' => 'America/Caracas',
 '(GMT-04:00) Santiago' => 'America/Santiago',
 '(GMT-03:30) Newfoundland' => 'America/St_Johns',
 '(GMT-03:00) Brasilia' => 'America/Sao_Paulo',
 '(GMT-03:00) Buenos Aires' => 'America/Argentina/Buenos_Aires',
 '(GMT-03:00) Georgetown' => 'America/Argentina/Buenos_Aires',
 '(GMT-03:00) Greenland' => 'America/Godthab',
 '(GMT-02:00) Mid-Atlantic' => 'America/Noronha',
 '(GMT-01:00) Azores' => 'Atlantic/Azores',
 '(GMT-01:00) Cape Verde Is.' => 'Atlantic/Cape_Verde',
 '(GMT) Casablanca' => 'Africa/Casablanca',
 '(GMT) Edinburgh' => 'Europe/London',
 '(GMT) Greenwich Mean Time : Dublin' => 'Europe/London',
 '(GMT) Lisbon' => 'Europe/London',
 '(GMT) London' => 'Europe/London',
 '(GMT) Monrovia' => 'Africa/Casablanca',
 '(GMT+01:00) Amsterdam' => 'Europe/Berlin',
 '(GMT+01:00) Belgrade' => 'Europe/Belgrade',
 '(GMT+01:00) Berlin' => 'Europe/Berlin',
 '(GMT+01:00) Bern' => 'Europe/Berlin',
 '(GMT+01:00) Bratislava' => 'Europe/Belgrade',
 '(GMT+01:00) Brussels' => 'Europe/Paris',
 '(GMT+01:00) Budapest' => 'Europe/Belgrade',
 '(GMT+01:00) Copenhagen' => 'Europe/Paris',
 '(GMT+01:00) Ljubljana' => 'Europe/Belgrade',
 '(GMT+01:00) Madrid' => 'Europe/Paris',
 '(GMT+01:00) Paris' => 'Europe/Paris',
 '(GMT+01:00) Prague' => 'Europe/Belgrade',
 '(GMT+01:00) Rome' => 'Europe/Berlin',
 '(GMT+01:00) Sarajevo' => 'Europe/Sarajevo',
 '(GMT+01:00) Skopje' => 'Europe/Sarajevo',
 '(GMT+01:00) Stockholm' => 'Europe/Berlin',
 '(GMT+01:00) Vienna' => 'Europe/Berlin',
 '(GMT+01:00) Warsaw' => 'Europe/Sarajevo',
 '(GMT+01:00) West Central Africa' => 'Africa/Lagos',
 '(GMT+01:00) Zagreb' => 'Europe/Sarajevo',
 '(GMT+02:00) Athens' => 'Europe/Istanbul',
 '(GMT+02:00) Bucharest' => 'Europe/Bucharest',
 '(GMT+02:00) Cairo' => 'Africa/Cairo',
 '(GMT+02:00) Harare' => 'Africa/Johannesburg',
 '(GMT+02:00) Helsinki' => 'Europe/Helsinki',
 '(GMT+02:00) Istanbul' => 'Europe/Istanbul',
 '(GMT+02:00) Jerusalem' => 'Asia/Jerusalem',
 '(GMT+02:00) Kyiv' => 'Europe/Helsinki',
 '(GMT+02:00) Minsk' => 'Europe/Istanbul',
 '(GMT+02:00) Pretoria' => 'Africa/Johannesburg',
 '(GMT+02:00) Riga' => 'Europe/Helsinki',
 '(GMT+02:00) Sofia' => 'Europe/Helsinki',
 '(GMT+02:00) Tallinn' => 'Europe/Helsinki',
 '(GMT+02:00) Vilnius' => 'Europe/Helsinki',
 '(GMT+03:00) Baghdad' => 'Asia/Baghdad',
 '(GMT+03:00) Kuwait' => 'Asia/Riyadh',
 '(GMT+03:00) Moscow' => 'Europe/Moscow',
 '(GMT+03:00) Nairobi' => 'Africa/Nairobi',
 '(GMT+03:00) Riyadh' => 'Asia/Riyadh',
 '(GMT+03:00) St. Petersburg' => 'Europe/Moscow',
 '(GMT+03:00) Volgograd' => 'Europe/Moscow',
 '(GMT+03:30) Tehran' => 'Asia/Tehran',
 '(GMT+04:00) Abu Dhabi' => 'Asia/Muscat',
 '(GMT+04:00) Baku' => 'Asia/Tbilisi',
 '(GMT+04:00) Muscat' => 'Asia/Muscat',
 '(GMT+04:00) Tbilisi' => 'Asia/Tbilisi',
 '(GMT+04:00) Yerevan' => 'Asia/Tbilisi',
 '(GMT+04:30) Kabul' => 'Asia/Kabul',
 '(GMT+05:00) Ekaterinburg' => 'Asia/Yekaterinburg',
 '(GMT+05:00) Islamabad' => 'Asia/Karachi',
 '(GMT+05:00) Karachi' => 'Asia/Karachi',
 '(GMT+05:00) Tashkent' => 'Asia/Karachi',
 '(GMT+05:30) Chennai' => 'Asia/Calcutta',
 '(GMT+05:30) Kolkata' => 'Asia/Calcutta',
 '(GMT+05:30) Mumbai' => 'Asia/Calcutta',
 '(GMT+05:30) New Delhi' => 'Asia/Calcutta',
 '(GMT+05:45) Kathmandu' => 'Asia/Katmandu',
 '(GMT+06:00) Almaty' => 'Asia/Novosibirsk',
 '(GMT+06:00) Astana' => 'Asia/Dhaka',
 '(GMT+06:00) Dhaka' => 'Asia/Dhaka',
 '(GMT+06:00) Novosibirsk' => 'Asia/Novosibirsk',
 '(GMT+06:00) Sri Jayawardenepura' => 'Asia/Colombo',
 '(GMT+06:30) Rangoon' => 'Asia/Rangoon',
 '(GMT+07:00) Bangkok' => 'Asia/Bangkok',
 '(GMT+07:00) Hanoi' => 'Asia/Bangkok',
 '(GMT+07:00) Jakarta' => 'Asia/Bangkok',
 '(GMT+07:00) Krasnoyarsk' => 'Asia/Krasnoyarsk',
 '(GMT+08:00) Beijing' => 'Asia/Hong_Kong',
 '(GMT+08:00) Chongqing' => 'Asia/Hong_Kong',
 '(GMT+08:00) Hong Kong' => 'Asia/Hong_Kong',
 '(GMT+08:00) Irkutsk' => 'Asia/Irkutsk',
 '(GMT+08:00) Kuala Lumpur' => 'Asia/Singapore',
 '(GMT+08:00) Perth' => 'Australia/Perth',
 '(GMT+08:00) Singapore' => 'Asia/Singapore',
 '(GMT+08:00) Taipei' => 'Asia/Taipei',
 '(GMT+08:00) Ulaan Bataar' => 'Asia/Irkutsk',
 '(GMT+08:00) Urumqi' => 'Asia/Hong_Kong',
 '(GMT+09:00) Osaka' => 'Asia/Tokyo',
 '(GMT+09:00) Sapporo' => 'Asia/Tokyo',
 '(GMT+09:00) Seoul' => 'Asia/Seoul',
 '(GMT+09:00) Tokyo' => 'Asia/Tokyo',
 '(GMT+09:00) Yakutsk' => 'Asia/Yakutsk',
 '(GMT+09:30) Adelaide' => 'Australia/Adelaide',
 '(GMT+09:30) Darwin' => 'Australia/Darwin',
 '(GMT+10:00) Brisbane' => 'Australia/Brisbane',
 '(GMT+10:00) Canberra' => 'Australia/Sydney',
 '(GMT+10:00) Guam' => 'Pacific/Guam',
 '(GMT+10:00) Hobart' => 'Australia/Hobart',
 '(GMT+10:00) Melbourne' => 'Australia/Sydney',
 '(GMT+10:00) Port Moresby' => 'Pacific/Guam',
 '(GMT+10:00) Sydney' => 'Australia/Sydney',
 '(GMT+10:00) Vladivostok' => 'Asia/Vladivostok',
 '(GMT+11:00) Magadan' => 'Asia/Magadan',
 '(GMT+11:00) New Caledonia' => 'Asia/Magadan',
 '(GMT+11:00) Solomon Is.' => 'Asia/Magadan',
 '(GMT+12:00) Auckland' => 'Pacific/Auckland',
 '(GMT+12:00) Fiji' => 'Pacific/Fiji',
 '(GMT+12:00) Kamchatka' => 'Pacific/Fiji',
 '(GMT+12:00) Marshall Is.' => 'Pacific/Fiji',
 '(GMT+12:00) Wellington' => 'Pacific/Auckland',
 '(GMT+13:00) Nuku\'alofa' => 'Pacific/Tongatapu',

);

 

windows-time-zone.zip

MySQL数据库命名规范及约定

一、【操作规范】
1. 如无备注,则表中的第一个id字段一定是主键且为自动增长;
2. 如无备注,则数值类型的字段请使用UNSIGNED属性;
3. 如无备注,排序字段order_id在程序中默认使用降序排列;
4. 如无备注,所有字段都设置NOT NULL,并设置默认值;
5. 如无备注,所有的布尔值字段,如is_hot、is_deleted,都必须设置一个默认值,并设为0;
6. 所有的数字类型字段,都必须设置一个默认值,并设为0;
7. 针对varchar类型字段的程序处理,请验证用户输入,不要超出其预设的长度;
8. 建表时将数据字典中的字段中文名和属性备注写入数据表的备注中(“PK、自动增长”不用写);
9. 如无说明,建表时一律采用innodb引擎;

二、【常用表名约定】
0. 说明:表前缀用项目名称首字母缩写;所以表名都小写,单词之间用下划线分开,单词都用单数形式
1. user – 用户
2. category – 分类
3. goods – 商品、产品等一切可交易网站的物品都用此命名
4. good_gallery – 物品的相册
5. good_cate – 物品的分类,除了单独作为表名,其他地方分类单词一律用缩写cate
4. attr – 属性
5. article – 文章、新闻、帮助中心等以文章形式出现的,一般都用此命名
6. cart – 购物车
7. feedback – 用户反馈
8. order – 订单
9. site_nav – 包括页头和页尾导航
10. site_config – 系统配置表
11. admin – 后台用户 【RBAC标准表】
12. role – 后台用户角色【RBAC标准表】
13. access – 后台操作权限,相当于action【RBAC标准表】
14. role_admin – 后台用户对应的角色【RBAC标准表】
15. access_role – 后台角色对应的权限【RBAC标准表】
16. 待续

三、【常用列名约定】
1. 表名_id – 通常用作外键命名
2. cid –
特殊的编号,带有元数据,方便关联查询,你可以把它理解成类别(层次)编号。举个例子,产品在分类时,往往需要将其归类到子分类下,相应的字段中也一般只
记录子分类的id,这时若需要知道该产品属于哪个主分类,就需要通过子分类信息再查询到主分类信息,这是比较麻烦的,cid字段就是要解决这个问题。一般
的站点几十个分类肯定是够用了,所以这里假设某一主分类的cid为11,则子分类的cid从1101开始编号,处理时只需截取前两位数值便可知道该产品属
于哪一个主分类了。
3. add_time – 添加时间、上架时间等
4. last_time – 最后操作时间,如登录、修改记录
5. expire_time – 过期时间
6. name – 商品名称、商家名称等,不要跟title混用,title只用于文章标题、职称等
7. price – 价格
8. thumb – 只要是列表页面中的窗口图,一律用此命名
9. image_src – 相册中的图片地址一律用此命名,不要出现各种img,image,img_url,thumb_url等
10. head_thumb – 用户头像, 虽然有点长,一定要遵守。不要出现上述情况
11. image_alt – 相册中图片的alt属性
12. desc – 描述、简介,比如goods_desc,不要出现goods_txt这种
13. details – 详情、文章内容等
14. order_id – 排序
15. telephone – 座机号码
16. mobile – 手机号码
17. phone – 当不区分手机和座机时,请用phone命名
18. address – 地址,单独出现不要用addr缩写,组合出现时需用缩写,比如mac地址,mac_addr
19. zipcode – 邮编
20. region – 地区,大的区域,比如记录杭州市、温州市等
21. area – 区域,小的,比如上城区,江干区等
22. avg_cost – 人均消费
23. 待续

四、【数据表字段设计范例】

分类表(t_category

字段名

列名

类型

属性备注

说明

流水号 id int(10) PK、自动增长
特殊编号 cid varchar(4) 第一个主分类为11、第一个子分类为1101,类推,仅支持二级分类
名称 name varchar(10) 页面中需注明输入不超过10个字
父分类 pid int(10)
统计量 count int(10)
是否热门 is_hot tinyint(1)
首页显示 is_index tinyint(1)
排序 order_id int(10)

LISTENING,ESTABLISHED,TIME_WAIT,CLOSE_WAIT

TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不
会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得
注意的状态有两个:CLOSE_WAIT和TIME_WAIT。 
 
1、LISTENING状态
  FTP服务启动后首先处于侦听(LISTENING)状态。

2、ESTABLISHED状态
  ESTABLISHED的意思是建立连接。表示两台机器正在通信。

3、CLOSE_WAIT

    对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭

4、TIME_WAIT

   
我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分
段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情
况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。

    目前有一种避免TIME_WAIT资源浪费的方法,就是关闭socket的LINGER选项。但这种做法是TCP协议不推荐使用的,在某些情况下这个操作可能会带来错误。

 

来源:http://www.cppblog.com/prayer/archive/2009/04/01/78592.html

 

 

常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。

TCP协议规定,对于已经建立的连接,
网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大
量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两
个:CLOSE_WAIT和TIME_WAIT。  

TIME_WAIT 

TIME_WAIT 是主动关闭链接时形成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。  由于TIME_WAIT 的时间会非常长,因此server端应尽量减少主动关闭连接

CLOSE_WAIT
CLOSE_WAIT是被动关闭连接是形成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,因此进入
CLOSE_WAIT状态。但如果服务器端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在很多
CLOSE_WAIT状态的连接。此时,可能是系统忙于处理读、写操作,而未将已收到FIN的连接,进行close。此时,recv/read已收到
FIN的连接socket,会返回0。

为什么需要 TIME_WAIT 状态?
假设最终的ACK丢失,server将重发FIN,client必须维护TCP状态信息以便可以重发最终的ACK,否则会发送RST,结果server认
为发生错误。TCP实现必须可靠地终止连接的两个方向(全双工关闭),client必须进入 TIME_WAIT
状态,因为client可能面 临重发最终ACK的情形。

为什么 TIME_WAIT 状态需要保持 2MSL 这么长的时间?
如果 TIME_WAIT
状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。第二个拥有相同相关五元组的连接出现,而第一个连接的重复报文到达,干扰了第二个连
接。TCP实现必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT状态保持时间足够长(2MSL),连接相应方向上的TCP报文要么
完全响应完毕,要么被 丢弃。建立第二个连接的时候,不会混淆。

 TIME_WAIT 和CLOSE_WAIT状态socket过多

如果服务器出了异常,百分之八九十都是下面两种情况:

1.服务器保持了大量TIME_WAIT状态

2.服务器保持了大量CLOSE_WAIT状态,简单来说CLOSE_WAIT数目过大是由于被动关闭连接处理不当导致的。

因为linux分配给一个用户的文件句柄是有限的,而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的通道就一直
被占着,而且是“占着茅坑不使劲”,一旦达到句柄数上限,新的请求就无法被处理了,接着就是大量Too Many Open Files异常

 

来源:http://blog.csdn.net/kobejayandy/article/details/17655739