LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。
对于大流量、大并发量的网站系统架构来说,除了硬件上使用高性能的服务器、负载均衡、CDN等之外,在软件架构上需要重点关注下面几个环节:使用高性能的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Databse)、高效率的编程语言等。下面我将从这几点对其一一讨论。
操作系统
Linux操作系统有很多个不同的发行版,如Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS等,每一个发行版都有自己的特色,比如RHEL的稳定,Ubuntu的易用,基于稳定性和性能的考虑,操作系统选择CentOS(Community ENTerprise Operating System)是一个理想的方案。
CentOS(Community ENTerprise Operating System)是Linux发行版之一,是RHEL/Red Hat Enterprise Linux的精简免费版,和RHEL为同样的源代码,不过,RHEL和SUSE LE等企业版,提供的升级服务均是收费升级,无法免费在线升级,因此要求免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用。
LAMP网站架构图
Web服务器、缓存和PHP加速
Apache是LAMP架构最核心的Web Server,开源、稳定、模块丰富是Apache的优势。但Apache的缺点是有些臃肿,内存和CPU开销大,性能上有损耗,不如一些轻量级的Web服务器(例如nginx)高效,轻量级的Web服务器对于静态文件的响应能力来说远高于Apache服务器。
Apache做为Web Server是负载PHP的最佳选择,如果流量很大的话,可以采用nginx来负载非PHP的Web请求。nginx是一个高性能的HTTP和反向代理服务器,Nginx以它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx不支持PHP和CGI等动态语言,但支持负载均衡和容错,可和Apache配合使用,是轻量级的HTTP服务器的首选。
Web服务器的缓存也有多种方案,Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。Squid Cache是一个Web缓存服务器,支持高效的缓存,可以作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,把Squid放在Apache的前端来缓存Web服务器生成的动态内容,而Web应用程序只需要适当地设置页面实效时间即可。如访问量巨大则可考虑使用memcache作为分布式缓存。
PHP的加速使用eAccelerator加速器,eAccelerator是一个自由开放源码PHP加速器,优化和动态内容缓存,提高了性能PHP脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。它还有对脚本起优化作用,以加快其执行效率。使PHP程序代码执效率能提高1-10倍。
具体的解决方案有以下几种:
1、squid + Apache + PHP + eAccelerator
使用Apache负载PHP,使用squid进行缓存,html或图片的请求可以直接由squid返回给用户。很多大型网站都采用这种架构。
2、nginx/Apache + PHP(fastcgi) + eAccelerator
使用nginx或Apache负载PHP,PHP使用fastcgi方式运行,效率较高。
3、nginx + Apache + PHP + eAccelerator
此方案综合了nginx和Apache的优点,使用Apache负载PHP,nginx负责解析其他Web请求,使用nginx的rewrite模块,Apache端口不对外开放。
数据库
开源的数据库中,MySQL在性能、稳定性和功能上是首选,可以达到百万级别的数据存储,网站初期可以将MySQL和Web服务器放在一起,但是当访问量达到一定规模后,应该将MySQL数据库从Web Server上独立出来,在单独的服务器上运行,同时保持Web Server和MySQL服务器的稳定连接。
当数据库访问量达到更大的级别,可以考虑使用MySQL Cluster等数据库集群或者库表散列等解决方案。
总的来说,LAMP架构的网站性能会远远优于Windows IIS + ASP + Access(例如月光博客)这样的网站,可以负载的访问量也非常大,国内的大量个人网站如果想要支撑大访问量,采用LAMP架构是一个不错的方案。
综上所述,基于LAMP架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是Web网络应用和环境的优秀组合。
对于大流量、大并发量的网站系统架构来说,除了硬件上使用高性能的服务器、负载均衡、CDN等之外,在软件架构上需要重点关注下面几个环节:使用高性能的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Databse)、高效率的编程语言等。下面我将从这几点对其一一讨论。
操作系统
Linux操作系统有很多个不同的发行版,如Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS等,每一个发行版都有自己的特色,比如RHEL的稳定,Ubuntu的易用,基于稳定性和性能的考虑,操作系统选择CentOS(Community ENTerprise Operating System)是一个理想的方案。
CentOS(Community ENTerprise Operating System)是Linux发行版之一,是RHEL/Red Hat Enterprise Linux的精简免费版,和RHEL为同样的源代码,不过,RHEL和SUSE LE等企业版,提供的升级服务均是收费升级,无法免费在线升级,因此要求免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用。
LAMP网站架构图
Web服务器、缓存和PHP加速
Apache是LAMP架构最核心的Web Server,开源、稳定、模块丰富是Apache的优势。但Apache的缺点是有些臃肿,内存和CPU开销大,性能上有损耗,不如一些轻量级的Web服务器(例如nginx)高效,轻量级的Web服务器对于静态文件的响应能力来说远高于Apache服务器。
Apache做为Web Server是负载PHP的最佳选择,如果流量很大的话,可以采用nginx来负载非PHP的Web请求。nginx是一个高性能的HTTP和反向代理服务器,Nginx以它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx不支持PHP和CGI等动态语言,但支持负载均衡和容错,可和Apache配合使用,是轻量级的HTTP服务器的首选。
Web服务器的缓存也有多种方案,Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。Squid Cache是一个Web缓存服务器,支持高效的缓存,可以作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,把Squid放在Apache的前端来缓存Web服务器生成的动态内容,而Web应用程序只需要适当地设置页面实效时间即可。如访问量巨大则可考虑使用memcache作为分布式缓存。
PHP的加速使用eAccelerator加速器,eAccelerator是一个自由开放源码PHP加速器,优化和动态内容缓存,提高了性能PHP脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。它还有对脚本起优化作用,以加快其执行效率。使PHP程序代码执效率能提高1-10倍。
具体的解决方案有以下几种:
1、squid + Apache + PHP + eAccelerator
使用Apache负载PHP,使用squid进行缓存,html或图片的请求可以直接由squid返回给用户。很多大型网站都采用这种架构。
2、nginx/Apache + PHP(fastcgi) + eAccelerator
使用nginx或Apache负载PHP,PHP使用fastcgi方式运行,效率较高。
3、nginx + Apache + PHP + eAccelerator
此方案综合了nginx和Apache的优点,使用Apache负载PHP,nginx负责解析其他Web请求,使用nginx的rewrite模块,Apache端口不对外开放。
数据库
开源的数据库中,MySQL在性能、稳定性和功能上是首选,可以达到百万级别的数据存储,网站初期可以将MySQL和Web服务器放在一起,但是当访问量达到一定规模后,应该将MySQL数据库从Web Server上独立出来,在单独的服务器上运行,同时保持Web Server和MySQL服务器的稳定连接。
当数据库访问量达到更大的级别,可以考虑使用MySQL Cluster等数据库集群或者库表散列等解决方案。
总的来说,LAMP架构的网站性能会远远优于Windows IIS + ASP + Access(例如月光博客)这样的网站,可以负载的访问量也非常大,国内的大量个人网站如果想要支撑大访问量,采用LAMP架构是一个不错的方案。
综上所述,基于LAMP架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是Web网络应用和环境的优秀组合。
#AddDefaultCharset GB2312
AddDefaultCharset utf-8
AddDefaultCharset utf-8
現在有另外一隻更方便的程式囉~ 就是下述:
* convmv - convert filenames to utf8 or any other charset
這隻主要是隻 Perl script, 該做 轉換/備份/測試/偵測環境 等等, 都寫的蠻完整的.
convmv 轉換編碼指令
* convmv -f big5 -t utf-8 -r --notest *
* -f big5: 從 Big5 編碼轉換 (不過標準應該是要寫 big5-eten, 但是我測試 big5 也可以動. :P)
* -t utf-8: 轉換編碼到 UTF-8
* -r: 遞迴的將目錄下的所有檔名都做轉換
* --notest: 如果不下這個, 一切動作都只是測試, 會直接將轉換前和轉換後的檔名列給你看, 這加下去, 才會實際轉換檔名.
* *: 所有檔案
其他參數
* --list : 列出所有可用的編碼
* --unescape : 轉換檔名中 %xx 這種 16 進位的編碼 (mv "./a%20x.jpg" "./a x.jpg")
* --lower : 將所有檔名都轉小寫(ex: convmv --lower LOWER.txt)
* --upper : 將所有檔名都轉大寫
* -i : 互動模式, 轉換前會先經過 y/n 確認
* 更多詳細可 man convmv 或 convmv --help, 除此之外, 可以另外再搭配 rename 做些其他應用~ :)
实例:
来源:http://plog.longwin.com.tw/news-unix/2008/07/15/convmv_utf8_big5_convert_linux_2008
* convmv - convert filenames to utf8 or any other charset
這隻主要是隻 Perl script, 該做 轉換/備份/測試/偵測環境 等等, 都寫的蠻完整的.
convmv 轉換編碼指令
* convmv -f big5 -t utf-8 -r --notest *
* -f big5: 從 Big5 編碼轉換 (不過標準應該是要寫 big5-eten, 但是我測試 big5 也可以動. :P)
* -t utf-8: 轉換編碼到 UTF-8
* -r: 遞迴的將目錄下的所有檔名都做轉換
* --notest: 如果不下這個, 一切動作都只是測試, 會直接將轉換前和轉換後的檔名列給你看, 這加下去, 才會實際轉換檔名.
* *: 所有檔案
其他參數
* --list : 列出所有可用的編碼
* --unescape : 轉換檔名中 %xx 這種 16 進位的編碼 (mv "./a%20x.jpg" "./a x.jpg")
* --lower : 將所有檔名都轉小寫(ex: convmv --lower LOWER.txt)
* --upper : 將所有檔名都轉大寫
* -i : 互動模式, 轉換前會先經過 y/n 確認
* 更多詳細可 man convmv 或 convmv --help, 除此之外, 可以另外再搭配 rename 做些其他應用~ :)
实例:
convmv -f gb2312 -t utf-8 -r --notest *
来源:http://plog.longwin.com.tw/news-unix/2008/07/15/convmv_utf8_big5_convert_linux_2008
header.php:
<script type="text/javascript" src="/js/jquery/jquery.js" ></script>
<script type="text/javascript" src="/js/jquery/jquery.webinfo-min.js" ></script>
<script type="text/javascript" src="/js/jquery/jquery.form.js" ></script>
jquerytest.php
<img src="images/grym_32.jpg" class="bt_vote_test" ref_test="test..."></img>
<script >
$('.bt_vote_test').click(function(){dosomething($(this).attr('ref_test'));});
function dosomething(value)
{
alert(value);
}
</script>
<script type="text/javascript" src="/js/jquery/jquery.js" ></script>
<script type="text/javascript" src="/js/jquery/jquery.webinfo-min.js" ></script>
<script type="text/javascript" src="/js/jquery/jquery.form.js" ></script>
jquerytest.php
<img src="images/grym_32.jpg" class="bt_vote_test" ref_test="test..."></img>
<script >
$('.bt_vote_test').click(function(){dosomething($(this).attr('ref_test'));});
function dosomething(value)
{
alert(value);
}
</script>
如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312。对于新手而且是只用GB2312编码的开发人来说,这么做是ok的。阅读全文
转载自:http://www.javaeye.com/topic/5009
Ps:
在onsubmit函数里加上一个documents.write会显不出来的,也就破坏了函数的意意。
众所周知,在表单中加上onsubmit="return false;"可以阻止表单提交。
下面是简单的一小段代码:
java代码:
大家判断像上面的写法,点击submit按钮该表单是否提交?
若答案为是,就不用往下看了。
若答案为否,错了。实际情况是表单正常提交,若想它不提交,应该将
java代码:
改为
java代码:
为何?
原来onsubmit属性就像是<form>这个html对象的一个方法名,其值(一字符串)就是其方法体,默认返回true;
和Java一样,在该方法体中你可以写任意多个语句,包括内置函数和自定义函数,如
java代码:
就相当于
java代码:
这样的话你就覆写了(override)其默认方法(默认返回true)
大家注意到方法体中可以用this这个关键词,这里即代表了<form>的对象实例。
经过这样的分析后,以上情况就不难理解了:
java代码:
这样写,override方法的效果为:
java代码:
在这里submitTest()虽然返回false,但我们只执行了此函数,没有对其结果进行任何处理。而
java代码:
override方法的效果为:
java代码:
Form.prototype.onsubmit = function() {
return submitTest();
};
这样,我们利用到了它的返回值,达到了预期效果。
这样理解的话我想印象会深刻得多,就不易出错了
结论:
我 们可以用Java里的思维方式来思考模拟JavaScript中的类似情况(JavaScript中基于prototype的面向对象技术也确实是这样做 的),但他们毕竟还是有本质上的区别,如Java是强类型的,有严格的语法限制,而JavaScript是松散型的。象上述方法:
java代码:
Form.prototype.onsubmit = function() {
};
既可以有返回值,又可以没有返回值,在Java里是通不过的,毕竟Java里面不能靠方法的返回值不同来重载(overload)方法,而JavaScript中的重载要松散得多.
比如一个页面里有两个form,如下:
<form name="form2" onsubmit="return false">
input name="" type="submit" value="提交" onclick="bian()" />
</form>
两个form里分别有一个type为submit的按扭
如果想按第二个按钮不想提交表单,只想执行bian()方法时,如果不用onsubmit="return false">就达不到效果,就会提交表单了!
而加上后就可以了!!
jquery写法:
function submituserinfocheck()
{
alert("Hello the world...");
if($('#FCollege').val()=="")
{
alert("学校不能为空!");
$('#FCollege').focus();
return false;
}
if($('#FNick').val()=="")
{
alert("昵称不能为空!");
$('#FNick').focus();
return false;
}
return true;
}
再加上:
document.forms[0].onsubmit = function(){
return false;
}
$("form#addForm").submit(function(evt){
return false;
evt.preventDefault();
});
Ps:
在onsubmit函数里加上一个documents.write会显不出来的,也就破坏了函数的意意。
众所周知,在表单中加上onsubmit="return false;"可以阻止表单提交。
下面是简单的一小段代码:
java代码:
<form action="index.jsp" method="post" onsubmit="submitTest();">
<INPUT value="www">
<input type="submit" value="submit">
</form>
<SCRIPT LANGUAGE="JavaScript">
<!--
function submitTest() {
// 一些逻辑判断
return false;
}
//-->
</SCRIPT>
<INPUT value="www">
<input type="submit" value="submit">
</form>
<SCRIPT LANGUAGE="JavaScript">
<!--
function submitTest() {
// 一些逻辑判断
return false;
}
//-->
</SCRIPT>
大家判断像上面的写法,点击submit按钮该表单是否提交?
若答案为是,就不用往下看了。
若答案为否,错了。实际情况是表单正常提交,若想它不提交,应该将
java代码:
<form action="index.jsp" method="post" onsubmit="submitTest();">
改为
java代码:
<form action="index.jsp" method="post" onsubmit="return submitTest();">
为何?
原来onsubmit属性就像是<form>这个html对象的一个方法名,其值(一字符串)就是其方法体,默认返回true;
和Java一样,在该方法体中你可以写任意多个语句,包括内置函数和自定义函数,如
java代码:
onsubmit="
alert('haha'); // 内置函数
submitTest(); // 自定义函数
alert(this.tagName); // 用到了this关键词
......(任意多条语句)
return false;
"
alert('haha'); // 内置函数
submitTest(); // 自定义函数
alert(this.tagName); // 用到了this关键词
......(任意多条语句)
return false;
"
就相当于
java代码:
Form.prototype.onsubmit = function() {
alert('haha'); // 内置函数
submitTest(); // 自定义函数
alert(this.tagName); // 用到了this关键词
......(任意多条语句)
return false;
};
alert('haha'); // 内置函数
submitTest(); // 自定义函数
alert(this.tagName); // 用到了this关键词
......(任意多条语句)
return false;
};
这样的话你就覆写了(override)其默认方法(默认返回true)
大家注意到方法体中可以用this这个关键词,这里即代表了<form>的对象实例。
经过这样的分析后,以上情况就不难理解了:
java代码:
<form action="index.jsp" method="post" onsubmit="submitTest();">
这样写,override方法的效果为:
java代码:
Form.prototype.onsubmit = function() {
submitTest();
};
submitTest();
};
在这里submitTest()虽然返回false,但我们只执行了此函数,没有对其结果进行任何处理。而
java代码:
<form action="index.jsp" method="post" onsubmit="return submitTest();">
override方法的效果为:
java代码:
Form.prototype.onsubmit = function() {
return submitTest();
};
这样,我们利用到了它的返回值,达到了预期效果。
这样理解的话我想印象会深刻得多,就不易出错了
结论:
我 们可以用Java里的思维方式来思考模拟JavaScript中的类似情况(JavaScript中基于prototype的面向对象技术也确实是这样做 的),但他们毕竟还是有本质上的区别,如Java是强类型的,有严格的语法限制,而JavaScript是松散型的。象上述方法:
java代码:
Form.prototype.onsubmit = function() {
};
既可以有返回值,又可以没有返回值,在Java里是通不过的,毕竟Java里面不能靠方法的返回值不同来重载(overload)方法,而JavaScript中的重载要松散得多.
比如一个页面里有两个form,如下:
<form id="form1" name="form1" method="post" action="http://127.0.0.1/">
<input type="submit" name="Submit2" value="提交表单" />
</form>
<input type="submit" name="Submit2" value="提交表单" />
</form>
<form name="form2" onsubmit="return false">
input name="" type="submit" value="提交" onclick="bian()" />
</form>
两个form里分别有一个type为submit的按扭
如果想按第二个按钮不想提交表单,只想执行bian()方法时,如果不用onsubmit="return false">就达不到效果,就会提交表单了!
而加上后就可以了!!
onsubmit="
alert('haha'); // 内置函数
submitTest(); // 自定义函数
alert(this.tagName); // 用到了this关键词
......(任意多条语句)
return false;
"
alert('haha'); // 内置函数
submitTest(); // 自定义函数
alert(this.tagName); // 用到了this关键词
......(任意多条语句)
return false;
"
jquery写法:
function submituserinfocheck()
{
alert("Hello the world...");
if($('#FCollege').val()=="")
{
alert("学校不能为空!");
$('#FCollege').focus();
return false;
}
if($('#FNick').val()=="")
{
alert("昵称不能为空!");
$('#FNick').focus();
return false;
}
return true;
}
再加上:
document.forms[0].onsubmit = function(){
return false;
}
$("form#addForm").submit(function(evt){
return false;
evt.preventDefault();
});
step的:
dc的:
function ChangeMV(vid,width,height,auto)
{
var w,h;
w=147;h=117;
if(width)w=width;
if(height)h=height;
var a=0;
if(auto)a=1;
var v='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+w+'" height="'+h+'"> <param name="movie" value="http://cache.tv.qq.com/qqplayerout.swf" /> <param name="allowFullScreen" value="true" /> <param name="flashvars" value="f=3&vid='+vid+'&auto='+a+'" <param name="wmode" value="transparent" /> <embed type="application/x-shockwave-flash" src="http://cache.tv.qq.com/qqplayerout.swf" width="'+w+'" height="'+h+'" id="flashplayer" quality="high" allowScriptAccess="sameDomain" allowFullScreen="true" flashvars="vid='+vid+'&auto='+a+'" wmode="transparent"></embed> </object>';
return v;
}
{
var w,h;
w=147;h=117;
if(width)w=width;
if(height)h=height;
var a=0;
if(auto)a=1;
var v='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+w+'" height="'+h+'"> <param name="movie" value="http://cache.tv.qq.com/qqplayerout.swf" /> <param name="allowFullScreen" value="true" /> <param name="flashvars" value="f=3&vid='+vid+'&auto='+a+'" <param name="wmode" value="transparent" /> <embed type="application/x-shockwave-flash" src="http://cache.tv.qq.com/qqplayerout.swf" width="'+w+'" height="'+h+'" id="flashplayer" quality="high" allowScriptAccess="sameDomain" allowFullScreen="true" flashvars="vid='+vid+'&auto='+a+'" wmode="transparent"></embed> </object>';
return v;
}
dc的:
function bofang(url)
{
var brodcast = '<object name="wmplayer" classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" type="application/x-oleobject" width=328 height=220 hspace="0" standby="Loading Microsoft Windows Media Player components..." id="NSPlay"> <param name="AutoRewind" value=0> <param name="FileName" value="http://newalto.qq.com/data/'+url+'"> <param name="ShowControls" value="1"> <param name="ShowPositionControls" value="0"> <param name="ShowAudioControls" value="1"> <param name="ShowTracker" value="0"> <param name="ShowDisplay" value="0"> <param name="ShowStatusBar" value="1"> <param name="ShowGotoBar" value="0"> <param name="ShowCaptioning" value="0"> <param name="AutoStart" value="1"> <param name="Volume" value="2000"> <param name="AnimationAtStart" value="0"> <param name="TransparentAtStart" value="0"> <param name="AllowChangeDisplaySize" value="1"> <param name="AllowScan" value="0"> <param name="EnableContextMenu" value="0"> <param name="ClickToPlay" value="0"></object>';
document.getElementById('video_img_panel').innerHTML = brodcast;
}
{
var brodcast = '<object name="wmplayer" classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" type="application/x-oleobject" width=328 height=220 hspace="0" standby="Loading Microsoft Windows Media Player components..." id="NSPlay"> <param name="AutoRewind" value=0> <param name="FileName" value="http://newalto.qq.com/data/'+url+'"> <param name="ShowControls" value="1"> <param name="ShowPositionControls" value="0"> <param name="ShowAudioControls" value="1"> <param name="ShowTracker" value="0"> <param name="ShowDisplay" value="0"> <param name="ShowStatusBar" value="1"> <param name="ShowGotoBar" value="0"> <param name="ShowCaptioning" value="0"> <param name="AutoStart" value="1"> <param name="Volume" value="2000"> <param name="AnimationAtStart" value="0"> <param name="TransparentAtStart" value="0"> <param name="AllowChangeDisplaySize" value="1"> <param name="AllowScan" value="0"> <param name="EnableContextMenu" value="0"> <param name="ClickToPlay" value="0"></object>';
document.getElementById('video_img_panel').innerHTML = brodcast;
}
原名:<<Pro PHP Patterns, Frameworks, Testing and More>>
作者:Kevin MCArthur
出版者: APress,Mar 24,2008。
页数:349页。
------------------------------------------
难度指数:中-高级。阅读全文
作者:Kevin MCArthur
出版者: APress,Mar 24,2008。
页数:349页。
------------------------------------------
难度指数:中-高级。阅读全文
经过二十多年的快速发展, 目前我国已是世界第二大禽肉生产国。然而, 与此地位不相符合的是我国禽肉出口量仅为生产量的3%左右, 典型的生产上的“巨人”和出口上的“矮子”。美国、荷兰、土耳其、澳大利亚等国饲料原料价格较低, 设备先进, 大规模饲养成本比我国低20%~30%。1996年, 欧盟禁止我国禽肉产品进入其市场, 使我国失去了欧盟市场3~4 万吨的冻鸡产品份额; 而日本也一再对中国肉鸡采取歧视性采样检查, 以限制中国廉价肉鸡对其国内的冲击。我国肉鸡产品的年增长率从1996 年的14%陡降为2000 年的4%, 预计再有10~15 年的时间, 中国家禽业便可全部与世界接轨, 而肉鸡业首当其冲; 肉鸡业显然面临极大的挑战, 肉鸡生产中的许多问题亟待解决。阅读全文
RewriteRule ^/con/([a-z]*)/act/([a-z]*)$ /index.php?con=$1&act=$2&%1
用PHP去正则表达式匹配:
erg.php
用PHP去正则表达式匹配:
erg.php
<?php
$str_temp = "/con/user/act/introl";
preg_match("/^\/con\/([a-z]*)\/act\/([a-z]*)$/i", $str_temp, $out);
print_r($out);
?>
$str_temp = "/con/user/act/introl";
preg_match("/^\/con\/([a-z]*)\/act\/([a-z]*)$/i", $str_temp, $out);
print_r($out);
?>
[root@localhost ~]# php erg.php
Array
(
[0] => /con/user/act/introl
[1] => user
[2] => introl
)
Array
(
[0] => /con/user/act/introl
[1] => user
[2] => introl
)
如果是linux这种类unix环境的话:
\! clear
或者试试按ctrl-L
\! clear
或者试试按ctrl-L
echo中输出\n表示换行符并不会被echo解释成换行,而是被当做普通字符输出。你可以使用echo -e来解释转义字符,这样修改后,在echo中使用-e选项解释转义字符,确保了在输出日期之前插入一个换行符。
echo -e "\n$(date "+%Y-%m-%d")" >> /data/www/xxxx/msglog/msglog.txt
@echo off
cls
@echo aaa >>test.txt
@echo ccc >>test.txt
@echo bbb >>test.txt
exit
写入一行后cmd退出:
@echo off
cls
echo 172.25.38.70 phpmyadmin.qq.com >> C:\WINDOWS\system32\drivers\etc\hosts
start "C:\Program Files\Internet Explorer\IEXPLORE.EXE" http://phpmyadmin.qq.com
EXIT
echo -e "\n$(date "+%Y-%m-%d")" >> /data/www/xxxx/msglog/msglog.txt
@echo off
cls
@echo aaa >>test.txt
@echo ccc >>test.txt
@echo bbb >>test.txt
exit
写入一行后cmd退出:
@echo off
cls
echo 172.25.38.70 phpmyadmin.qq.com >> C:\WINDOWS\system32\drivers\etc\hosts
start "C:\Program Files\Internet Explorer\IEXPLORE.EXE" http://phpmyadmin.qq.com
EXIT
jackxiang@Tencent:~/henganxy/htdocs/view> echo $LANG;
zh_CN.UTF-8
显示乱码!!!
root:
如下设置正常显示utf-8中文:
LANG=en_US.ISO8859-1
LC_ALL=en_US.ISO8859-1
LC_CTYPE=en_US.ISO8859-1
EDITOR=vim
TERM=linux
#TERM=xterm
export LANG EDITOR TERM
查看Utf-8字符正常显示:
[/home/jackxiang/henganxy/htdocs/view]# echo $LANG;
en_US.ISO8859-1
secure——CTR设置:
utf-8
解决jackxiang乱码问题:
LANG=en_US.ISO8859-1
export LANG EDITOR TERM
任然有问题,待解决!!!
zh_CN.UTF-8
显示乱码!!!
root:
如下设置正常显示utf-8中文:
LANG=en_US.ISO8859-1
LC_ALL=en_US.ISO8859-1
LC_CTYPE=en_US.ISO8859-1
EDITOR=vim
TERM=linux
#TERM=xterm
export LANG EDITOR TERM
查看Utf-8字符正常显示:
[/home/jackxiang/henganxy/htdocs/view]# echo $LANG;
en_US.ISO8859-1
secure——CTR设置:
utf-8
解决jackxiang乱码问题:
LANG=en_US.ISO8859-1
export LANG EDITOR TERM
任然有问题,待解决!!!
大家都说Nginx比Apache要快,那为什么Nginx的性能要比Apache高得多?这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。 阅读全文
php的引用(就是在变量或者函数、对象等前面加上&符号)
阅读全文
阅读全文