未来往事
discuz大数据站点性能优化_响应慢卡/502/503/cpu100%解决方案
适合版本
DiscuzX全线产品(1.0/1.5/2.0/2.5/3.0/3.1/3.2)

程序方面
1、检查代码是否有不合理语法,死循环等(这项是个时间活,主要检查自己添加的代码及安装的插件)。例如关闭不需要的插件;首页N类似功能建议使用diy或模板,不建议使用插件
2、关闭云平台中不用的项目,例如:纵横搜索等
3、云平台手动设置接口ip,优化选择速度
4、后台配置启用相关优化、缓存等。如果可以,建议启用memcache内存优化
5、关闭非正规联盟的广告
6、如果有必要可以启用CC攻击:
引用
  $_config['security']['attackevasive']  = 0;(0表示关闭此功能)
  0表示关闭此功能
  1表示cookie刷新限制
  2表示限制代理访问
  4表示二次请求
  8表示回答问题(第一次访问时需要回答问题)
  同时也可以设置为组合的方式,如1|2表示同时启用cookie刷新限制和限制代理访问。

  解决搜索引擎索引问题,在主目录下打开/source/include/misc/misc_security.php文件找到7、数据量较大的站点建议优化以下discuz主要性能瓶颈点:
├session机制优化
├分页性能优化(分页瓶颈)
├帖子点击数缓存即时更新优化
├计划任务异步优化机制
├对数据量较大的表根据sql查询情况,对相应的字段建立索引(有效防范mysqld.exe进程100%或不稳定现象)
例如:ALTER TABLE `pre_threads` ADD INDEX ( `dateline` );

服务器方面
1、卸载服务器上不常用的软件及插件
2、所有安装的插件建议从其官方网站进行下载
3、优化配置安装php,mysql等组件
4、结合服务器相关日志数据分析慢程序、慢sql 及结合mysql show processlist命令查看当前有哪些线程在运行等。
5、如果可以,建议配置memcache优化
6、结合服务器相关日志数据分析服务器是否存在攻击、防盗链、采集等
7、如果为IIS服务器建议对站点进行独立配置应用程序池
8、定期对服务器进行全盘文件扫描
9、定期清理服务器残留session文件
10、建议更换为linux系统
专业提供中大型站点技术运维支持服务。如果遇到问题需要支持可以联系博主QQ,加QQ视为认同付费支持. 感谢您对 未来往事 的支持!点击这里给我发消息
关于w3wp.exe/mysqld.exe进程cpu100%问题解决方法请参考未来往事w3wp.exe mysqld.exe进程cpu100%问题解决方法
discuz w3wp.exe mysqld.exe进程CPU反复100%问题解决处理方法

适合版本
DiscuzX全线产品(1.0/1.5/2.0/2.5/3.0/3.1/3.2)

程序方面检查
1、近期是否安装了一些插件或添加了程序,检查代码是否有不合理语法,死循环等。例如关闭不需要的插件;首页N类似功能建议使用diy或模板,不建议使用插件
2、关闭云平台中不用的项目,例如:纵横搜索等
3、云平台手动设置接口ip,优化选择速度
4、后台配置启用相关优化、缓存等。如果可以,建议启用memcache内存优化
5、关闭非正规联盟的广告
6、如果有必要可以启用CC攻击:
引用
$_config['security']['attackevasive']  = 0;(0表示关闭此功能)
  0表示关闭此功能
  1表示cookie刷新限制
  2表示限制代理访问
  4表示二次请求
  8表示回答问题(第一次访问时需要回答问题)
  同时也可以设置为组合的方式,如1|2表示同时启用cookie刷新限制和限制代理访问。

  解决搜索引擎索引问题,在主目录下打开/source/include/misc/misc_security.php文件找到
7、对数据量较大的表根据sql查询情况,对相应的字段建立索引(有效防范mysqld.exe进程100%或不稳定现象)
例如:ALTER TABLE `pre_threads` ADD INDEX ( `dateline` );

服务器方面检查
1、近期是否在服务器上安装一些插件或软件,建议卸载服务器上不常用的软件及插件
2、所有安装的插件建议从其官方网站进行下载
3、优化配置安装php,mysql等组件
4、结合服务器相关日志数据分析慢程序、慢sql 及结合mysql show processlist命令查看当前有哪些线程在运行等。
5、如果可以,建议配置memcache优化
6、结合服务器相关日志数据分析服务器是否存在攻击、防盗链、采集等
7、对w3wp对应的应用程序池进行相关限制配置(当然执行这个的前提是你服务器上的每个网站需要配置对应单独应用程序池),可以通过iisapp -a查看w3wp进程pid对应的应用程序池
8、扫描服务器全盘文件是否存在木马病毒
9、删除当日IIS日志并重启IIS服务(当IIS被异常中断时,IIS会写异常日志,但是此时写入了乱码,造成IIS一直写日志的死循环,耗尽了系统资源。)
10、建议更换为linux系统
专业提供中大型站点技术运维支持服务。如果遇到问题需要支持可以联系博主QQ,加QQ视为认同付费支持. 感谢您对 未来往事 的支持!点击这里给我发消息
关于discuz大数据站点性能优化_响应慢卡/502/503/cpu100%解决方案请参考未来往事discuz大数据站点性能优化_响应慢卡/502/503/cpu100%解决方案
加密文章
本文为临时加密,请关注开放时间。欢迎赞助未来往事博客,您所赞助的费用将用于未来往事博客的硬件VPS及域名费用支出,谢谢。
支付宝账号:zhuangzhijia@126.com (庄 **)
联系本文作者:
点击这里联系未来往事
密码

那些该珍惜的碎片化时间 不指定

Rinald 商业评论网 随笔/分享 2014/04/28 22:46
你有没有这样的感受?很多事情都想做,却“一直”没有时间。
真要过了段日子,回过头再看看,却发现那么些自认“很忙”的时间,自己也没忙出个啥名堂来。
在日常生活中,想要拿出“整块”的时间来做点什么,越来越难。
移动互联那么方便,铺天盖地的信息令人眼花缭乱。
我们却更容易迷失自己。

我不知道生命走到今天你有多少遗憾?
据说,人老将离去时,人们最大的遗憾,乃是年轻的时候不够努力!

是的,年轻的时候不够努力!

那你要我们怎么努力呢?
拼命工作?惜时如金?
那也不行啊。

都说身体是革命的本钱,有太多惨痛的教训说明了拼命工作的代价是巨大的,不顾一切拼命工作在今天似乎不值得推崇。
那怎么办呢?
一天就那么24个小时,我们还要睡觉,要陪伴家人、朋友,还要处理生活中的各类琐事,如何才能“够”努力呢?

想了这么多年,走了这么多年,我忽然有点想明白了,所谓的“够”努力,或许包含两个层面:
一个是“专注”。
早日找到自己的正确定位,几十年如一日专注的努力。
进度或许不太快,但日积月累下来成果也是相当可观的。
还有一个很重要,也很容易被忽视的,就是善用零散时间,也就是我们常说的碎片化时间,而且是系统化的,有计划,有步骤的运用。
不让时间以我们不觉察的方式,从指尖流走。
关于此,我最近正在进一步实践。

