php经常莫名502问题的解决办法

最近公司在压力测试一个php项目的时候经常会压出大批量的502错误,在网上搜索相关解决方案时看到原来php-fpm可以做进程池进行轮循处理。

具体方法:
1. 使用不同端口或sock启动多个php-fpm主进程

假设使用不同配置文件启动3个使用sock的php-fpm主进程

这3个配置文件*.conf中,唯一不同的是设置pid文件和sock名字,假设为php-cgi.1.sock php-cgi.2.sock php-cgi.3.sock

那么启动之后,就在相应目录出现php-cgi.1.sock php-cgi.2.sock php-cgi.3.sock这3个sock,我是在默认/tmp下

如果你设置的都正常,ps auf是可以看到有3个主进程的

2. 修改Nginx的配置文件以使用进程池模式

在nginx.conf的http段根据实际php-fpm进程情况增加代码:

这样我们就建立了一个可以根据健康状况轮询并可以重试的资源池。

3. 然后呢?

在需要执行php程序的原来代码中,原来代码举例:

或原来这样

修改新的,如下这样即可:

重启Nginx,生效。

4. 注意事项
步骤1中启动的各个php-fpm主进程,只要死不光,nginx就可以正常执行php,也就是说,如果有的异常退出了,基本也不影响网站运行。
步骤2中fastcgi_next_upstream那行的参数,不需要加http_502,实际你也加不上去的,不支持。
步骤3中,原有的每段类似这种location ~ \.php$ {代码都需要对fastcgi_pass这行根据示例改造。
步骤1中的.conf配置文件,每个主线程的children,根据内存情况设置2~n个,据说越多越好,但是内存越用越多。
经过本方案的调整,请注意,你原有的所谓service php-fpm和502监控脚本之类的东西,都需要重新修改,如果你还想用。当然,对技术宅来说,如果操作本方案那是运用自如,消化吸收。

发表在 BS架构后台语言 | 标签为 , | 留下评论

全世界最短IE判定if(!+[1,])的解释

注:随着时间的推移,IE9及以上版本已经修复了该BUG(除非设置成兼容模式),这一点在司徒的原文回复中也已经有人指出了。检测IE的方法有很多种,不一定非得用这种奇淫技巧,作者这里还给出了另一种方法

发表在 Web前台开发技术 | 标签为 | 留下评论

phpcms v9 后台调用单张图片上传功能用于二次开发

phpcms是一个成熟的内容管理系统,由于是通用的cms,不一定能满足每个人的需求,所以二次开发是技术员必需掌握的技能。

phpcms各功能都已经写成了模块或是函数,在二次开发时直接调用相应的模块或函数就能实现自己的功能。所以phpcmsv9也是一个不错的框架,用来开发自己的程序。

phpcmsv9有一个非常好用的图片上传功能,传后直接返回图片的URL并赋值给隐藏的一个表单,用于简化图片上传保存功能。常用的函数是swfupload函数。这个函数调用了FLASH上传插件,能实时显示上传图片的缩略图还能记录上传后未使用的图片列表,方便再次调用。

那后台开发时怎么调用图片上传函数实现上传功能呢?很简单,只需要在相应的位置引用下面的代码就可以了:

swfupload函数分析:首先引用两个必需的js,下面$authkey = upload_key(‘1,jpg|jpeg|gif|png|bmp,1,,,0’);这个变量是加密上传控件的参数,用于上传时安全验证,下面直接引用就可以了。name=”info[images]”是上传图片表单名,请根据自己的需求修改表单名,如果表单名不对后台可能得不到上传图片后的地址。1,jpg|jpeg|gif|png|bmp,1,,,0这个字符串是上传控件的参数,如上传图片后辍列表,上传图片个数等,请自行尝试或分析源码得出具体意义。

 

发表在 CMS相关问题汇聚 | 标签为 | 留下评论

使用X-UA-Compatible来设置IE浏览器兼容模式

文件兼容性用于定义让IE如何编译你的网页。此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式。

前言

为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE8引入了文件兼容性。在IE6中引入一个增设的兼容性模式,文件兼容性使你能够在IE呈现你的网页时选择特定编译模式。
新的IE为了确保网页在未来的版本中都有一支的外观,IE8引入了文件兼容性。当你引入一个增设的兼容性模式,
此文章说明文件兼容性的必要性,列出现有版本IE能使用的文件兼容性模式并示范如何选择特定的兼容性模式。

了解文件兼容性的必要性

每个主要版本IE新增的功能都是为了让浏览器更容易使用、增加安全性及更支持业界标准。以这些作为IE的特色,其中一个风险就是旧版本网站无法正确的显示。

为了将这个风险降到最低,IE6允许网页开发人员选择IE编译和显示他们网页的方式。”Quirks mode”为预设,这会使页面以旧版本浏览器的视点显示,”Standards mode”(也称为”strict mode”)特点是支持业界标准最为完善。然而要利用这个增强的支持功能,网页必须包含恰当的指令。

若一个网页没有包含指令,IE6会将它以quirks mode显示。若网页包含有效的指令但浏览器无法辨识,IE6会将它以IE6 standards mode显示。因为少数网站已经包含指令,兼容性模式的切换相当成功。这使网页开发人员能选择将他们的网页转移为standards mode的最佳时机。

随著时间经过,更多网站开始使用standards mode。它们也开始使用IE6的特性和功能来检测IE。举例来说,IE6不支持universal selector(即css之全局选择器 * {}),一些网站便使用它来针对IE做特定的对应。

当 IE7增加了对全域选择器的支持,那些依赖IE6特点的网站便无法侦测出这个新版本的浏览器。因此那些针对IE的特定对应无法应用于IE7,造成这些网站便无法如他们预期的显示。由于只支持两种兼容性模式,受到影响的网站拥有者被迫更新他们的网站使其能支持IE7。

IE8 比之前的任何版本浏览器都更支持业界标准,因此针对旧版本浏览器设计的网页可能无法如预期般呈现。为了帮助减轻所有问题,IE8引入文件兼容性的概念,使你能选择你的网页设计要对应的特定IE版本。文件兼容性在IE8增加了一些新的模式,这些模式能告诉浏览器如何解析和编译一个网页。若你的网页无法在 ie8正确的显示,你可以更新你的网站使它支持最新的网页标准(优先选项)或在你的页面上新增一个meta元素用于告诉IE8如何依照旧版本浏览器编译你的页面。

这能让你选择将你的网站更新支持IE8新特点的时机。

认识文件兼容性模式

IE8支持几种文件兼容性模式,它们具有不同的特性并影响内容显示的方式。

•Emulate IE8 mode指示IE使用指令来决定如何编译内容。Standards mode指令会显示成IE8 Standards mode而quirks mode会显示成IE5 mode。不同于IE8 mode,Emulate IE8 mode重视指令。
•Emulate IE7 mode指示IE使用指令来决定如何编译内容。Standards mode指令会显示成IE7 Standards mode而quirks mode会显示成IE5 mode。不同于IE7 mode,Emulate IE7 mode重视指令。对于许多网页来说这是最推荐的兼容性模式。
•IE5 mode 编译内容如同IE7的quirks mode之显示状况,和IE5中显示的非常类似。
•IE7 mode编译内容如同IE7的standards mode之显示状况,无论网页是否含有指令。
•IE8 mode提供对业界标准的最高支持,包含 W3C Cascading Style Sheets Level 2.1 Specification和W3C Selectors API,并有限的支持 W3C Cascading Style Sheets Level 3 Specification (Working Draft)。
•Edge mode指示IE以目前可用的最高模式显示内容。当使用IE8时其等同于IE8 mode。若(假定)未来放出支持更高兼容性模式的IE,使用Edge mode的页面会使用该版本能支持的最高模式来显示内容。同样的那些页面在使用IE8浏览时仍会照常显示。

由于edge mode使用该IE版本所能支持的最高模式来显示所浏览的网页内容,建议仅使用于测试页及其他非商用页面。

指定文件兼容性模式

要为你的网页指定文件模式,需要在你的网页中使用meta元素放入X-UA-Compatible http-equiv 标头。以下是指定为Emulate IE7 mode 兼容性之范例。

其内容随著指定的页面模式而更改,当要模拟IE7时,指定IE=EmulateIE7,指定IE=5, IE=7, 或IE=8来选择其中一种兼容性模式。你也可以指定IE=edge来指示IE8使用它支持的最高模式。

X-UA-compatible标头没有大小写之分。然而除了title元素及其他的meta元素之外,它必须出现在网页header节其它元素之前的位置,

设定网站服务器以指定预设兼容性模式

网站管理员可籍着为网站定义一个自订标头来为他们的网站预设一个特定的文件兼容性模式。这个特定的方法取决于你的网站服务器。举例来说,下列的web.config文件使Microsoft Internet Information Services (IIS)能定义一个自订标头以自动使用IE7 mode来编译所有网页。

若你已于网站服务器指定了一个预设的文件兼容性模式,你可以在个别页面上指定不同的文件兼容性模式来盖过它。在网页中指定的模式优先权高于服务器中所指定的模式。

请查阅你的网站服务器关于指定自订标头的资讯,或看更多资料:

Implementing the META Switch on Apache
Implementing the META Switch on IIS

判定文件兼容性模式

要判定网页使用IE8浏览时的文件兼容性模式,使用document object(文档对象)的documentMode功能。例如在IE8的网址列输入下列程式码会显示目前页面的文件模式。

javascript:alert(document.documentMode);
documentMode功能会回传一个数值对应目前页面的文件兼容性模式,举例来说,若网页指定为支持IE8模式,documentMode便会回传值”8″。

在IE6引入的compatMode功能不支持在IE8引入的documentMode功能。目前使用compatMode建立的应用程式还能在IE8中作用,但它们必须更新为使用documentMode。

若你希望使用JavaScript判定一个文件的兼容性模式,引入下面范例的这段程式码可支持旧版本的IE。

认识内容属性值

内容属性值在接收到异于先前叙述的数值时是具有弹性的。这能使你对于IE如何显示你的网页更有操控性。举例来说,你可以设定内容属性值为IE=7.5。当你这样做的时候,IE尝试将这个值转换为version vector并选择最接近的结果。在这个例子中,IE会将其设定为IE7 mode。下面的范例显示该模式设定为其他值的状况。

注意: 前面的范例显示单独的内容值。实际上IE只会执行网页中第一个X-UA-Compatible标头。

你也可以使用内容属性来指定复数的文件兼容性模式,这能帮助确保你的网页在未来的浏览器版本都能一致的显示。欲设定复数的文件模式,请设定内容属性以判别你想使用的模式。使用分号来分开各个模式。

如果一个特定版本的IE支持所要求的兼容性模式多于一种,将採用列于标头内容属性中最高的可用模式。你可以使用这个特性来排除特定的兼容性模式,虽然并不推荐这样做。举例来说,下列标头即会排除IE7 mode。

结论

兼容性对于网页设计师来说是非常重要的顾虑。虽然最好是可以建立一个完全不需依赖任何网页浏览器特性或功能的网站,有时候这是不可能实现的。文件兼容性模式便能将网页限制在某个特定版本的IE中。

使用X-UA-Compatible标头来指定你的页面支持的IE版本。使用document.documentMode判定页面的兼容性模式。

选择支持某个特定版本的IE,你可以确保你的页面在未来的浏览器版本中也能有显示的一致性。

发表在 Web前台开发技术 | 标签为 , | 留下评论

让IE6、IE7、IE8支持CSS3的圆角、阴影样式

想做个页面用到css3的圆角和阴影效果,但ie浏览器不支持,之前也听说有插件可以实现,周六在网上找到了一个方法,原文如下:
但凡是前端工程师,都知道IE6,IE7,IE8不支持、或者不完全支持CSS3的属性。
CSS3 有很多很强大、绚丽的效果,比如,圆角,阴影,渐变透明,渐变背景,等等。
因为IE6时代,没有什么标准,而因为各种原因,IE6用户几乎不会更新IE版本。
让IE6,IE7,IE8支持CSS3效果,有一个思路就是利用 VML 模拟。
VML是The Vector Markup Language(矢量可标记语言),原本是微软自己开发的东西,很强大。
也就是说,IE下面,可以用 VML做出圆角 。半透明、阴影 、渐变背景。
早在去年的时候,就有老外这个思路写成了插件,方便前端程序员开发。。。
它可以让IE6,IE7,IE8 支持 CSS3特效……
之前的 bug 一直有一个严重 bug,今天上去看的时候,官方修正了这个Bug ,并且增加了js 渲染方法(之前是用behavior导入)。

看看如何调用:
1、在你的网页加载 PIE.js 脚本。
注意,用IE专用的注释,防止非IE浏览器下载。

2、用js 调用:

3、已经搞定了。
在让 IE6支持 CSS3 的所有插件中,这个应该是最好的插件了。

官方实时测试例子:http://css3pie.com/
官方下载:http://css3pie.com/download-latest

测试了半天也不行,谁知太大意了,忽略了两点,一是在本地预览无效,得传到服务器环境下,或者本地服务器环境,二是在css里忘记加behavior: url(pie.htc);造成的。

另外附一个快速生成css3属性的小工具,收藏吧,对你有用的:http://www.css88.com/tool/css3Preview/Box-Shadow.html

发表在 Web前台开发技术 | 标签为 , | 留下评论

利用CSS实现垂直翻转/水平翻转来提高web页面资源重用性

一、CSS下兼容性的元素水平/垂直翻转实现

随着现代浏览器对CSS3的支持愈发完善,对于实现各个浏览器兼容的元素的水平翻转或是垂直翻转效果也就成为了可能。相关的CSS代码如下:

其中,就目前而言,对于基于webkit核心的浏览器,如Chrome以及Safari,实现元素的垂直翻转或是水平翻转也可以使用如下样式:

注意:

水平翻转或垂直翻转不同于旋转180度。前者以轴为镜像,后者以点为镜像。
如果是对称元素,旋转180度和翻转的显示效果基本上就是一致的,但是,非对称元素就会看到明显差异。
对于后面提到的目前仅webkit核心浏览器支持的rotateY(180deg),这里有个大写的Y。我们都知道Y表示纵轴,所以我们可能会误以为这里实现的是垂直翻转,其实非也,这里的Y表示元素以纵轴为镜像翻转,也就是水平翻转了。
由于这种水平或是垂直翻转性质的东西基本上类似于镜像拷贝,于是,我们在web制作的时候,一旦遇到对称出现的元素的时候,我们只需要处理一个元素就可以了,然后另外一个直接翻转使用下。例如淘宝首页的这个左右指向的按钮:
2011-05-19_200846[1]

我们非得分别把这两个小按钮图标都放在CSS Sprite里面吗?显然,答案是否定的。例如,我们只处理下朝左指向的小按钮背景图,然后朝右的直接使用水平翻转就ok啦。岂不节约了切图的时间,顺便少了那么一点点图片的东西,同时呢,CSS代码量肯定也减少了——无需对左右两个小按钮分别写hover效果啦!

这光巴拉巴拉唾沫横飞显然不能让人信服,所以,我们来看几个实例的例子吧,看看如何利用水平翻转,或是垂直翻转来提高我们web页面上资源的重用性滴。

二、水平翻转图片重用应用实例

您可以狠狠地点击这里:水平翻转图片重用demo

demo页面中有个不对称的投影图片,分别用在张含韵小姐图片下,以及某段内容标题下,以达到某种卷边效果。我们会发现,这两处的投影图片是不一样的,一个是右下方的投影,还有一个是左下方的投影。如果你遇到这样的设计你怎么办,是分别切出共2张图吗?

既然本文是将翻转的,显然,这里显然不是两张不同的投影图片了,而是同一张,只是其中某一个水平翻转了,如下截图标示:
2011-05-19_203239[1]

前前后后就只调用一张图片,是不是资源得到了重用呢?

相关代码可参见demo,这里就不重复展示了。

注意:由于IE下的元素翻转是使用的filter滤镜,所以,最好应用翻转的图片尺寸不要拉伸,否则,某些情况下,在IE8浏览器中可能会看到让他讨厌的黑色边缘线的。

三、水平翻转元素重用应用实例

淘宝网顶部条条上下拉列表项都有个向下的卡哇伊的小三角,如下图所示:
2011-05-19_204807[1]

鼠标移上去小三角就会转向:
2011-05-19_205330[1]

但是呢,淘宝的做法是让小三角旋转个180度,啧啧啧,这里的小三角幸好是左右对称的,如果是长得类似◢的小三角,就只有望洋兴叹的份了。所以,为了更广泛地适应各类翻转情况,不要去使用180度的旋转了,直接使用翻转,OK,本部分的demo效果虽然与淘宝首页的三角效果有些类似,但是,实现的原理是截然不同的,淘宝的是旋转,而我的demo是翻转。

您可以狠狠地点击这里:水平翻转元素重用demo

你可以看到如下的效果变化(默认 → 鼠标移上去):
2011-05-19_210336[1]2011-05-19_210450[1]

好处啊什么的我就不牛皮了,结语啊什么的也都省了,一切尽在不言中。

发表在 Web前台开发技术 | 标签为 , , | 留下评论

SEO之HTML优化:让你的网站HTML代码更符合SEO规范

1、为什么要进行HTML优化?
我们做SEO,最直接的目的就是想通过搜索引擎获得好的关键词排名和流量,而搜索引擎工作又是依赖它们的“蜘蛛”程序进行的。所谓搜索引擎蜘蛛只是搜索引擎开发的“机器人”程序,简单来说,它的工作原理就是通过对网站的爬行,抓取网站的相关链接、关键词、内容,然后分配网站的权重和相应的搜索引擎排名。而这个过程,大部分工作都是在网站的HTML代码上进行的。所以,通过HTML优化,可以告诉蜘蛛哪些内容是重要的,哪些内容又是可以忽略的,以达到最佳的SEO效果。

SEO之HTML优化

2、符合SEO规范的网站HTML代码标准
在网站制作中,更符合Web 2.0标准的网页无外乎DIV+CSS布局方式了。事实上,网站制作无外乎四个主页面,首页、频道页、栏目页、文章页。下面结合HTML实例为你逐一解析:如何制作标准的HTML网页?HTML优化怎么做?

1)网站首页HTML规范

