[个人备忘]网页里做异步的跨域请求之iframe无刷新跨域上传文件并获取返回值
Php/Js/Shell/Go jackxiang 2011-12-27 10:14
通常我们会有一个统一的上传接口,这个接口会被其他的服务调用。如果出现不同域,还需要无刷新上传文件,并且获取返回值,这就有点麻烦了。比如,新浪微博启用了新域名www.weibo.com,但接口还是使用原来的域:picupload.t.sina.com.cn。
研究了一下新浪微博的处理方法,这里大概演示一下。
首先是一个正常的上传页面 upload.html
这里有一个关键点是form的target要指向iframe,同时把iframe隐藏起来,这样上传的处理结果就会显示在该iframe里。action里的cb(callback)参数表示处理完成后要跳转的url,因为我们的目标是iframe,所以只会把跳转的页面输出到iframe,而不会让当前页面跳转。
还有一点,callback url要和当前页面同域。跨域的iframe无法调用父页面的内容。【这儿如跨域了怎么办呢?】
再来看看deal.php,也就是form的action
这里可以处理文件,然后入库。操作完成后,把文件的id及其他信息都放在url里,最后跳转到这个url。
最后来看看deal_cd.html,也就是刚刚deal.php跳转到的url,这个文件的内容会填充到页面的iframe里。
b.a.com上的deal.php (这个是请求API的页面,如上传文件的页)
这种方式适用于{www.a.com, a.com, script.a.com, css.a.com}中的任何页面相互通信。这儿的关键在于两个页面都要有设定document.domain =XXX,如果有一个不设定的话,都会报错!!!
备注:某一页面的domain默认等于window.location.hostname。主域名是不带www的域名,例如a.com,主域名前面带前缀的通常都为二级域名或多级域名,例如www.a.com其实是二级域名。 domain只能设置为主域名,不可以在b.a.com中将domain设置为c.a.com。
常规用document.domain+iframe的设置,也就是上面这种方法。
当然还有其他的上传跨域方法:利用iframe和location.hash window.name实现的跨域数据传输 Html5等。
如跨域文件上传解决方案:上传文件到A网站,然后通过PHP的ftp函数、或HTTP模拟上传到B,这样的话返回的json一直是在A网站上的;另外也可以参考一下腾讯的,如果两个网站都是你的,比如你a网站的域名为www.a.com,在B网站同时绑定一个域名upload.www.a.com,就可以直接上传到B网站并返回json数据了,来自:http://www.gosenz.com/blog/Default.aspx?__tencentip=10.16.64.112&__tencentid=1&__tencentrawurl=http://www.gosenz.com/blog/?p=89
以上稍微整理自网上By:jack。
参考:http://blog.leezhong.com/tech/2011/05/06/crossdomain-upload.html
http://developer.51cto.com/art/201102/245701.htm
研究了一下新浪微博的处理方法,这里大概演示一下。
首先是一个正常的上传页面 upload.html
这里有一个关键点是form的target要指向iframe,同时把iframe隐藏起来,这样上传的处理结果就会显示在该iframe里。action里的cb(callback)参数表示处理完成后要跳转的url,因为我们的目标是iframe,所以只会把跳转的页面输出到iframe,而不会让当前页面跳转。
还有一点,callback url要和当前页面同域。跨域的iframe无法调用父页面的内容。【这儿如跨域了怎么办呢?】
再来看看deal.php,也就是form的action
这里可以处理文件,然后入库。操作完成后,把文件的id及其他信息都放在url里,最后跳转到这个url。
最后来看看deal_cd.html,也就是刚刚deal.php跳转到的url,这个文件的内容会填充到页面的iframe里。
b.a.com上的deal.php (这个是请求API的页面,如上传文件的页)
这种方式适用于{www.a.com, a.com, script.a.com, css.a.com}中的任何页面相互通信。这儿的关键在于两个页面都要有设定document.domain =XXX,如果有一个不设定的话,都会报错!!!
备注:某一页面的domain默认等于window.location.hostname。主域名是不带www的域名,例如a.com,主域名前面带前缀的通常都为二级域名或多级域名,例如www.a.com其实是二级域名。 domain只能设置为主域名,不可以在b.a.com中将domain设置为c.a.com。
常规用document.domain+iframe的设置,也就是上面这种方法。
当然还有其他的上传跨域方法:利用iframe和location.hash window.name实现的跨域数据传输 Html5等。
如跨域文件上传解决方案:上传文件到A网站,然后通过PHP的ftp函数、或HTTP模拟上传到B,这样的话返回的json一直是在A网站上的;另外也可以参考一下腾讯的,如果两个网站都是你的,比如你a网站的域名为www.a.com,在B网站同时绑定一个域名upload.www.a.com,就可以直接上传到B网站并返回json数据了,来自:http://www.gosenz.com/blog/Default.aspx?__tencentip=10.16.64.112&__tencentid=1&__tencentrawurl=http://www.gosenz.com/blog/?p=89
以上稍微整理自网上By:jack。
参考:http://blog.leezhong.com/tech/2011/05/06/crossdomain-upload.html
http://developer.51cto.com/art/201102/245701.htm
我们唯有把握更清晰的方向,更努力地工作,任何投机总会要还账的。经济越来越不可控,如果金融危机的进一步延伸爆炸,货币急剧贬值,外部社会动荡,我们会独善其身吗?我们有能力挽救自己吗?我们行驶的航船,员工会像韩国人卖掉金首饰救国家一样,给我们集资买油吗?历史没有终结,繁荣会永恒吗?我们既要有信心,也不要盲目相信未来,历史的灾难,都是我们的前车之鉴。我们对未来的无知是无法解决的问题,但我们可以通过归纳找到方向,并使自己处在合理组织结构及优良的进取状态,以此来预防未来。死亡是会到来的,这是历史规律,我们的责任是应不断延长我们的生命。
千古兴亡多少事,一江春水向东流,流过太平洋,流过印度洋,……不回头。
评论摘录:
没有全国老百姓掏钱的财政巨额补贴,中兴、华为就是一坨屎,都不知道死了多少会了,设备垃圾,管理奴隶化,还把他当神
就算如你说的那样,给你和华为一样的支持,你能把公司办成和华为一样吗?
哪只眼睛看见华为收过财政巨额补贴了......世界最恶毒的人就是你们这种以最卑劣的心去揣度别人的......从里到外泛着恶心
十五年前在深圳打工当时华为操作工月薪三千是人性化管理楷模
为什么总有些人对国内品牌恶意攻击呢?
华为是私企,没有国家的补贴的
中国大陆这么多年来一心埋头于企业,而且真正做大做强了的,也就是任正非先生了,可以说,华为还说他不够优秀,那没有企业敢说自己够优秀,任正非先生说自己还不够优秀,没有哪个企业家敢说自己够优秀,在这个浮躁的社会,一个真正低调行事高度成就的人就是一个大海上的灯塔,可以为众多的同行者照亮前行的路。顺便说一句,华为基本法为我们这个缺乏契约精神的社会做了一个很好的注解。
华为和所有中国民营企业一样,有中国民营企业通病,靠低价和国外的企业竞争和壮大,但依然逃脱不了一样的归宿,中国民营企业的生命周期都是一条抛物线,华为也即将接近顶点,然后就将步入下降的曲线,华为目前在电信市场上已经开始乏力了,所以不得不转去做终端和企业服务。中国民营企业靠的都是一个英雄人物,当英雄逐渐老去,企业也就步入衰落的道路。
我不是华为员工,但在深圳这十几年目睹了华为的成长,任总90年代末已经取得不俗的成绩时,为人就相当低调,拿个纸袋子和普通百姓一样在大街上行走。当时对任总的解读是其对金钱财富的不屑,特别是把公司的股份分给每一位员工。我们从那时起就在模仿,但一直没有勇气真正效仿这样的方法,要知道,这需要多么大的胸怀!今天仔细阅读了任总的这篇文章,并特意注册了邮箱以便发帖,对于我们同样即将步入不惑之年的创业者来说,感受颇多!任总不过是个普通人,和我们一样也懦弱过、退缩过、甚至“心态平和过”,今天我们这等后辈将会从小小的满足感中清醒过来,重新振作,像李云龙那样亮剑,狭路相逢勇者胜!
阅读全文
千古兴亡多少事,一江春水向东流,流过太平洋,流过印度洋,……不回头。
评论摘录:
没有全国老百姓掏钱的财政巨额补贴,中兴、华为就是一坨屎,都不知道死了多少会了,设备垃圾,管理奴隶化,还把他当神
就算如你说的那样,给你和华为一样的支持,你能把公司办成和华为一样吗?
哪只眼睛看见华为收过财政巨额补贴了......世界最恶毒的人就是你们这种以最卑劣的心去揣度别人的......从里到外泛着恶心
十五年前在深圳打工当时华为操作工月薪三千是人性化管理楷模
为什么总有些人对国内品牌恶意攻击呢?
华为是私企,没有国家的补贴的
中国大陆这么多年来一心埋头于企业,而且真正做大做强了的,也就是任正非先生了,可以说,华为还说他不够优秀,那没有企业敢说自己够优秀,任正非先生说自己还不够优秀,没有哪个企业家敢说自己够优秀,在这个浮躁的社会,一个真正低调行事高度成就的人就是一个大海上的灯塔,可以为众多的同行者照亮前行的路。顺便说一句,华为基本法为我们这个缺乏契约精神的社会做了一个很好的注解。
华为和所有中国民营企业一样,有中国民营企业通病,靠低价和国外的企业竞争和壮大,但依然逃脱不了一样的归宿,中国民营企业的生命周期都是一条抛物线,华为也即将接近顶点,然后就将步入下降的曲线,华为目前在电信市场上已经开始乏力了,所以不得不转去做终端和企业服务。中国民营企业靠的都是一个英雄人物,当英雄逐渐老去,企业也就步入衰落的道路。
我不是华为员工,但在深圳这十几年目睹了华为的成长,任总90年代末已经取得不俗的成绩时,为人就相当低调,拿个纸袋子和普通百姓一样在大街上行走。当时对任总的解读是其对金钱财富的不屑,特别是把公司的股份分给每一位员工。我们从那时起就在模仿,但一直没有勇气真正效仿这样的方法,要知道,这需要多么大的胸怀!今天仔细阅读了任总的这篇文章,并特意注册了邮箱以便发帖,对于我们同样即将步入不惑之年的创业者来说,感受颇多!任总不过是个普通人,和我们一样也懦弱过、退缩过、甚至“心态平和过”,今天我们这等后辈将会从小小的满足感中清醒过来,重新振作,像李云龙那样亮剑,狭路相逢勇者胜!
阅读全文
[个人原创]Warning: Invalid argument supplied for foreach 最简单解决方法
Php/Js/Shell/Go jackxiang 2011-12-26 16:00
经常对提交过来的数据进行双重循环,或者如下的for循环,但是数组为空时会报错:
这里的$tstSumOptionArr是由数据库查询出来的,有可能为Null,所以PHP在foreach 一个Null时会报警,而在前面强制一个这个是数组就不会报警了。
否则,你可能会这样来处理,如下:
这里的$tstSumOptionArr是由数据库查询出来的,有可能为Null,所以PHP在foreach 一个Null时会报警,而在前面强制一个这个是数组就不会报警了。
否则,你可能会这样来处理,如下:
我依然记得当我完成学业时,我是多么的天真。那时我深信自己已经准备好进入任何一家软件公司,并开始成为一个顶级的开发人员。显然,开始工作后没多久我就意识到,还有很多事是我所不了解的。
在不断吸取经验的同时,我一直在努力学习那些我从来没有学过的,但却是成为优秀的开发人员所应了解的基本知识。以下是我希望自己能在学校就学到的10件事。阅读全文
在不断吸取经验的同时,我一直在努力学习那些我从来没有学过的,但却是成为优秀的开发人员所应了解的基本知识。以下是我希望自己能在学校就学到的10件事。阅读全文
[经常用到]VI中复制与粘贴基本方法,特别是剪切功能:剪切多行。
Unix/LinuxC技术 jackxiang 2011-12-21 21:09
x:剪切当前字符到剪贴板。
dd :剪切当前光标所在处的行
ndd :剪切当前光标所在处及以下的n行
来自:
http://blog.itpub.net/25836975/viewspace-697911
http://hi.baidu.com/jqorwrlvdwbfqvq/item/7b717ef599abba1dfe3582cc
vim有复制并粘贴的命令,比如
:1, 10 co 20
但是这个命令执行完以后,1-10行仍然存在,我想实现将1-10剪切并粘贴到20行之后,有类似的命令么?一行代码能做到么?
:1,10 m 20
来自:
http://bbs.chinaunix.net/thread-3688477-1-1.html
——————————————————————————————————————
d:剪贴选中的内容到剪贴板。
y:拷贝选中的内容到剪贴板。
c:剪贴选中的内容到剪贴板并且进入插入模式。
我们先做这样一个小小的尝试,请打开浏览器,从网页上随便复制一段文字,然后打开VIM,用VIM,用"p"粘贴一下,你会发现,什么都没有站贴过来,原因是这样的,不同于Windows,VIM具有多个剪贴板,并且和系统剪贴板是完全独立的,所以当你复制浏览器里的文字的时候,这段文字保存在了系统剪贴板,当你是用"p"来粘贴的时候,实际上,他读取的是VIM的剪切板。
那怎么方便的将系统剪贴板的内容复制过来呢?简单!用另外一个快捷方式"Shift+Insert"就可以了,如果你在使用Gvim的话,直接用鼠标中键也可起到相同的作用。是不是很简单?
OK!我们开始进阶!
我们前面说过,VIM具有多个剪切板,目的是为了用户在做较复杂的字符处理的时候,可以更方便的复制粘贴。请现在使用一下":reg"命令(先按 ESC键,退出编辑模式,然后按:进入命令模式,然后输入reg回车),看到了?屏幕上的输出结果!是不是特别眼熟,对了!就是您之前复制过的所有内容!也许这时候您还发现,VIM的剪切板原来有这么多个,按照数字还有符号一个一个的区分开的,这里举一个编号的例子--""5,看到了吗?是以"开头的。还有!有没有看到编号为"+的剪切板?里面的内容是不是刚才你在浏览器里复制的那段文字啊?呵呵……没错了!系统剪切板的编号就是"+。
好了,这时候您已经知道了如何查看之前的所有剪贴板内容,我们现在就试着把某一个特定剪切板的内容复制进我们正在编辑的文件中。我们知道,vi的粘贴指令是"p",但是如果要粘贴一个特定的剪贴板,只是用p就不行了,那怎么办?简单!把剪贴板的编号带上不就可以了?现在先按ESC,退出编辑模式,然后依次按"+p这三个字符(怎么按?不会吧!"和+怎么按?用Shift啊!),好了!你看看,之前在浏览器中复制的这段文本,是不是被粘贴进文档中了? 如何将系统剪切板里的内容复制进VIM当中,您已经清楚了。那如何将ViM中复制的字符粘贴到其他地方呢?很简单,我们只需要把要复制的文字,复制进 "+剪切板不就可以了?("+剪切板是系统剪切板,忘记了?)在VIM中,复制的指令是y(在非编辑模式下按y就可以了),那要将文本复制进指定的剪切板,只需要加上剪切板的编号就可以了。举个例子,我们希望把VIM中的一段文本复制下来,然后粘贴到浏览器的地址栏中:第一步,现把需要复制的文字选中(非编辑模式下),然后在键盘上依次按"+y这三个字符,OK!已经复制下来了,现在用:reg命令看看,是不是在"+剪切板中了? 好了,目前为止,您已经大致掌握了VIM剪切板的基本用法,当然,VIM剪切板的功能还很强大,本文也不能尽数道来,就请您继续发掘吧。
vi中多个文件相互之间的复制、粘贴功能简介!
发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 25次 | 进入软件测试论坛讨论
昨天有人提出此类问题,我特地加以编辑一下,请大家共享,可能写的不好!
大家在vi编辑中,常常遇到想把文件A里面的一行或多行,复制到B文件里面去
(可能很多人不知道怎么办),该怎么做了?
下面是几中方法:
1.如果你有多台机器,而且是联网的,你可以.netterm虚拟终端,telnet登陆主机对A文件进行修改、复制,然后打开B文件粘贴过去!
2.如果是单机,当然要用unix自带的编辑功能呢
先简单介绍一些vi编辑里的命令:
(A).yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名
缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命
令取出
yy 将当前行存入无名缓冲区,用法参看yw
(B).命令如下:a-Z 是缓冲区,也可移出数字1-9指定的删除缓冲区
利用命名缓冲区可很好地保存若干文本段,便于以后存取、移动或者重排。这些缓冲区用a到z字母命名!为了访问这些缓冲区中的一个,要使用双引号
例如:要把一行插入a缓冲区,可键入:
"ayy
为了把这个文本放回该文件中,键入"ap
(c).m做标志命令:
m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,
(参看'命令)
列子:1。将a文件中的4行到b文件中
命令如下:"ay4+
:ex b (转到b文件中)
然后"ap
2. 将a中多行复制到b文件中
先在开始处做标志mk
然后在末尾用"ay'k (光标自动回到开始处,此时已经把你的内容放到缓冲区了)
其中a表示缓冲区a
然后用ex转义到你的文件B中,然后用"ap命令粘贴就行
3。如果你文件中有多次要复制粘贴的话,看下面:
a表示缓冲区a ,你还继续可以使用缓冲b吗
缓冲区有a-z和1-9这么多
缓冲区就好象windows下的煎切版一样,它有好多个,你可以把你想要的复制进去,然后粘贴,只不过你用"ay时候多换a就是了,如你要复制462行用"ay ,复制536行用"by
我编写的不好,恳请斑竹帮我修改和补充,谢谢
来自:http://hi.baidu.com/%B4%FA%CD%F2%BB%D4/blog/item/56d18ddf9eb3d4d58c102969.html
dd :剪切当前光标所在处的行
ndd :剪切当前光标所在处及以下的n行
来自:
http://blog.itpub.net/25836975/viewspace-697911
http://hi.baidu.com/jqorwrlvdwbfqvq/item/7b717ef599abba1dfe3582cc
vim有复制并粘贴的命令,比如
:1, 10 co 20
但是这个命令执行完以后,1-10行仍然存在,我想实现将1-10剪切并粘贴到20行之后,有类似的命令么?一行代码能做到么?
:1,10 m 20
来自:
http://bbs.chinaunix.net/thread-3688477-1-1.html
——————————————————————————————————————
d:剪贴选中的内容到剪贴板。
y:拷贝选中的内容到剪贴板。
c:剪贴选中的内容到剪贴板并且进入插入模式。
我们先做这样一个小小的尝试,请打开浏览器,从网页上随便复制一段文字,然后打开VIM,用VIM,用"p"粘贴一下,你会发现,什么都没有站贴过来,原因是这样的,不同于Windows,VIM具有多个剪贴板,并且和系统剪贴板是完全独立的,所以当你复制浏览器里的文字的时候,这段文字保存在了系统剪贴板,当你是用"p"来粘贴的时候,实际上,他读取的是VIM的剪切板。
那怎么方便的将系统剪贴板的内容复制过来呢?简单!用另外一个快捷方式"Shift+Insert"就可以了,如果你在使用Gvim的话,直接用鼠标中键也可起到相同的作用。是不是很简单?
OK!我们开始进阶!
我们前面说过,VIM具有多个剪切板,目的是为了用户在做较复杂的字符处理的时候,可以更方便的复制粘贴。请现在使用一下":reg"命令(先按 ESC键,退出编辑模式,然后按:进入命令模式,然后输入reg回车),看到了?屏幕上的输出结果!是不是特别眼熟,对了!就是您之前复制过的所有内容!也许这时候您还发现,VIM的剪切板原来有这么多个,按照数字还有符号一个一个的区分开的,这里举一个编号的例子--""5,看到了吗?是以"开头的。还有!有没有看到编号为"+的剪切板?里面的内容是不是刚才你在浏览器里复制的那段文字啊?呵呵……没错了!系统剪切板的编号就是"+。
好了,这时候您已经知道了如何查看之前的所有剪贴板内容,我们现在就试着把某一个特定剪切板的内容复制进我们正在编辑的文件中。我们知道,vi的粘贴指令是"p",但是如果要粘贴一个特定的剪贴板,只是用p就不行了,那怎么办?简单!把剪贴板的编号带上不就可以了?现在先按ESC,退出编辑模式,然后依次按"+p这三个字符(怎么按?不会吧!"和+怎么按?用Shift啊!),好了!你看看,之前在浏览器中复制的这段文本,是不是被粘贴进文档中了? 如何将系统剪切板里的内容复制进VIM当中,您已经清楚了。那如何将ViM中复制的字符粘贴到其他地方呢?很简单,我们只需要把要复制的文字,复制进 "+剪切板不就可以了?("+剪切板是系统剪切板,忘记了?)在VIM中,复制的指令是y(在非编辑模式下按y就可以了),那要将文本复制进指定的剪切板,只需要加上剪切板的编号就可以了。举个例子,我们希望把VIM中的一段文本复制下来,然后粘贴到浏览器的地址栏中:第一步,现把需要复制的文字选中(非编辑模式下),然后在键盘上依次按"+y这三个字符,OK!已经复制下来了,现在用:reg命令看看,是不是在"+剪切板中了? 好了,目前为止,您已经大致掌握了VIM剪切板的基本用法,当然,VIM剪切板的功能还很强大,本文也不能尽数道来,就请您继续发掘吧。
vi中多个文件相互之间的复制、粘贴功能简介!
发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 25次 | 进入软件测试论坛讨论
昨天有人提出此类问题,我特地加以编辑一下,请大家共享,可能写的不好!
大家在vi编辑中,常常遇到想把文件A里面的一行或多行,复制到B文件里面去
(可能很多人不知道怎么办),该怎么做了?
下面是几中方法:
1.如果你有多台机器,而且是联网的,你可以.netterm虚拟终端,telnet登陆主机对A文件进行修改、复制,然后打开B文件粘贴过去!
2.如果是单机,当然要用unix自带的编辑功能呢
先简单介绍一些vi编辑里的命令:
(A).yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名
缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命
令取出
yy 将当前行存入无名缓冲区,用法参看yw
(B).命令如下:a-Z 是缓冲区,也可移出数字1-9指定的删除缓冲区
利用命名缓冲区可很好地保存若干文本段,便于以后存取、移动或者重排。这些缓冲区用a到z字母命名!为了访问这些缓冲区中的一个,要使用双引号
例如:要把一行插入a缓冲区,可键入:
"ayy
为了把这个文本放回该文件中,键入"ap
(c).m做标志命令:
m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,
(参看'命令)
列子:1。将a文件中的4行到b文件中
命令如下:"ay4+
:ex b (转到b文件中)
然后"ap
2. 将a中多行复制到b文件中
先在开始处做标志mk
然后在末尾用"ay'k (光标自动回到开始处,此时已经把你的内容放到缓冲区了)
其中a表示缓冲区a
然后用ex转义到你的文件B中,然后用"ap命令粘贴就行
3。如果你文件中有多次要复制粘贴的话,看下面:
a表示缓冲区a ,你还继续可以使用缓冲b吗
缓冲区有a-z和1-9这么多
缓冲区就好象windows下的煎切版一样,它有好多个,你可以把你想要的复制进去,然后粘贴,只不过你用"ay时候多换a就是了,如你要复制462行用"ay ,复制536行用"by
我编写的不好,恳请斑竹帮我修改和补充,谢谢
来自:http://hi.baidu.com/%B4%FA%CD%F2%BB%D4/blog/item/56d18ddf9eb3d4d58c102969.html
很多同志抱怨再linux发行版下的vim不支持set fileencoding 和 set encoding 这两个非常重要的命令(windows的版本默认是支持的),所以很郁闷。其实原因很简单,因为它需要编译vim是打开multibyte模块,vim的默认编译是没有enable这个模块的,所以只要重新编译vim
./configure –enable-multibyte
make
sudo make install
来处:http://rainx.cn/blog/archives/30
程序员永远的痛之字符编码的奥秘:
字 符编码相信是每个程序员的噩梦,只要是有中文的地方,总是会遇到各种编码的问题,并且这种问题还非常难缠,尤其在linux上,因为上面很多软件都是针对 英语国家开发的,是不会考虑其他语种编码问题。在遇到编码的无数大坑之后,我决定仔细研究下编码问题,因为这就像一道坎一直横在你面前,每次到这里你都会 跌到,每次爬起来之后,你都若无其事,这样的人被称作战士,真正的战士。可惜是个力量战士,做为新时代的智力战士,当然不能在那跌到然后又在这继续跌到。
文件的存储方式:
文件都有自己的存储格式,比如最常见的txt,cpp,h,c,xml ,png, rmvb各种格式,还有自定义格式。这些文件不论是什么格式,都是存储在计算机硬盘里的2进制格存储,对应不同文件格式,有不同的软件解析。这篇文章不谈 文件是如何存储的,只谈文件是如何解析的。
文本文件解析:
文本文件对应于人类可以阅读的文本,如何从2进制转换为文本文件呢?起初由于计算机在美国发明,自然大家考虑的是英语如何表示,英语字母总共26个,加 上特殊字符,128个字符,7位既一个byte即可表示出来。这个就是大家所熟知的ascill编码。对应关系很简单,一个字符对应一一个byte。
但很快发现,其他非英语国家的文字远远超过ascill码,这时候大家当然想统一字符编码,不同国家出了自己不同的编码方式,中国的gb2312就是自 己做出来的编码方式,这样下去每个国家都有自己的编码方式,来回转换太麻烦了。这时候出现了新的编码方式,unicode编码方式,想将编码统一,所以规 定了每个字符对应的unicode码。
1、很多文件都是ascii编码,如果用unicode 太浪费。
2、没有标志位说明该几个字节来解析为一个符号。
这时候拯救世界的utf出现了,utf是unicode的一种实现,只不过更聪明了。utf16是占用两字节,或者四字节,utf32是占用四字节。utf8是很聪明的一种表示方式。
1、对于单字节符号,字节第一位为0,后面7位表示字节编码。
2、对于n字节符号,第一字节的前n位都设为1,第n+1位为0,其余位为编码位置。
对于不同的编码,在文本的最前方有不同的标志,unicode 通常有两位来表示分别是ff fe, 或者feff, fffe表示big-endian 编码feff表示litte-endian编码。utf8是efbbbf来开头的。可以看出来utf-8是自解释的,所以不用带这个标志文件,大多数程序 是可以识别的。但有些程序不能识别这个标志,比如php就会直接把这个标志当文本解析,不会忽略。相信很多遇到php输出文本解析乱码或者解析错误的同学 都遇到这样的问题。
如何解决问题:
如果有vim那最好不过了,去掉命令:
set encoding=utf-8
set nobomb
添加命令:
set encoding=utf-8
set bomb
或者使用notepad++自带的功能
来自:
https://software.intel.com/zh-cn/blogs/2014/02/13/?utm_campaign=CSDN&utm_source=intel.csdn.net&utm_medium=Link&utm_content=others-bianma
./configure –enable-multibyte
make
sudo make install
来处:http://rainx.cn/blog/archives/30
程序员永远的痛之字符编码的奥秘:
字 符编码相信是每个程序员的噩梦,只要是有中文的地方,总是会遇到各种编码的问题,并且这种问题还非常难缠,尤其在linux上,因为上面很多软件都是针对 英语国家开发的,是不会考虑其他语种编码问题。在遇到编码的无数大坑之后,我决定仔细研究下编码问题,因为这就像一道坎一直横在你面前,每次到这里你都会 跌到,每次爬起来之后,你都若无其事,这样的人被称作战士,真正的战士。可惜是个力量战士,做为新时代的智力战士,当然不能在那跌到然后又在这继续跌到。
文件的存储方式:
文件都有自己的存储格式,比如最常见的txt,cpp,h,c,xml ,png, rmvb各种格式,还有自定义格式。这些文件不论是什么格式,都是存储在计算机硬盘里的2进制格存储,对应不同文件格式,有不同的软件解析。这篇文章不谈 文件是如何存储的,只谈文件是如何解析的。
文本文件解析:
文本文件对应于人类可以阅读的文本,如何从2进制转换为文本文件呢?起初由于计算机在美国发明,自然大家考虑的是英语如何表示,英语字母总共26个,加 上特殊字符,128个字符,7位既一个byte即可表示出来。这个就是大家所熟知的ascill编码。对应关系很简单,一个字符对应一一个byte。
但很快发现,其他非英语国家的文字远远超过ascill码,这时候大家当然想统一字符编码,不同国家出了自己不同的编码方式,中国的gb2312就是自 己做出来的编码方式,这样下去每个国家都有自己的编码方式,来回转换太麻烦了。这时候出现了新的编码方式,unicode编码方式,想将编码统一,所以规 定了每个字符对应的unicode码。
1、很多文件都是ascii编码,如果用unicode 太浪费。
2、没有标志位说明该几个字节来解析为一个符号。
这时候拯救世界的utf出现了,utf是unicode的一种实现,只不过更聪明了。utf16是占用两字节,或者四字节,utf32是占用四字节。utf8是很聪明的一种表示方式。
1、对于单字节符号,字节第一位为0,后面7位表示字节编码。
2、对于n字节符号,第一字节的前n位都设为1,第n+1位为0,其余位为编码位置。
对于不同的编码,在文本的最前方有不同的标志,unicode 通常有两位来表示分别是ff fe, 或者feff, fffe表示big-endian 编码feff表示litte-endian编码。utf8是efbbbf来开头的。可以看出来utf-8是自解释的,所以不用带这个标志文件,大多数程序 是可以识别的。但有些程序不能识别这个标志,比如php就会直接把这个标志当文本解析,不会忽略。相信很多遇到php输出文本解析乱码或者解析错误的同学 都遇到这样的问题。
如何解决问题:
如果有vim那最好不过了,去掉命令:
set encoding=utf-8
set nobomb
添加命令:
set encoding=utf-8
set bomb
或者使用notepad++自带的功能
来自:
https://software.intel.com/zh-cn/blogs/2014/02/13/?utm_campaign=CSDN&utm_source=intel.csdn.net&utm_medium=Link&utm_content=others-bianma
忍了一个月,终于有时间筛一遍firefox里面的插件,最后确认是All-in-One Gestures导致firefox错误控制台自动弹出,没完没了,闹心巴拉。
在“工具--附加组件--扩展”里找到后下载,done!
=======
通过逐一排除,已经知道是 FireGesture引起的。可是为什么会这样呢?
在“工具--附加组件--扩展”里找到后下载,done!
=======
通过逐一排除,已经知道是 FireGesture引起的。可是为什么会这样呢?
从SVN导出指定版本号之间修改的文件,某个人在某个版本之间修改的文件
Php/Js/Shell/Go jackxiang 2011-12-14 21:15
当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是局部的,因此更新文件只需更新修改过的文件,其他没有修改过的文件就没有必要上载到服务器。但一个稍微上规模的网站项目,文件是很多的,而且对于团队协作开发更难知道每次修改到哪些文件,这时候SVN的作用发挥出来了。
主要优点:打开导出来的文件,文件夹层次是保留不变的,这样你可以打包上传服务器,然后解压覆盖。不用担心漏传文件,也不用担心会覆盖错文件。
阅读全文
主要优点:打开导出来的文件,文件夹层次是保留不变的,这样你可以打包上传服务器,然后解压覆盖。不用担心漏传文件,也不用担心会覆盖错文件。
阅读全文
数据库容量说明:
Access,单表十万级小型数据库
当单表复杂数据超过 6 万条时,查询速度明显下降
如果优化数据库和优化查询语句,承受能力(并发及速度)可达数十万,甚至超百万
MsSQL2000,单表百万级中型数据库,支持数据库集群
当单表复杂数据超过 50 万条时,查询速度明显下降
如果优化数据库和优化查询语句,承受能力(并发及速度)可达数百万,甚至超千万
MySQL,单表千万级大型数据库,支持数据库集群
SUN公司产品,开源,之所以称大型数据库,是因为在承受能力(并发及速度)方面的出色表现
MsSQL2005,单表千万级大型数据库,支持数据库集群
在2000的基础上,严格了数据库格式,承受能力(主要是速度方面)大跨步提升
MsSQL2008,单表千万级超大型数据库,支持数据库集群
在2005的基础上,严格了数据库格式,承受能力(主要是并发方面)大跨步提升
Oracle,单表千万级超大型数据库,支持数据库集群
甲骨文公司产品,在稳定性和并发方面的表现尤为突出,是当前数据库市场份额最多的一个,号称海量数据库。
另,还有 BD2(IBM公司产品,市场占有率第二),SyBase(SyBase公司产品,老牌数据库,在国内移动电信金融铁路行业使用非常广泛,但现在很多都转向Oracle怀抱),Teradata(沃尔玛等大型超市市场所用)等数据库,因没了解,无法比较。
全球数据库市场份额2008:
Oracle 40%左右,IBM22%左右,Ms20%左右,Teradata10%左右,SyBase10%左右
阅读全文
Access,单表十万级小型数据库
当单表复杂数据超过 6 万条时,查询速度明显下降
如果优化数据库和优化查询语句,承受能力(并发及速度)可达数十万,甚至超百万
MsSQL2000,单表百万级中型数据库,支持数据库集群
当单表复杂数据超过 50 万条时,查询速度明显下降
如果优化数据库和优化查询语句,承受能力(并发及速度)可达数百万,甚至超千万
MySQL,单表千万级大型数据库,支持数据库集群
SUN公司产品,开源,之所以称大型数据库,是因为在承受能力(并发及速度)方面的出色表现
MsSQL2005,单表千万级大型数据库,支持数据库集群
在2000的基础上,严格了数据库格式,承受能力(主要是速度方面)大跨步提升
MsSQL2008,单表千万级超大型数据库,支持数据库集群
在2005的基础上,严格了数据库格式,承受能力(主要是并发方面)大跨步提升
Oracle,单表千万级超大型数据库,支持数据库集群
甲骨文公司产品,在稳定性和并发方面的表现尤为突出,是当前数据库市场份额最多的一个,号称海量数据库。
另,还有 BD2(IBM公司产品,市场占有率第二),SyBase(SyBase公司产品,老牌数据库,在国内移动电信金融铁路行业使用非常广泛,但现在很多都转向Oracle怀抱),Teradata(沃尔玛等大型超市市场所用)等数据库,因没了解,无法比较。
全球数据库市场份额2008:
Oracle 40%左右,IBM22%左右,Ms20%左右,Teradata10%左右,SyBase10%左右
阅读全文
什么是CGI
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
什么是FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI与CGI特点
1、如CGI,FastCGI也具有语言无关性.
2、如CGI, FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。(APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器; 恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。)
3、FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Lighttpd等流行的服务器上也是可用的。
4、如CGI,FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。
FastCGI的工作原理
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
FastCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
上面的数据摘自Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
什么是PHP-CGI
PHP-CGI是PHP自带的FastCGI管理器。
启动PHP-CGI,使用如下命令:
?View Code BASH
1
php-cgi -b 127.0.0.1:9000
PHP-CGI的不足
1、php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启
2、直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)
什么是PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
?View Code BASH
1
2
3
4
5
6
7
8
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件
什么是Spawn-FCGI
Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。而PHP-FPM的出现多少缓解了一些问题,但PHP-FPM有个缺点就是要重新编译,这对于一些已经运行的环境可能有不小的风险(refer),在php 5.3.3中可以直接使用PHP-FPM了。
Spawn-FCGI目前已经独成为一个项目,更加稳定一些,也给很多Web 站点的配置带来便利。已经有不少站点将它与nginx搭配来解决动态网页。
最新的lighttpd也没有包含这一块了(http://www.lighttpd.net/search?q=Spawn-FCGI),但可以在以前版本中找到它。在lighttpd-1.4.15版本中就包含了(http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz)
目前Spawn-FCGI的下载地址是http://redmine.lighttpd.net/projects/spawn-fcgi,最新版本是http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
注:最新的Spawn-FCGI可以到lighttpd.net网站搜索“Spawn-FCGI”找到它的最新版本发布地址
下面我们就可以使用Spawn-FCGI来控制php-CGI的FastCGI进程了
?View Code BASH
1
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-CGI
参数含义如下:
-f 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置
-a 绑定到地址addr
-p 绑定到端口port
-s 绑定到unix socket的路径path
-C 指定产生的FastCGI的进程数,默认为5(仅用于PHP)
-P 指定产生的进程的PID文件路径
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等
PHP-FPM与spawn-CGI对比测试
PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载,无需杀掉进程就可以完成php.ini的修改加载
结果显示使用PHP-FPM可以使php有不小的性能提升。PHP-FPM控制的进程cpu回收的速度比较慢,内存分配的很均匀。
Spawn-FCGI控制的进程CPU下降的很快,而内存分配的比较不均匀。有很多进程似乎未分配到,而另外一些却占用很高。可能是由于进程任务分配的不均匀导致的.而这也导致了总体响应速度的下降。而PHP-FPM合理的分配,导致总体响应的提到以及任务的平均。
PHP-FPM与Spawn-FCGI功能比较
http://php-fpm.org/about/
PHP-FPM、Spawn-FCGI都是守护php-cgi的进程管理器。
参考文档:
http://topic.csdn.net/u/20100216/22/5809e272-6f67-4248-bde9-99deeae5215b.html
http://topic.csdn.net/u/20101015/19/8ae74452-ec6b-448e-9942-21faeb008cd7.html
http://club.topsage.com/thread-768488-1-1.html
http://www.unixaid.info/index.php/productsapp/23-servsf/842-spawn-fcgi
http://www.fastcgi.com/drupal/node/2
http://baike.baidu.com/view/641394.htm
http://baike.baidu.com/view/32614.htm
http://blog.yation.com/network/fastcgi/
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
什么是FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI与CGI特点
1、如CGI,FastCGI也具有语言无关性.
2、如CGI, FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。(APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器; 恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。)
3、FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Lighttpd等流行的服务器上也是可用的。
4、如CGI,FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。
FastCGI的工作原理
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
FastCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
上面的数据摘自Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
什么是PHP-CGI
PHP-CGI是PHP自带的FastCGI管理器。
启动PHP-CGI,使用如下命令:
?View Code BASH
1
php-cgi -b 127.0.0.1:9000
PHP-CGI的不足
1、php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启
2、直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)
什么是PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
?View Code BASH
1
2
3
4
5
6
7
8
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件
什么是Spawn-FCGI
Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。而PHP-FPM的出现多少缓解了一些问题,但PHP-FPM有个缺点就是要重新编译,这对于一些已经运行的环境可能有不小的风险(refer),在php 5.3.3中可以直接使用PHP-FPM了。
Spawn-FCGI目前已经独成为一个项目,更加稳定一些,也给很多Web 站点的配置带来便利。已经有不少站点将它与nginx搭配来解决动态网页。
最新的lighttpd也没有包含这一块了(http://www.lighttpd.net/search?q=Spawn-FCGI),但可以在以前版本中找到它。在lighttpd-1.4.15版本中就包含了(http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz)
目前Spawn-FCGI的下载地址是http://redmine.lighttpd.net/projects/spawn-fcgi,最新版本是http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
注:最新的Spawn-FCGI可以到lighttpd.net网站搜索“Spawn-FCGI”找到它的最新版本发布地址
下面我们就可以使用Spawn-FCGI来控制php-CGI的FastCGI进程了
?View Code BASH
1
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-CGI
参数含义如下:
-f 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置
-a 绑定到地址addr
-p 绑定到端口port
-s 绑定到unix socket的路径path
-C 指定产生的FastCGI的进程数,默认为5(仅用于PHP)
-P 指定产生的进程的PID文件路径
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等
PHP-FPM与spawn-CGI对比测试
PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载,无需杀掉进程就可以完成php.ini的修改加载
结果显示使用PHP-FPM可以使php有不小的性能提升。PHP-FPM控制的进程cpu回收的速度比较慢,内存分配的很均匀。
Spawn-FCGI控制的进程CPU下降的很快,而内存分配的比较不均匀。有很多进程似乎未分配到,而另外一些却占用很高。可能是由于进程任务分配的不均匀导致的.而这也导致了总体响应速度的下降。而PHP-FPM合理的分配,导致总体响应的提到以及任务的平均。
PHP-FPM与Spawn-FCGI功能比较
http://php-fpm.org/about/
PHP-FPM、Spawn-FCGI都是守护php-cgi的进程管理器。
参考文档:
http://topic.csdn.net/u/20100216/22/5809e272-6f67-4248-bde9-99deeae5215b.html
http://topic.csdn.net/u/20101015/19/8ae74452-ec6b-448e-9942-21faeb008cd7.html
http://club.topsage.com/thread-768488-1-1.html
http://www.unixaid.info/index.php/productsapp/23-servsf/842-spawn-fcgi
http://www.fastcgi.com/drupal/node/2
http://baike.baidu.com/view/641394.htm
http://baike.baidu.com/view/32614.htm
http://blog.yation.com/network/fastcgi/
我的4核心开8个进程:
[root@jackxiang conf]# ps aux|grep nginx
root 30054 0.1 0.0 308184 1740 ? Ss 20:44 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
www 30060 3.6 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30062 3.5 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30063 4.1 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30064 3.8 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30065 3.8 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30066 3.5 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30067 4.6 0.4 329396 24180 ? S 20:44 0:00 nginx: worker process
www 30068 4.1 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
——————————————————————————————————————————————————————————————————————————
我的双核cpu开两个进程,为
worker_processes 2;
worker_cpu_affinity 01 10;
若要2核CPU开4进程,那么可以写为:
worker_processes 4;
worker_cpu_affinity 01 10 01 10;
——————————————————————————————————————————————————————————————————————————
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。阅读全文
[root@jackxiang conf]# ps aux|grep nginx
root 30054 0.1 0.0 308184 1740 ? Ss 20:44 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
www 30060 3.6 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30062 3.5 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30063 4.1 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30064 3.8 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30065 3.8 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30066 3.5 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30067 4.6 0.4 329396 24180 ? S 20:44 0:00 nginx: worker process
www 30068 4.1 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
——————————————————————————————————————————————————————————————————————————
我的双核cpu开两个进程,为
worker_processes 2;
worker_cpu_affinity 01 10;
若要2核CPU开4进程,那么可以写为:
worker_processes 4;
worker_cpu_affinity 01 10 01 10;
——————————————————————————————————————————————————————————————————————————
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。阅读全文
看到访问来源中很多都是搜索的数据结构程序,于是乎知道又一批孩子充分利用了搜索引擎为一年一度的课程设计奋斗着,如果各位学弟学妹有幸看到这段话的话,我奉劝大家还是自己多写写程序吧,抄来的终究不是自己的,现在下点功夫会受益终生的。
下面是和题目有关的内容。
css中"点"与"井号"的含义
#对应id
.对应class
不加对应html标签
Class与ID的区别
一个Class是用来根据用户定义的标准对一个或多个元素进行定义的。打个比较恰当的比方就是剧本:一个Class可以定义剧本中每个人物的故事线,你可以通过CSS,Javascript等来使用这个类。因此你可以在一个页面上使用 class="Frodo" ,class="Gandalf",class="Aragorn"来区分不同的故事线。
还有一点非常重要的是你可以在一个文档中使用任意次数的 Class。
至于ID,通常用于定义页面上一个仅出现一次的标记。在对页面排版进行结构化布局时(比如说通常一个页面都是由 一个页眉,一个报头,一个内容区域和一个页脚等组成),一般使用ID比较理想,因为一个ID在一个文档中只能被使用一次。而这些元素在同一页面中很少会出 现大于一次的情况。
归纳成一句话就是:Class可以反复使用而ID在一个页面中仅能被使用一次。有可能在很大部分浏览器中反复使用同一个ID不会出现问题,但在标准上这绝对是错误的使用,而且很可能导致某些浏览器的现实问题。
在实际应用的时候,Class可能对文字的排版等比较有用,而ID则对宏观布局和设计放置各种元素较有用。
如:
最后,你也可以为一个指定的HTML元素应用选择符,把HTML选择符放置在前面就可以了,所以, p.jam { whatever }会应用在有类“jam”的段落上。
下面是和题目有关的内容。
css中"点"与"井号"的含义
#对应id
.对应class
不加对应html标签
Class与ID的区别
一个Class是用来根据用户定义的标准对一个或多个元素进行定义的。打个比较恰当的比方就是剧本:一个Class可以定义剧本中每个人物的故事线,你可以通过CSS,Javascript等来使用这个类。因此你可以在一个页面上使用 class="Frodo" ,class="Gandalf",class="Aragorn"来区分不同的故事线。
还有一点非常重要的是你可以在一个文档中使用任意次数的 Class。
至于ID,通常用于定义页面上一个仅出现一次的标记。在对页面排版进行结构化布局时(比如说通常一个页面都是由 一个页眉,一个报头,一个内容区域和一个页脚等组成),一般使用ID比较理想,因为一个ID在一个文档中只能被使用一次。而这些元素在同一页面中很少会出 现大于一次的情况。
归纳成一句话就是:Class可以反复使用而ID在一个页面中仅能被使用一次。有可能在很大部分浏览器中反复使用同一个ID不会出现问题,但在标准上这绝对是错误的使用,而且很可能导致某些浏览器的现实问题。
在实际应用的时候,Class可能对文字的排版等比较有用,而ID则对宏观布局和设计放置各种元素较有用。
如:
最后,你也可以为一个指定的HTML元素应用选择符,把HTML选择符放置在前面就可以了,所以, p.jam { whatever }会应用在有类“jam”的段落上。
[个人原创]php msg_get_queue创造或附在一个消息队列上,进行简单的队列分发。
Php/Js/Shell/Go jackxiang 2011-12-4 12:06
Jack's Note:
共享内存再顺带提一下消息队列Message Queue(也是在System V IPC函数组中),消息队列似乎可以视为另一种共享内存,只是数据存储的方式有些不同。简单来说,就是每个key对应一个队列,每个队列可以保存多个数据,数据间按照先进先出的原则进行操作。
这个简单的方式,健壮性超过大多的 免费MQ server,限制是只能在Unix下用
Linux编译php时option加上--enable-sysvmsg
PHP编译Configure如下:
出现编译问题如下:
php在make过程中出现“usr bin ld cannot find lltdl”错误,详细错误如下:
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1
在Google上搜了好久,终于找到答案,原来是在编辑php时添加的“–with-mcrypt”选项造成[上面的编译暂时去掉了–with-mcrypt就Ok了]。所以“usr bin ld cannot find lltdl”错误解决办法如下:
1、如果不需要mcrypt,那么编辑php时去掉该选项,然后再make、make install。
2、如果需要mcrypt,那么需要安装libltdl
libltdl在libmcrypt软件包中就有,具体过程:
经过测试,果然去掉“–with-mcrypt”选项编译通过。
send.php
Receive.php
共享内存再顺带提一下消息队列Message Queue(也是在System V IPC函数组中),消息队列似乎可以视为另一种共享内存,只是数据存储的方式有些不同。简单来说,就是每个key对应一个队列,每个队列可以保存多个数据,数据间按照先进先出的原则进行操作。
这个简单的方式,健壮性超过大多的 免费MQ server,限制是只能在Unix下用
Linux编译php时option加上--enable-sysvmsg
PHP编译Configure如下:
出现编译问题如下:
php在make过程中出现“usr bin ld cannot find lltdl”错误,详细错误如下:
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1
在Google上搜了好久,终于找到答案,原来是在编辑php时添加的“–with-mcrypt”选项造成[上面的编译暂时去掉了–with-mcrypt就Ok了]。所以“usr bin ld cannot find lltdl”错误解决办法如下:
1、如果不需要mcrypt,那么编辑php时去掉该选项,然后再make、make install。
2、如果需要mcrypt,那么需要安装libltdl
libltdl在libmcrypt软件包中就有,具体过程:
经过测试,果然去掉“–with-mcrypt”选项编译通过。
send.php
Receive.php