利用好碎片化时间,一天不难,一个月也不太难,倘若长年如此,最需要的显然是自律了。
没人逼你要用好这些碎片化时间,你用好了也没人给你什么物质或精神上的奖励。
唯一能支持你长年采取积极行动的,是心中的信念,坚定不移的信念。

当然,合理用好自己的时间,尤其是数十年利用好碎片化时间的人不是大多数。
也因此,真正意义上成功的人也必定是少数。

今天这个社会,随着互联网与日常生活的联系越来越紧密,地球越来越平了。
发展的机会越来越多了,对于每一个人来说,相对公平不再是奢望。

所以,今天,如果你对你本人的境遇不太满意,好好反省自己吧。
如果明天你想过的更好,抓住眼下的每一天,利用好当下的碎片化时间,显然是明智的选择。

在对自己有清晰的定位的前提下,管理好自己,
勤勉,自律。

如此,幸福将更容易被你我感知到。
随着时间的沉淀,我们也会对自己越来越满意。

这,正是你我想要的。
discuz X3空间主题列表 图片展现模式,discuz实现个人空间主题列表调用图片模式,discuz home图片列表

如果需要实现该呈现方式,我们需要首先了解discuz封面图片存储原理:
discuz没有将主题列表封面路径存在数据表中,只是在pre_forum_thread表中存了一个cover标识。然后用getthreadcover 函数调取,diy调用的图片也会产生缩略图,可以设置缩略图的质量。
封面图片存储路径格式:data/attachment/forum/threadcover/43/ec/81.jpg

getthreadcover 函数:

实现方法:
修改:/source/language/home/lang_template.php
添加like 喜欢或查看

修改:/template/default/home/space_thread.htm
处理封面图:


效果如图:
点击在新窗口中浏览此图片

下载文件 (已下载 676 次)
PS:附件为UTF-8编码。

如果遇到问题需要支持可以联系博主QQ,加QQ视为认同付费支持. 感谢您对 未来往事 的支持!点击这里给我发消息

严重鄙视垃圾网站“Discuz教程网(www.discuz.1314study.com)”这种伸手党,抄袭本博内容用于商业目的且不注明出处!


Discuz 积分同步 不指定

Rinald 本站原创 Discuz 2014/04/16 08:43
Discuz多论坛用户积分同步 Discuz多论坛积分同步 Discuz多站点用户信息数据同步,目前已经实现如下信息同步,如果需要可以联系博主(关于中可以看到联系信息)。  

文章已有最新版:http://fity.cn/post/457/

支持的程序版本
Discuz!X2.5
Discuz!X3.0
Discuz!X3.1
持续更新中...

同步信息/共享数据列表
积分同步:
├金币同步
├贡献同步
├威望同步
├其他自定义扩展币同步
├积分同步
├勋章同步
├用户数据统计同步
├用户主题数量、帖子数量统计等信息同步
├账号同步登录及退出(仅在同域下)
├等级同步
├账号资料同步
├任一论坛禁言或删除用户同步

消息/提醒同步
├提醒同步(论坛回帖等提醒,点击链接并能正确跳转回/到各站点)
├消息同步(站点等相关消息,点击链接并能正确跳转回/到各站点)

后台相关数据同步
├管理组信息同步
├后台管理成员同步
├后台权限同步
├后台Session同步
├禁止访问数据同步

├积分规则、积分日志详情等信息同步

├广告数据同步
├友情链接数据同步


站点整合 内容整合
├多站点内容整合:多站点一套discuz系统,前后台按域名判断调用呈现不同的内容,便于大站点运营
├内容检索(搜索)同步,并能正确跳回各站点

演示站点
http://demo1.fity.cn
http://demo1.fity.cn

http://bbs.fsmijing.com
http://spt.fsmijing.com

http://www.sangzishequ.com
http://sz.sangzishequ.com

……………………
……………………
2013年12月10日,腾讯可视化的无线建站产品“风铃”正式上线,集快速建站、支持智能终端(HTML5)、互动、社交、LBS及效果监控等为一体的“风铃”产品,能够满足各行业广告主对无线营销快速建站的需求。同时,该平台还与拥有5亿用户的微信整合打通,可以为广告主提供多样化的移动营销整体解决方案。

腾讯风铃系统是腾讯官方的首款微信开发工具。通过风铃系统,开发者可以进行基于微信的网站建设。但风铃的推出也引发了部分开发者的抗议,认为该工具和他们的工作性质相冲突。

风铃由腾讯OMG部门下面的互动广告部门研发,开发目的给腾讯网和腾讯地方网站作为销售服务变现。风铃的核心卖点是帮助企业在微信上建设网站,腾讯互动广告部门宣称,微信5.0弱化推送后,企业客户更多要通过建设“微网站”的形式推送服务。

风铃系统的功能设计也主要是为满足广告客户的需求开发,风铃为“微网站”开发有16种功能,主要分为四类:
信息推送。功能包括图文、视频、欢迎语,用来满足企业的信息曝光需求。
网上服务。功能包括留言、客服,用来满足企业的客服需求。
互动。功能包括LBS、报名、调查、社交等,用来满足企业的互动需求。
销售。功能包括兑换、优惠券、会员卡等,用来满足企业的销售需求。

腾讯风铃对企业、商家的好处:
好处1:腾讯风铃可以帮助企业和商家搭建手机站点,进行无线营销。
好处2:腾讯风铃可以帮助企业和商家搭建微信中的站点,进行微信营销。

PDF帮助文档

互联网思维之连接一切 多云

Rinald 月光宝盒 随笔/分享 2014/02/08 09:14
连接思维是互联网思维的重要表现之一,当我们回首互联网历史的时候,会发现互联网让人与人、人与物之间的连接更为便捷。雅虎缩短了人与媒体的连接,谷歌缩短了人与信息的连接,MSN和Facebook缩短了人与人的连接,ebay缩短了人与商品的连接。

当有人问起我们互联网思维的概念时,我们总是一筹莫展。但当我们讲起互联网思维的时候,却总是眉飞色舞,声称某某企业就是运用互联网思维才成功的。

互联网思维到底是什么?对于这个概念,不同的人有不同的解释,有时候它就像哲学这个词一样,只可意会不可言传。

有人曾将互联网思维与文艺复兴时期的“人文主义”相联系,而我更愿意将其与工业革命的连接相联系。第一次工业革命,蒸汽机车让人们以比以往更快的速度相连接,第二次工业革命,电话、电报让人们在几秒钟内实现连接,互联网时代(革命)则几乎让远隔千里的人们在任何想要的时间内实现连接。所以如果要问互联网思维是什么的话,它一定包括连接思维。

人与媒体的连接,代表:雅虎、微博

在互联网出现之前,当我们想了解国内外新闻的时候,无非是通过以下几种形式:电视、报纸杂志(即纸媒)、收音机,它们统称为传统媒体,一般是由职业记者报道后发布于媒体,然后民众获取。传统媒体有三个特点:

一是新闻滞后,一般来说当广大民众得知一个新闻的时候,它已经发生多时了;