2)网站频道/栏目页HTML规范

3)网站文章页HTML规范

3、网站HTML优化怎么做?

通过上面的网站HTML代码标准,我们可以总结出一套符合SEO规范的HTML优化方式。

1)H标签的使用,值得注意的是,不论任何页面,h1标签只能出现一次,它是当前页面的主标题,权重最高,对蜘蛛的吸引力是最强的。再往下就是h2、h3、h4、h5、h6这些副标题了,所强调的重点也是递减的,当然,它们的出现频率没有明确限制。

2)strong标签的使用,strong标签对关键词的强调作用仅次于H标签,个人实际布局中会比较在文章内容里出现,用于加粗段落标题或是重点关键词。

3)网站SEO标题、和,这是SEO的重点。很好理解,比如我们利用搜索引擎搜索某个关键词,返回的搜索结果中,都是以标题、描述和变色关键词形式出现的。关于网站关键词,许多SEOer还是有争议,认为已经越来越不被搜索引擎重视了。不过,个人觉得,不要偷懒,加上总是没有坏处。需要注意一点,不论是网站标题还是描述、关键词,都不要堆砌,搞实在点的,否则网站容易被搜索引擎惩罚甚至网站被K,那只能自己去哭吧。

4)<a title=”链接说明” href=”链接地址”>链接关键词</a>,站内丰富的超链接会方便蜘蛛爬行,体现网站的深度和广度,这点在SEO中至关重要。“链接地址”特别是栏目的链接地址,最佳的出现形式应该是http://你的域名/固定链接/。现在,链接的理想结构是以“/”结尾,可以参考小拼SEM博客的链接形式。“链接说明”,一般都是链接的关键词或是关键词相关说明文字,这点可能很多人容易忽视,建议还是写好链接说明,尤其是做外部链接的时候,这么做效果还是很不错的,对网站关键词的搜索引擎排名很有帮助。