二是民众获取长尾新闻较为困难,一般来说媒体会花较大的精力报道最重大的新闻,民众获取这些新闻相对便利,而对于处于长尾的非重大新闻,则少有媒体报道,获取这些新闻较为困难;

三是民众获取新闻的行为多为被动,电视作为比报纸报道更为快捷的媒体,一般是在民众收看得时候才会被获取。所以在互联网出现的前的大多数年景里,不少人会每天吃完晚饭后守在电视机前准时观看19点的《新闻联播》,来了解国内外重要新闻。

互联网的出现改变了人们通过媒体获取新闻的习惯,1994年杨致远和大卫·费罗在美国创立了雅虎,此后几年,人们开始登陆雅虎而非从电视、纸媒上获得新闻信息。每天早上,人们不用打开电视或买报纸来了解前一天的新闻,而只需打开雅虎,快速浏览网页;当一个球迷对一场电视不转播的比赛的结果焦虑不安时,他也不用守在电视机前等待体育新闻,而只需打开雅虎看它的网络直播(虽然早期还是文字直播);当一个人对于一个小众领域的新闻动态感兴趣时,他再也不用到处搜集报纸杂志,只需要打开雅虎的某个频道就足够了。

雅虎的出现大大缩短了人与媒体之间的连接路径,使人们获取新闻的行为由被动收看变成了主动点击。如果说雅虎的出现是对传统媒体的革命的话,那微博的出现就是对传统媒体的二次革命,在微博出现之前,人们与媒体的连接中间总会有必要的一环——记者或编辑,而微博出现后,几乎每个身在世界各地的人都可以将自己看到的最新消息发布于微博,人们可以直接(不必经过职业记者或编辑)看到当事人对事件的描述。2009年一架美利坚航空公司的空中客车A-320班机因故迫降于纽约哈德孙河面上。一位救援人员贾尼斯·克鲁姆斯用自己的iPhone手机拍摄下当时的一幕,并上传到Twitter,成为了飞机迫降后首张现场照片。

因为微博的出现,人们开始以前所未有的速度获得重大新闻信息,因为微博的出现,每个人都可能成为媒体,人类与媒体之间的连接从未如此快捷。

人与信息的连接,代表:Google、百度

有时候我们不得不承认生于互联网革命之后的人是幸运的,据说马克思当年为了写《资本论》,几年如一日地在大英图书馆里查资料学习,由于他固定坐在一个座位上,数年下来,桌子下面竟然留下了磨出的脚印。如果马克思生于现世,显然他就不需要每天往返大英图书馆了,他可能只需要打开Google就可以了,而大英图书馆也可能会因此省下两块地砖。

上面的例子无非是让我们找一下回到没有互联网的时代的体验,在那个时代作者为了写一本书,可能需要每天到图书馆去查资料;记者为了写一篇报道,可能需要翻遍过往的报纸杂志;学生为了找到一个数学题的答案,可能需要问许多其他同学或翻遍教辅书;而在一个不那么令人关注的小众领域,你可能费劲心思也找不到相关的资料或书籍。但在互联网时代这一切都变得异常简化,查询资料?打开Google;查询数学题答案?打开Google。对于在现实中难以找到的小众领域的资料,Google同样可能告诉你答案。2010年,Google平均一年要保存33万亿条查询记录,由于Google的数据量巨大,因此你通过它找到自己需要的资料的概率一定非常大。

据Statista的一项新研究显示,2012年Google的广告收入超过了整个美国印刷媒体的总和。同样2012年百度财报显示,百度的在线的广告收入即将超过央视。这从侧面体现了Google、百度这样的搜索引擎作为信息平台,其价值已在大步赶超传统媒体的价值。

Google、百度这样的搜索引擎大大改变了人们连接信息的习惯,降低了人们获取信息的成本,人类与信息之间的连接从未如此快捷。

人与人的连接之通信,代表:MSN,微信
+阅读全文
本文主要介绍Thinkpad E430/431 Win8系统改为Win7系统的步骤:
自微软公司发布Win8系统以后,越来越多的电脑厂商都把Win8系统出厂预装到笔记本当中,联想Thinkpad E430系列笔记本也不例外,由于Win8系统的操作界面发生了很多改变,有很多人还不太喜欢使用电脑出厂预装的Win8系统,所以想要把Thinkpad E431笔记本中出厂预装的Win8换成Win7系统。

对于笔记本电脑装系统,相信很多人都不陌生,但就有很多朋友问我,为什么我用U盘或是光盘对出厂预装了Win8系统的电脑安装系统,在按F12选择U盘或光盘启动的时候,老是进不去,画面闪动一下,又回到原来的界面,这是什么原因造成了的呢? 
有些人开始怀疑这是U盘或光盘坏了,或者是PE没有做好等原因,但拿到其它电脑上去,又成正常启动,这到底是那里出问题了呢?   其实这不是你的U盘或PE出问题了,而是笔记本电脑预装Win8系统,采用了UEFI接口的原因,所以才会有一些PE无法兼容导致进不去,如果我们想要把预装的Win8系统换成Win7系统,我们只需要更改一下BIOS即可。
  
Win8换Win7更改BIOS的方法一: 
按开电源键,即可不停地按F1键,进入BIOS操作界面,按向右的方向键,选择“Security”,然后再按向下的方向键,选择最下面的“Secure Boot”,按回车键进入;
把“Secure Boot"中的“Enabled”按回车键更改成“Disabled”;
按Esc键返回上一级菜单,再按向右方向键,选择“Startup”,把“UEFI/Legacy Boot”中的“UEFI Only”改成“Both”即可,按“Fn+F10”保存,然后就可以和其它电脑一样正常安装系统了。

Win8换Win7更改BIOS的方法二:  
 同样是按电源键后,不停地按F1进入BIOS操作界面,按向右方向键
选择“Restart”,然后再把“- OS Optimized Defaults”中的“Enabled”改成“Disabled”,在更改过程中,会弹出提示,我们选择YES即可;
然后再按“Fn+F9”重置BIOS设置,重置完成以后,按再“Fn+F10”保存设置即可,这时就同没有预装Win8系统的电脑重装系统的方法是一样的了。 

 注:你可以根据自己需要,随意选择上面其中一种更改BIOS中UEFI接口的方法,只要执行了上面其中某种方法的操作,即可顺种地通过U盘或光盘启动来更换Win8操作系统。 

常见错误:
Win8系统换Win7以后,画面卡在“正在启动Windows” ?
出厂预装Win8系统换成Win7,必须更换BIOS中的UEFI接口,然后再重装系统。但系统通过ghost导入到电脑硬盘当中,重启时,画面就一直卡在“正在启动Windows”处,这是什么原因造成的呢?其实这主要是因为分区表错误的原因造成的,我们只需要运行PE系统的中DiskGenius分区工具,选择中电脑硬盘,再点文件边上的硬盘,在下拉菜单中点击“重建主引导记录(MBR)”即可,然后再按正常操作对电脑硬盘进行重新分区并重装系统即可。

详细说明信息参考本博客其他类似文章
ASUS S200E Win8系统改为Win7系统
GPT与MBR分区表格式类型转换
本文介绍了PHP会话控制,主要阐述以下几点内容:
会话控制的产生背景/概念
cookie的维护与生命周期(有效时间)
session的维护与生命周期(回收机制)
cookie与session之间的区别与联系
问题1:禁用cookie后session为什么会失效?
问题2:IE浏览器下丢失session,每次刷新页面,都会生成新的sessionID(Firefox浏览器正常)
session、cookie简单实例

▶ 本文最后更新:2014-01-23(更新内容‘问题2’

● 理解会话控制的概念
理解一个概念就需要理解他的背景及产生的原因,这里引入WEB环境及其HTTP协议。会话控制产生的背景:
阅读过HTTP协议相关资料的同学都会知道HTTP协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议,所谓无状态,指的是不会维护http请求数据,http请求是独立的,不持久的。也就是说HTTP协议没有一个内建的机制来维护两个事务之间的状态或者说是关系吧。当一个用户在请求一个页面后再去请求另外一个页面时,HTTP将无法告诉我们这两个请求是否来自同一个用户。

由此我们就会觉得很奇怪了,平时我们在论坛逛帖子或电商网站购物时,只要我们在这个站点内,不论我们怎么跳转,从一个页面跑到另一个页面,网站总会记得我是谁,比如告诉你购买了哪些东西。这是怎么做到的呢,估计大家猜到了,这就是运用了HTTP会话控制。在网站中跟踪一个变量,通过对变量的跟踪,使多个请求事物之间建立联系,根据授权和用户身份显示不同的内容、不同页面。

PHP Session会话控制:
PHP的session会话是通过唯一的会话ID来驱动的,会话ID是一个加密的随机数字,由PHP生成,在会话的生命周期中都会保存在客户端。我们知道客户端(也就是浏览器)保存数据的地方只有cookie,所以PHP的会话ID一般保存在用户机器的cookie中。了解cookie后我们知道,浏览器是可以禁用cookie的,这样会话就会失效。所以PHP会话控制还有一种模式,就是在URL中传递会话ID。如果在浏览网站时我们稍加留心的话,有些URL中有一串看起来像随机数字的字符串,那么其实很有可能就是URL形式的会话控制。

讲到这里,有些人可能会有疑问了,客户端只是保存一个会话ID,那么会话控制中保存的会话变量比如你购物时买的物品列表等,它们是存放在哪个地方的呢?很显然,会话变量是在服务器端使用的,那么这些会话变量必定存放在服务器端。默认情况下,会话变量保存在服务器的普通文件中(也可以自己配置使用数据库来保存,可以Google一下),会话ID的作用就像是一把钥匙,在服务器端保存会话的文件中找到该会话ID对应的会话变量,比如购买物品的列表。

那么会话控制的整个过程可能就像这个样子,用户登录或者第一次浏览某个站点的页面时,该站点会生成一个PHP的会话ID并通过cookie发送到客户端(浏览器)。当用户点击该站点的另一个页面时,浏览器开始连接这个URL。在连接之前,浏览器会先搜索本地保存的cookie,如果在cookie中有任何与正在连接的URL相关的cookie,就将它提交到服务器。而刚好在登陆或第一次连接时,已经产生了一个与该网站URL相关的cookie(保存的会话ID),所以当用户再次连接这个站点时,站点就可以通过这个会话ID识别出用户,从服务器的会话文件中取出与这个会话ID相关的会话变量,从而保持事务之间的连续。


接下来我们了解下两个重要的概念:cookie和session
● 关于cookie的维护与生命周期
cookie是在服务器端被创建并写回到客户端浏览器,浏览器接到响应头中关于写cookie的指令则在本地临时文件夹中
创建了一个cookie文件,其中保存了你的cookie内容,cookie内容的存储是键值对的方式,键和值都只能是字符串。例如:
文件:Cookie:administrator@localhost/
内容格式:voteID100101localhost/15361167667230343893360385046430343691*

cookie的创建:
setcookie()函数设置cookie,函数原型如下
setcookie(name, value, expire, path, domain);
注释:cookie标题头必须在发送其他标题头之前发送,否则就无效(这是cookie的限制,而不是PHP的限制)。在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie() 取而代之)。

cookie的维护:
cooke有四个标识符:cookie的name,domain,path,secure标记。要想在将来改变这个cookie的值,需要发送另一个具有相同cookie name,domain,path的Set-Cookie消息头,这将以一个新

的值来覆盖原来cookie的值。然而,如果仅仅只是改变这些选项的某一个也会创建一个完全不同的cookie,如只是更改了name值。

cookie失效时间:
可以设置过期时间,如果不设置则是会话级别的,即关闭浏览器就会消失。当cookie创建时包含了失效日期,这个失效日期则关联了以name-domain-path-secure为标识的cookie。要改变一个cookie的失效日期,你必须指定同样的组合。当改变一个cookie的值时,你不必每次都设置失效日期,因为它不是cookie标识信息的组成部分。例如:
在cookie上的失效日期并没有改变,因为cookie的标识符是相同的。实际上,只有你手工的改变cookie的失效日期,否则其失效日期不会改变。这意味着在同一个会话中,一个会话cookie可以变成一个持久化cookie(一个可以在多个会话中存在的),反之则不可。为了要将一个持久化cookie变为一个会话cookie,你必须删除这个持久化cookie,这只要设置它的失效日期为过去某个时间之后再创建一个同名的会话cookie就可以实现。

需要记得的是失效日期是以浏览器运行的电脑上的系统时间为基准进行核实的。没有任何办法来来验证这个系统时间是否和服务器的时间同步,所以当服务器时间和浏览器所处系统时间存在差异时这样的设置会出现错误。

cookie自动删除:
cookie会被浏览器自动删除,通常存在以下几种原因:
会话cooke(Session cookie)在会话结束时(浏览器关闭)会被删除
持久化cookie(Persistent cookie)在到达失效日期时会被删除,如:
如果浏览器中的cookie限制到达,那么cookies会被删除以为新建cookies创建空间。

● 关于session的维护与生命周期
+阅读全文
iframe高度随页面内容自适应高度,当页面高度变动时iframe高度也自动变化
浏览器兼容:IE6++、Firefox全系列、Chrome全系列、(其他版本浏览器未做测试,期待你测试评论反馈以完善本文,谢谢)

同域环境下实现方法:
方法一:仅修改iframe父页面(iframeA.php),iframe子页面内容(iframeB.php)不用添加其他js或额外代码
iframe父页面(iframeA.php)添加代码如下:
<iframe width="100%" height="0" id="frame_content" src="http://fity.cn/iframeB.php" scrolling="no" frameborder="0" onload="this.height=this.contentWindow.document.documentElement.scrollHeight"></iframe>

<script type="text/javascript">
function reinitIframe(){
var iframe = document.getElementById("frame_content");
try{
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
var height = Math.max(bHeight, dHeight);
iframe.height =  height;
}catch (ex){}
}
window.setInterval("reinitIframe()", 200);
</script>