5)<img src=”图片链接地址” alt=”图片说明” />,这是针对网页中图片的,当然也可以写成<img title=”图片说明” src=”图片链接地址” alt=”” />。关于图片说明是用alt还是title,之后的文章会和大家探讨的。不过,这个图片说明是肯定要加的,方便搜索引擎知道这张图片描述的内容,也有利于在图片搜索结果中获得一个好的排名。

6)
<div id=”copyright”>版权部分加上网站名称和链接</div>
,网站底部版权部分的权重越来越高了,在版权部分加上网站名称和链接或是强调一些关键词是很有必要的,不要落个头重脚轻的感觉,让搜索引擎感觉很不舒服。

7)HTML优化要富于逻辑,重点明确,层次分明,也是符合SEO精神的。我们甚至可以这样理解HTML优化,其实它就是一篇好的作文,从标题到中心思想,然后是围绕中心展开详细阐述,这里要做到重点突出、层次分明,最后才到结尾,需要点题,做到首尾呼应。

以上就是SEO里HTML优化的所有内容,包括如何制作一个标准的HTML网页,如何做HTML优化。总的来说,就是以SEO的思路去指导你的HTML制作,当然,你的HTML代码应该是符合W3C标准的。如果你已经做到了这些,好的搜索引擎排名并不是什么难事。