方法二:修改iframe子页面内容(iframeB.php),iframe父页面(iframeA.php)不需要加入js代码
iframe父页面(iframeA.php)添加代码如下:
<IFRAME border=0 marginWidth=0 frameSpacing=0 marginHeight=0 src="http://fity.cn/iframeB.php" frameBorder=0 noResize scrolling="no" width=100% height=100% vspale="0" id="childFrame" ></IFRAME>
iframe子页面(iframeB.php)代码范例如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn">
<head>
<script language="javascript" type="text/javascript">
function IFrameResize(){
//alert(this.document.body.scrollHeight); //弹出当前页面的高度
var obj = parent.document.getElementById("childFrame"); //取得父页面IFrame对象
//alert(obj.height); //弹出父页面中IFrame中设置的高度
obj.height = this.document.body.scrollHeight; //调整父页面中IFrame的高度为此页面的高度
}
window.setInterval("IFrameResize()", 200);//这里的时间可以设置短一些,时间越短高度变动时抖动越不明显
</script>
</head>
<body onload="IFrameResize()">
<div id='main' style='background:#FFF;width:100%;'>
测试数据
<br/>
测试数据
<br/>
测试数据
<br/>
http://fity.cn
</div>
</div>
</body>
</html>
注意:这里需要定义body onload属性


跨域环境下实现方法:
iframe若是跨域,不能直接用JS来控制,只能通过一个中间代理,我们这里选择在iframe的子页面(iframeB.php)中加一个与iframe父页面(iframeA.php)同域的页面(iframeC.php);这样页面iframeC.php就能和父页面iframeA.php进行无障碍的通讯了;因为子页面iframeB.php页面嵌入iframeC.php,所以页面iframeB.php可以改写页面iframeC.php的href值,这里给出一个例子,假设域名对应文件如下:
引用
iframeA.php  位于http://fity.cn域上
iframeB.php   位于http://www.household114.com域上
iframeC.php  位于http://fity.cn域上

实现方式:
+阅读全文

discuz楼层错乱一楼不显示处理 不指定

Rinald 本站原创 Discuz 2013/11/30 23:52
discuz楼层错乱1楼主题内容不显示问题解决

任何数据库应用都存在分页性能问题,mysql的性能问题似乎更大些。Discuz7.2(以下简称dz7.2)和Discuz X2(简称X2)的抢楼机制基本相同,抢楼与普通帖子(盖楼)是不同的处理机制。到了Discuz X2.5(简称X2.5)就把抢楼与盖楼机制统一。
引用来源:X2.5的新程序架构

由以上信息可以看出Discuz!X2.0及更早版本与Discuz!X2.5对抢楼及盖楼的机制并不相同、数据结构也相应的存在差距。为了解决这一问题,我们同时首先需要了解下discuz数据表以下几个常见字段:
tid:主题id
pid:帖子id
position:显示位置
first:是否是首贴


Discuz!X2.0及更早版本主题抢楼盖楼数据表:
forum_post 帖子表
forum_postposition帖子排楼顺序表,用来存储论坛帖子的排序,该表采用 (tid, position) 两个字段联合做自增主键,在高并发情况下,效率自然不高。(题外话,补充一点:该表不宜修改为InnoDB,建议新增了一列自增ID做主键,该主键和业务完全没有任何关系,仅用做自增主键。)
forum_postposition表的存储内容格式:
点击在新窗口中浏览此图片
在抢楼帖中假设forum_post表中first字段为1且该帖pid与forum_postposition表中pid相等且forum_postposition表中position字段为1对应则为1楼。


Discuz!X2.5及更高版本主题抢楼盖楼数据表:
forum_postpositin帖子排楼顺序表:取消了forum_postpositin表,在 post主表中增加 position 字段保存每个帖子的楼号。
forum_post 帖子表中多了一个position字段,如图:
点击在新窗口中浏览此图片
至此,你应该知道如何解决或处理该问题了。该问题在Discuz!X2.5及更高版本中很少遇见或几乎不会遇见,原因上述内容已经提到。

扩展阅读

先不分析X2.5固定楼号的利弊,就谈谈从dz7.2到X2.5对楼层处理机制以及变化的优缺点。
dz7.2用 postposition表来实现抢楼楼号排序,顺便也实现了对高楼层分页性能优化;X2 postpositon表只用来抢楼,对于高楼层主题分页优化没看到相关处理;X2.5对post主表添加楼号字段来让所有帖子的楼号固定,从而解决分页性能问题,也一并解决了抢楼问题。

从抢楼为主,附加高楼层分页到所有楼层分页为主,附带实现了抢楼,这个变化说明随着discuz功能增加对于分页性能的需求也变大,另外一个显示原因是那些长期使用discuz系统的大站数据也越来越大,大于1000万帖子的不是少数,他们对分页性能提高的需求更迫切。

看似Discuz!X2.5及更高版本的处理方式更好,但或许是因为缺乏DBA的支持,Discuz因为mysql的弱智低能带来的称重包袱而导致开发正走向歧路,具体可以参阅Discuz上这篇帖子《从Discuz7.2/X2盖楼机制到DiscuzX2.5盖楼抢楼合一分析Discuz!X的mysql技术包袱》


高级CSS样式选择器 不指定

Rinald 本站原创 WEB前端 2013/11/12 16:56
CSS选择器,CSS样式选择器,CSS选择器详解,高级CSS选择器,高级CSS选择器参考手册,CSS选择器参考指南

我们知道CSS 2 开始引入了属性选择器。属性选择器可以根据元素的属性及属性值来选择元素。简单的说即在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。本文主要描述CSS样式表中选择器的一些用法,当然你可能已经对CSS样式选择器不在生疏,但是通过本文你将能更好的掌握CSS样式的一些高级选择器使用。

CSS是对网页设计师可用的最强大的工具之一,你也许已经掌握了id、class、后台选择器这些基本的css选择器。但这远远不是css的全部。本文向大家介绍一些常见的高级CSS样式选择器,包括我们最头痛的浏览器兼容性问题。掌握了它们,才能真正领略css的巨大灵活性。

在深入研究高级CSS选择器之前,理解CSS优先级是如何工作很重要,这样我们就知道如何适当的使用我们的选择器并避免浪费大量的时间来调试一些只要我们注意到优先级的话就很容易被搞定的问题。当我们写CSS的时候我们必须注意有些选择器在级联(cascade)上会高于其它选择器,我们写在最后面的选择器将不一定会覆盖前面我们写在同一个元素的样式。选择器的优先级别规则:一般而言,选择器越特殊,它的优先级越高。也就是选择器指向的越准确,它的优先级就越高。通常我们用1表示标签名选择器的优先级,用10表示类选择器的优先级,用100标示ID选择器的优先级。在本文中也会在相关选择器中进行标注。

一、基本选择器(兼容浏览器:IE6+、Firefox、Chrome、Safari、Opera)
*  通用元素选择器,匹配任何元素,在页面上的每一个元素上起作用
h4  标签选择器,匹配所有使用h4标签的元素.优先级仅仅比*高
.textbox  class(类)选择器,匹配所有class属性中包含textbox的元素,class选择器与id选择器的不同是class选择器能作用于期望样式化的一组元素
#mainWrapper  id选择器,匹配所有id属性等于mainWrapper的元素。id是我们最常用的css选择器之一。id选择器的优势是精准,高优先级(优先级基数为100,远高于class的10),作为javascript脚本钩子的不二选择,同样缺点也很明显优先级过高,重用性差,所以在使用id选择器前,我们最好问下自己,真的到了非用id选择器的地步?
例如:


二、多元素的组合选择器/扩展选择器(兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera)
E,F  多元素选择器/群组选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔,如div,span,img{}(值得注意的是兼容IE6+)
E F  后代元素选择器--这也是我们最常用的一种选择器。要留意的点是,这种方式的选择器将选取其下所有匹配的子元素,无视层级,所以有的情况是不宜使用的。匹配所有属于E元素后代的F元素,E和F之间用空格分隔(值得注意的是兼容IE6+)
E > F  子元素选择器,匹配所有E元素的子元素F,与后代选择器E F不同的是,子选择器只对E下的直接子级F起作用
E + F  毗邻元素选择器,匹配所有紧随E元素之后的同级元素F(只匹配第一个元素)
例如:


三、属性选择器(兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera)
属性选择器(Attribute selector)让你可以基于属性来定位一个元素。你可以只指定该元素的某个属性,这样所有使用该属性——而不管它的值——的这个元素都将被定位,也可以更加明确并定位在这些属性上使用特定值的元素 —— 这就是属性选择器展示它们的威力的地方。

CSS 2.1 属性选择器 (注意:由于博客程序问题,value值需要有双引号,下同)
E[att]  匹配所有具有att属性的E元素,不考虑它的值。(注意:E元素在此处可以省略,比如 [cheacked] 。以下同);
E[att=value]  匹配所有att属性等于 value 的E元素,即:该属性有指定的确切的值;
E[att~=value]  匹配所有att属性具有多个空格分隔的值、其中一个值等于 value 的E元素,即:该属性的值必须是一系列用空格隔开的多个值,(比如,class= title featured home ),而且这些值中的一个必须是指定的值 value ;
E[att|=value]   匹配所有att属性具有多个连字号分隔(hyphen-separated)的值、属性的值就是 value 或者以 value 开始并立即跟上一个 - 字符,也就是 value- 。(比如lang= zh-cn );

CSS 3 属性选择器
E[att^= value ]  属性att的值以 value 开头的元素,即:该属性的值以指定值开始。
E[att$= value ]  属性att的值以 value 结尾的元素,即:该属性的值包含指定的值(而无论其位置)
E[att*= value ]  属性att的值包含 value 字符串的元素,即:该属性的值以指定的值结束。
例如:


四、 CSS 2.1中的伪类(兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera)
E:first-child   匹配父元素的第一个子元素。
E:link  匹配所有未被点击的链接标签。
E:visited  匹配所有已被点击的链接标签。
E:active  匹配鼠标已经其上按下、还没有释放的E元素
E:hover  匹配鼠标悬停其上的E元素,即:当鼠标划过时E元素的样式。需要注意的是,在IE6中:hover只能用于链接元素。
E:focus  匹配获得当前焦点的E元素--最常用于表单元素
E:lang(c)  匹配lang属性等于c的E元素
例如:


五、CSS 2.1中的伪元素/伪对象 [兼容性:IE6、IE7与IE8(怪异模式Quirks mode)不支持此伪元素,兼容浏览器IE9+、Firefox、Chrome、Safari、Opera]
E::first-line  匹配E元素的第一行
E::first-letter  匹配E元素的第一个字母
E::before  在E元素之前插入生成的内容
E::after  在E元素之后插入生成的内容
例如:


六、CSS 3的同级元素通用选择器(兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera)
E ~ F 相邻选择器,与前面提到的E+F不同的是,E~F匹配与E相同级别的所有F元素,而E+F只匹配第一个。
例如:


七、CSS 3中与用户界面有关的伪类(兼容浏览器:IE9+、Firefox、Chrome、Safari)
E:enabled   匹配表单中激活的元素(比如,文本输入框)和 checked 或unchecked 状态(radio单选按钮和checkbox复选框)
E:disabled  匹配表单中禁用的元素(同上)
E:checked  匹配处于选定状态的界面元素(同上)
E::selection   定义用户鼠标已选择内容的样式
例如:


八、CSS 3中的结构性伪类(兼容浏览器:IE9+、Firefox、Chrome、Safari)
E:root   匹配文档的根元素,对于HTML文档,就是HTML元素
E:nth-child(n)  匹配其父元素的第n个子元素,第一个编号为1
E:nth-last-child(n)   匹配其父元素的倒数第n个子元素,第一个编号为1
E:nth-of-type(n)   与:nth-child()作用类似,不同的是它匹配的不是某个序列元素,而是元素类型
E:nth-last-of-type(n)  与:nth-last-child() 作用类似,但是仅匹配使用同种标签的元素
E:last-child  匹配父元素的最后一个子元素,等同于:nth-last-child(1)
E:first-of-type  匹配父元素下使用同种标签的第一个子元素,等同于:nth-of-type(1)
E:last-of-type   匹配父元素下使用同种标签的最后一个子元素,等同于:nth-last-of-type(1)
E:only-child  匹配父元素下仅有的一个子元素,等同于:first-child:last-child或 :nth-child(1):nth-last-child(1),这个伪类用的比较少
E:only-of-type  匹配父元素下使用同种标签的唯一一个子元素,等同于:first-of-type:last-of-type或 :nth-of-type(1):nth-last-of-type(1)
E:empty  匹配一个不包含任何子元素的元素,注意,文本节点也被看作子元素
例如:


九、CSS 3的反选伪类/否定伪类选择器(兼容浏览器:IE9+、Firefox、Chrome、Safari)
E:not(value)   否定伪类选择器用来在匹配元素时排除某些元素,匹配不符合当前选择器的任何元素
例如:


十、CSS 3中的 :target 伪类(不支持IE全系列)
E:target  匹配文档中特定 id 点击后的效果
例如:


扩展阅读:
1、如何写出简洁、高效的CSS?
• 不要在ID选择器前使用标签名
  一般写法:DIV#divBox
  更好写法:#divBox
  解释: 因为ID选择器是唯一的,加上div反而增加不必要的匹配。
• 不要再class选择器前使用标签名
  一般写法:span.red
  更好写法:.red
  解释:同第一条,但如果你定义了多个.red,而且在不同的元素下是样式不一样,则不能去掉
• 尽量少使用层级关系
  一般写法:#divBox p .red{color:red;}
  更好写法:.red{..}
• 使用class代替层级关系
  一般写法:#divBox ul li a{display:block;}
  更好写法:.block{display:block;}

2、样式表中定义CSS兼容IE6、IE7、FF


PS:另一点,我们在使用javascript类库的选择器时,例如jquery,要尽可能的使用这些原生的css3选择器,因为类库的选择器引擎会通过浏览器内置解析它们,这样会获得更快的速度。

CSS3选择器W3C参考手册:
http://www.w3school.com.cn/cssref/css_selectors.asp

MySQL HandlerSocket 不指定

Rinald 本站原创 MySQL 2013/06/27 18:56
MySQL HandlerSocket 插件说明与安装配置