发表在 Web前台开发技术, 生活随笔 | 标签为 , | 留下评论

php获取数组中重复数据的方法

利用php提供的函数,array_unique和array_diff_assoc来实现

发表在 BS架构后台语言, Web前台开发技术 | 标签为 , , , | 留下评论

如何在cmd命令行模式下改变编码

chcp 命令:

chcp 65001 就是换成UTF-8代码页

chcp 936 可以换回默认的GBK

chcp 437 是美国英语

cmd.exe的console窗口中正常显示(type命令)UTF8 编码文件中的汉字?

首先切换活动代码页 chcp 65001 (65001是Windows中 UTF-8的代码页);

然后进入窗口属性来修改能显示中文的字体。操作:”属性”->”字体”,将字体修改为True Type字体”Lucida Console”,然后点击[确定], 选择将属性应用到当前窗口。

此时可以type显示UTF-8编码文件中的汉字,但却不能显示GBK编码文件中的汉字了。

如果需要再支持GBK,必须执行 chcp 936 切换回简体中文代码页。

在65001代码页下:

有时显示中文不全,可以先最小化,然后最大化cmd窗口;

dir命令还是能正确显示中文文件名;

不能切换到中文输入法;只能通过从其他地方拷贝中文粘贴过来。但粘贴后,光标显示会错位。

另外,我也大概明白了代码页的含义,应该是指在这个cmd窗口中IO子系统所使用的字符编码。

发表在 操作系统相关 | 标签为 , , | 留下评论

MYSQL添加新用户、为用户创建数据库、为新用户分配权限

1.新建用户

这样就创建了一个名为:zzstudio 密码为:zzstudio 的用户。

2.为用户授权

权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户全部权限。
当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%’表示从任何地址连接。
‘连接口令’不能为空,否则创建失败。

例如:

给来自10.163.225.87的用户zzstudio分配可对数据库vtdc的employee表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123。

给来自10.163.225.87的用户zzstudio分配可对数据库vtdc所有表进行所有操作的权限,并设定口令为123。

给来自10.163.225.87的用户zzstudio分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

给本机用户zzstudio分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

3.删除用户

4.修改指定用户密码

发表在 应用工具软件, 数据库相关技术 | 标签为 , , , | 留下评论