一、HandlerSocket是什么?
HandlerSocket是akira higuchi写的一个MySQL的插件。以MySQL Daemon Plugin的形式提供类似NoSQL的网络服务,通过这个插件,你可以直接跟MySQL后端的存储引擎做key-value式的交互,省去了MySQL上层的SQL解释、打开关闭表、创建查询计划等CPU开销。
目前使用MySQL的网站,多半同时使用Memcache作为键值缓存。虽然这样的架构极其流行,有众多成功的案例,但过于依赖Memcache,无形中让Memcache成为故障的根源:
Memcache数据一致性的问题:当MySQL数据变化后,如果不能及时有效的清理掉过期的数据,就会造成数据不一致。这在强调即时性的Web2.0时代,不可取。
Memcache崩溃后的雪崩效应:作为缓存的Memcache一旦崩溃,MySQL很可能在短时间内承受高负载而宕机。
注:关于清理过期数据的问题,可以在程序架构上想办法,如果数据操作有统一DAO封装的话,可以利用Observer模式来清理过期数据,非主题内容,资料自查。
面对以上问题,HandlerSocket项目是个不错的解决方案,它通过插件的方式赋予MySQL完整的NoSQL功能,从原理上讲,它跳过MySQL中最耗时的语法解析,查询计划等步骤,直接读取数据,如果内存够大,能装下索引,MySQL的查询效率能提高若干倍!
HandlerSocket:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL
php-handlersocket:http://code.google.com/p/php-handlersocket/

系统信息约定:
系统版本:CentOS 6.3 X86
PHP安装目录:/usr/local/webserver/php5318
MySQL安装目录:/usr/local/webserver/mysql5520
HandlerSocket安装路径:/usr/local/webserver/handlersocket

二、安装配置HandlerSocket
安装之前建议你先安装相关支持及需要的组件包:
yum install gcc gcc-c++ libtool make openssl-devel perl-DBI perl-DBD-MySQL
yum install rpm-build gperf readline-devel ncurses-devel time perl-Time-HiRes

1. 安装
如果使用Percona Server版本的MySQL就简单了,因为它已经内置了HandlerSocket支持,不过考虑到其内置的版本不够新,存在一些早已修复的BUG,所以最好采用源代码编译。HandlerSocket是基于MySQL数据库的,因此在安装HanderSocket前需要先按照常规方式部署MySQL服务,同时需注意HandlerSocket时需要MySQL的源码,因此还需要MySQL源码编译方式安装。
[root@iredmail opt]# git clone https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL.git
[root@iredmail opt]# cd HandlerSocket-Plugin-for-MySQL
[root@iredmail HandlerSocket-Plugin-for-MySQL]# ./autogen.sh
[root@iredmail HandlerSocket-Plugin-for-MySQL]#./configure --prefix=/usr/local/webserver/handlersocket --with-mysql-source=/opt/mysql-5.5.20 --with-mysql-bindir=/usr/local/webserver/mysql5520/bin --with-mysql-plugindir=/usr/local/webserver/mysql5520/lib/mysql/plugin
Tips:
--with-mysql-source 指定MySQL源码所在目录
--with-mysql-bindir 表示MySQL二进制可执行文件目录
--with-mysql-plugindir 指定MySQL插件的存储路径,如果不清楚这个目录在哪,可以按如下方法查询:
mysql> show variables like 'plugin%';
+---------------+-------------------------------------------+
| Variable_name | Value                                     |
+---------------+-------------------------------------------+
| plugin_dir    | /usr/local/webserver/mysql5520/lib/plugin |
+---------------+-------------------------------------------+
1 row in set (0.00 sec)
[root@iredmail HandlerSocket-Plugin-for-MySQL]# make
常见错误:
libtool: link: only absolute run-paths are allowed
make[2]: *** [handlersocket.la] Error 1
make[2]: Leaving directory `/opt/HandlerSocket-Plugin-for-MySQL/handlersocket'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/opt/HandlerSocket-Plugin-for-MySQL'
make: *** [all] Error 2
解决方法:
[root@iredmail HandlerSocket-Plugin-for-MySQL]# vi handlersocket/Makefile
line 301:
$(handlersocket_la_LINK) -rpath $(pkgplugindir) $(handlersocket_la_OBJECTS) $(handlersocket_la_LIBADD) $(LIBS)
-->
$(handlersocket_la_LINK) -rpath /opt/HandlerSocket-Plugin-for-MySQL/handlersocket $( handlersocket_la_OBJECTS) $(handlersocket_la_LIBADD) $(LIBS)

[root@iredmail HandlerSocket-Plugin-for-MySQL]#make install
完成后,mysql-plugindir目录下应有handlersocket相关文件

2、配置MySQL:
修改my.cnf配置文件:
[root@iredmail HandlerSocket-Plugin-for-MySQL]# vi /etc/my.cnf
[mysqld]
plugin-load=handlersocket.so(plugin-load可略过不配)
loose_handlersocket_port = 9998 # 指定读请求端口号
# the port number to bind to (for read requests)
loose_handlersocket_port_wr = 9999 # 指定写请求端口号
# the port number to bind to (for write requests)
loose_handlersocket_threads = 16 # 指定读线程数目
# the number of worker threads (for read requests)
loose_handlersocket_threads_wr = 1 # 指定写线程数目
# the number of worker threads (for write requests)
open_files_limit = 65535
# to allow handlersocket accept many concurren connections, make open_files_limit as large as possible.
Tips:InnoDB的innodb_buffer_pool_size,或MyISAM的key_buffy_size等关系到缓存索引的选项尽可能设置大一些,这样才能发挥HandlerSocket的潜力。

登陆MySQL并激活HandlerSocket插件:
[root@iredmail HandlerSocket-Plugin-for-MySQL]# mysql -uroot -p
mysql> install plugin handlersocket soname 'handlersocket.so';
ERROR 1126 (HY000): Can't open shared library '/usr/local/webserver/mysql5520/lib/plugin/handlersocket.so' (errno: 2 cannot open shared object file: No such file or directory)
说明:这里提示没有找到handlersocket.so扩展文件,请查看扩展文件是否存在。
mysql> install plugin handlersocket soname 'handlersocket.so';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
至此,HandlerSocket插件安装完毕。

重启mysql服务:
[root@iredmail HandlerSocket-Plugin-for-MySQL]# service mysqld restart

3、HandlerSocket状态测试:

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

也可以通过查询刚配置的端口是否已经被MySQL占用来确认是否安装成功:
[root@iredmail HandlerSocket-Plugin-for-MySQL]# lsof -i -P | grep mysqld
mysqld    26871 mysql   11u  IPv4  72467      0t0  TCP *:9998 (LISTEN)
mysqld    26871 mysql   29u  IPv4  72469      0t0  TCP *:9999 (LISTEN)
mysqld    26871 mysql   31u  IPv4  72474      0t0  TCP *:3306 (LISTEN)
Tips:If ports 9998 and 9999 don’t show up.  Make sure SELinux is not running.

三、安装配置 php-handlersocket 扩展模块:
1、安装php-handlersocket扩展
[root@iredmail opt]# wget http://php-handlersocket.googlecode.com/files/php-handlersocket-0.3.1.tar.gz
[root@iredmail opt]# tar -zxvf php-handlersocket-0.3.1.tar.gz
[root@iredmail opt]# cd handlersocket/
[root@iredmail handlersocket]# /usr/local/webserver/php5318/bin/phpize
[root@iredmail handlersocket]# ./configure --with-php-config=/usr/local/webserver/php5318/bin/php-config
./configure可加参数:
点击在新窗口中浏览此图片
Tips:If you get error:
configure: error: Can't find hsclient  headers,please install libhsclient first,Or ./configure--disable-handlersocket-hsclient --with-php-config=/usr/local/webserver/php5318/bin/php-config use native type.
[root@iredmail handlersocket]#make && make install
A successful install will have created handlersocket.so and put it into the PHP extensions directory. You'll need to and adjust php.ini and add an extension=handlersocket.so line before you can use the extension.
[root@iredmail handlersocket]# vi /usr/local/webserver/php5318/etc/php.ini
extension=handlersocket.so

至此php扩展安装完成,放问php.info页面,我们可以看到已经成功加载了handlersocket扩展

点击在新窗口中浏览此图片


2、php-handlersocket 使用示例:
+阅读全文
最后更新时间:2013-06-16
  • 2013-05-21 首次整理成文档
  • 2013-06-17 发布到博客


一、Awstats安装配置
详细安装步骤这里不再赘述,如有需要请参考博客另一篇文章《awstats+jawstats构建日志自动分析系统》
1、安装
[root@iredmail ~]# cd /opt
[root@iredmail opt]# wget http://sourceforge.net/projects/awstats/files/AWStats/7.1.1/awstats-7.1.1.tar.gz
[root@iredmail opt]# tar -zxf awstats-7.1.1.tar.gz
[root@iredmail opt]# mv awstats-7.1.1 /usr/local/awstats
[root@iredmail opt]# chown -R root:root /usr/local/awstats
[root@iredmail opt]# chmod +x /usr/local/awstats/tools/*.pl
[root@iredmail opt]# chmod +x /usr/local/awstats/wwwroot/cgi-bin/*.pl
[root@iredmail opt]# cd /usr/local/awstats/tools
[root@iredmail tools]# ./awstats_configure.pl
1) 输入 none 然后回车
2) 输入 y 确认创建配置文件
3) 输入配置文件名称,一般输入域名,这里是以slog.fity.cn为案例
4) 配置文件使用默认路径 /etc/awstats
5) 按回车继续
6) 按回车完成配置文件的创建

2、修改awstats配置文件
[root@iredmail tools]# vi /etc/awstats/awstats.slog.fity.cn.conf  #如果有多个站点需要统计,请配置多个配置文件
LogFile="/htdoc/logs/2013/05/access_20130526.log"//指定log文件的存储位置
如果你希望每天能定时生成昨天的报表,可以:
LogFile="/htdoc/logs/%YYYY-24/%MM-24%/access_%YYYY-24%MM-24%DD-24.log"
注:根据你的日志路径和对应的日志文件名进行修改。对应Nginx日志切割程序所生成的目录存放结构保存的nginx日志文件。要注意Awstats的年月日格式的跟Nginx的写法有所不同,其中%YYYY-24/%MM-24/%DD-24表示年月日都减去24小时,也就是昨天的日志目录。

3、生成Awstats统计结果静态页面
[root@iredmail awstats]# mkdir -p /htdoc/awstats/html  #创建存放结果的目录
/usr/local/awstats/tools/awstats_buildstaticpages.pl -update  -config=slog.fity.cn -lang=cn -dir=/htdoc/awstats/html -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
说明:    
/usr/local/awstats/tools/awstats_buildstaticpages.pl Awstats 静态页面生成工具
-update -config=slog.fity.cn 更新配置项,指定配置文件
-lang=cn 语言为中文
-dir=  指定静态页面的存储位置
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl Awstats 日志更新程序路径


二、Nginx配置及URL地址简化
1、配置Nginx
从Awstats提供的工具包中我们看到Awstats已经提供了在Nginx环境Awstats的安装配置,Nginx主机范例文件:
[root@iredmail awstats]#ls /usr/local/awstats/tools/nginx/
awstats-fcgi.php  awstats-nginx.conf  README.txt

这里我们先把awstats-fcgi.php复制一份到/usr/local/awstats/wwwroot/cgi-bin/fcgi.php
[root@iredmail awstats]# cd /usr/local/awstats/tools/nginx/
[root@iredmail nginx]# cp -a awstats-fcgi.php /usr/local/awstats/wwwroot/cgi-bin/fcgi.php

然后创建Nginx虚拟主机配置文件(可以参考Awstats提供的示例文件awstats-nginx.conf)
这里未来往事给出一个本次测试环境下Nginx的vhost完整配置:
server {
        listen 80;
        server_name slog.fity.cn;
        #access_log /var/log/nginx/localhost.access_log main;
        #error_log /var/log/nginx/localhost.error_log info;
        root /htdoc/awstats/html;
        index index.html;

        # Restrict access
        #auth_basic "Restricted";
        #auth_basic_user_file /etc/awstats/htpasswd;


        location ~ ^/cgi-bin/.*.(cgi|pl|py|rb) {
        gzip off;
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;   #注意配置fastcgi_pass为你的php-fpm server.
        fastcgi_index   cgi-bin.php;
        fastcgi_param   SCRIPT_FILENAME /usr/local/awstats/wwwroot/cgi-bin/fcgi.php;  #注意文件路径
        fastcgi_param   SCRIPT_NAME        /cgi-bin/fcgi.php;
        fastcgi_param   X_SCRIPT_FILENAME /usr/local/awstats/wwwroot$fastcgi_script_name;  #注意文件路径
        fastcgi_param   X_SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param   REMOTE_USER        $remote_user;
        }


        # Static awstats files: HTML files stored in DOCUMENT_ROOT/awstats/
        location /classes/ {
                alias /usr/local/awstats/wwwroot/classes/;
        }

        location /css/ {
                alias /usr/local/awstats/wwwroot/css/;
        }

        location /js/ {
                alias /usr/local/awstats/wwwroot/js/;
        }
        location /icon/ {
          alias /usr/local/awstats/wwwroot/icon/;
      }

}

2、常见错误:
页面错误信息:File not found.
检查nginx调用的文件是否有读取权限,例如/usr/local/awstats/wwwroot/下的相关文件Nginx是否有权限读取。未来往事遇到该故障是由于Nginx没有读取/usr/local/awstats/wwwroot/cgi-bin/fcgi.php文件的权限。

页面错误信息:Page not found.
检查Nginx配置文件中是否有参数错误。
备注:为了避免以上两处错误,未来往事建议你把该目录下/usr/local/awstats/wwwroot/使用到的文件复制一份到你Nginx中配置的主机目录中,然后适当的修改下Nginx配置文件中的路径地址即可。

3、状态测试
至此,我们便可以通过如下url方式访问日志统计页面了:
http://slog.fity.cn/cgi-bin/awstats.pl?config=slog.fity.cn
如图:

点击在新窗口中浏览此图片


4、简化URL地址
+阅读全文
第3页 / 共6页 第一页 « 上一页 1 2 3 4 5 6 下一页 » 最后页 [ 显示模式: 摘要 | 列表 ]