如果纯粹比较数字或字符,建议使用switch,因为它只会在一开始的switch括号中取出变量值一次,然后将这个值与下面所设定的case比较,但如果使用if,每次遇到条件式时,都要取出变量值,效率的差异就在这儿。例如:
if(a == 1)
//...
else if(a == 2)
//...
else if(a == 3)
//...
这个程序片段在最差的状况下,也就是a = 3时,共需3次比较,而每次比较都必须取出变量a的值一次。如果换成switch:
switch(a)
{
case 1:
//...
break;
case 2:
//...
break;
case 3:
//...
break;
}
在这个程序片段中,只在开头switch的括号中取出变量a的值,然后逐一比较下面的case,效率的差别就在这儿。当然并不是使用if就不好,遇到复合条件时,switch就帮不上忙了,由于无法在switch中组合复杂的条件语句,这时就得使用if了。简单地说,if与switch两者可以搭配着灵活使用。
if(a == 1)
//...
else if(a == 2)
//...
else if(a == 3)
//...
这个程序片段在最差的状况下,也就是a = 3时,共需3次比较,而每次比较都必须取出变量a的值一次。如果换成switch:
switch(a)
{
case 1:
//...
break;
case 2:
//...
break;
case 3:
//...
break;
}
在这个程序片段中,只在开头switch的括号中取出变量a的值,然后逐一比较下面的case,效率的差别就在这儿。当然并不是使用if就不好,遇到复合条件时,switch就帮不上忙了,由于无法在switch中组合复杂的条件语句,这时就得使用if了。简单地说,if与switch两者可以搭配着灵活使用。
要用FAST-CGI模式,还要用非线程的PHP版本,但是ZEND 还没有NTS的PHP版本,,,唉!
http://forums.iis.net/t/1160823.aspx
zendcore是好东西,在win下,跑fastcgi。但我不是很喜欢这种集成的系统。我用2003跑fastchi,用nts版的5.2.4,运行的很好,但就是装不上ZendOptimizer,甚至把zendcore里面的ZendOptimizer.dll复制过来,把zendcore里面php.ini的[zend]参数复制到系统的php.ini,一样不能正确运行zo。
请问在win2003,iis6下跑fastcgi,用nts版本的php,怎么才能安装zo?
据专家近日评测报道,通过他们的实际测试发现,Windows Server 2008下的web应用程序性能可获得不错的提升。例如Windows Server 2008下通过FastCGI实现的PHP支持,对比Linux操作系统的PHP支持,可获得更快的运行速度。
通过以上图表可以看出,基于Windows Server 2008的PHP性能在用户介于200至3000范围时提升较为明显,但是在用户数达到4000的时候,Linux略有超出。总体而言,Windows Server 2008下的性能更为良好。
这些结果证明了Windows Server 2008的核心服务完全超出了预期,基本上不需要做出调整已经可以满足性能需求。
http://forums.iis.net/t/1160823.aspx
zendcore是好东西,在win下,跑fastcgi。但我不是很喜欢这种集成的系统。我用2003跑fastchi,用nts版的5.2.4,运行的很好,但就是装不上ZendOptimizer,甚至把zendcore里面的ZendOptimizer.dll复制过来,把zendcore里面php.ini的[zend]参数复制到系统的php.ini,一样不能正确运行zo。
请问在win2003,iis6下跑fastcgi,用nts版本的php,怎么才能安装zo?
据专家近日评测报道,通过他们的实际测试发现,Windows Server 2008下的web应用程序性能可获得不错的提升。例如Windows Server 2008下通过FastCGI实现的PHP支持,对比Linux操作系统的PHP支持,可获得更快的运行速度。
通过以上图表可以看出,基于Windows Server 2008的PHP性能在用户介于200至3000范围时提升较为明显,但是在用户数达到4000的时候,Linux略有超出。总体而言,Windows Server 2008下的性能更为良好。
这些结果证明了Windows Server 2008的核心服务完全超出了预期,基本上不需要做出调整已经可以满足性能需求。
我想用DS18B20做一个测温电路,但是DS18B20固有的分辨率是0.5度,怎样用编程的方法使它的分辨率提高到0.1度,DS18B20的最高分辨率为0.065度.
回复:怎样提高DS18B20的精度
18B20最小分辨力是0.0625,把12位用int读出来除以16就行了
回复:怎样提高DS18B20的精度
我现在做的就是显示小数点后1位。
回复:怎样提高DS18B20的精度
哈哈,楼上的朋友把精度与分辨率混为一谈了。
DS18B20的测温精度是0.5度,分辨率是0.0625度。分辨率可以人为改变,测温精度是不能变的。
回复:怎样提高DS18B20的精度
楼上说是对,精度和分辨率是两回事。
但我还是没有看明白楼主的意思
选一款PT100,再选一款仪表,建议宇电的ai-708t
具体应用时标定。或PT100加XTR105加ai-708t那样分辨率更高。如果你们公司有标定环境,就好办。如果没有,那我感觉不太好办。给我的感觉0。1度的精度很高,虽然我们用的分辨率大于0。01度。
还有ai-708有数字标定功能,他们的精度都是0。2或0。5级的,工业环境。
回复:怎样提高DS18B20的精度
18B20最小分辨力是0.0625,把12位用int读出来除以16就行了
回复:怎样提高DS18B20的精度
我现在做的就是显示小数点后1位。
回复:怎样提高DS18B20的精度
哈哈,楼上的朋友把精度与分辨率混为一谈了。
DS18B20的测温精度是0.5度,分辨率是0.0625度。分辨率可以人为改变,测温精度是不能变的。
回复:怎样提高DS18B20的精度
楼上说是对,精度和分辨率是两回事。
但我还是没有看明白楼主的意思
选一款PT100,再选一款仪表,建议宇电的ai-708t
具体应用时标定。或PT100加XTR105加ai-708t那样分辨率更高。如果你们公司有标定环境,就好办。如果没有,那我感觉不太好办。给我的感觉0。1度的精度很高,虽然我们用的分辨率大于0。01度。
还有ai-708有数字标定功能,他们的精度都是0。2或0。5级的,工业环境。
前些日子访问O-blog 首页就看见了了了数字:"谁终将声震人间,必长久深自缄默;谁终将点燃闪电,必长久如云漂泊。就让我们只留下回忆!"。在论坛中管理员风色的答复是:"因为学业上的问题,我得离开一些日子。2.7暂时不开发了,不过如果现在的版本出现 BUG 或者安全漏洞,我会及时给出补丁。谢谢大家关注。O-blog 并没有死亡。 …… 因为离开的时候会比较长,比较长,比较长......"
http://topic.csdn.net/u/20070929/14/b183cd03-d780-4c59-a666-ab127f12f7b1.html
#include <stdio.h>
void sift(int a[], int i, int n)/* i为根节点,n为节点总数 */
{
int child, tmp;
for (tmp = a[i]; n > 2 * i; i = child)
{
child = 2 * i; /* i的左孩子为2*i,右孩子为2*i+1 */
if ((child != n-1) && (a[child+1] > a[child])) /* 让child指向孩子中较大的一个 */
{
child++;
}
if (tmp < a[child])/* 如果孩子节点大 */
{
a[i] = a[child];/* 交换孩子节点和根节点 */
}
else
break;
}
a[i] = tmp; /* 将根放在合适位置 */
}
void heapsort(int a[],int n)/* 对a[1...n]进行排序 */
{
int i, tmp;
for (i = n / 2; i >= 0; i--)/* 建立初始堆 */
{
sift(a, i, n);
}
for (i = n - 1; i > 0; i--)/* 进行n-1趟排序 */
{
tmp = a[0]; /* 交换堆顶元素和最后一个元素 */
a[0] = a[i];
a[i] = tmp;
sift(a, 0, i); /* 将a[1..n-1]重建为堆 */
}
}
int main(int argc, char* argv[])
{
int a[7] = {8,9,3,5,1,6,4};
int i;
heapsort(a, 7);
for (i = 0; i < 7; i++)
printf("%d \n", a[i]);
return 0;
}
#include <stdio.h>
#define PARENT(i) i >> 1
#define LEFT(i) i << 1
#define RIGHT(i) (i << 1) + 1
#define HeapBase 1
long HeapSize = 0;
void Exchange(long* a, long* b)
{
long t = 0;
t = *a;
*a = *b;
*b = t;
}
void MaxHeapify(long* Ary, long i)
{
long l = LEFT(i);
long r = RIGHT(i);
long largest = 0;
if (l <= HeapSize)
{
if (*(Ary + l) > *(Ary + i))
largest = l;
else
largest = i;
}
if (r <= HeapSize)
if (*(Ary + r) > *(Ary + largest)) largest = r;
if ((largest != i) && (largest >= HeapBase) && (largest <= HeapSize))
{
Exchange(Ary + i, Ary + largest);
MaxHeapify(Ary, largest);
}
}
void BuildMaxHeap(long* Ary)
{
long i = 0;
for (i = HeapSize / 2; i >= HeapBase; i--)
{
MaxHeapify(Ary, i);
}
}
//Ary[1..n]
void HeapSort(long* Ary, long dwSize)
{
long i = 0;
HeapSize = dwSize;
BuildMaxHeap(Ary);
for (i = dwSize; i >= HeapBase; i--)
{
Exchange(Ary + HeapBase, Ary + i);
HeapSize--;
MaxHeapify(Ary, HeapBase);
}
}
int main()
{
long a[4] = {0};
a[1] = 2;
a[2] = 1;
a[3] = 8;
HeapSort(a, 3);
printf("%ld\n", a[1]);
printf("%ld\n", a[2]);
printf("%ld\n", a[3]);
return 0;
}
#include <stdio.h>
void sift(int a[], int i, int n)/* i为根节点,n为节点总数 */
{
int child, tmp;
for (tmp = a[i]; n > 2 * i; i = child)
{
child = 2 * i; /* i的左孩子为2*i,右孩子为2*i+1 */
if ((child != n-1) && (a[child+1] > a[child])) /* 让child指向孩子中较大的一个 */
{
child++;
}
if (tmp < a[child])/* 如果孩子节点大 */
{
a[i] = a[child];/* 交换孩子节点和根节点 */
}
else
break;
}
a[i] = tmp; /* 将根放在合适位置 */
}
void heapsort(int a[],int n)/* 对a[1...n]进行排序 */
{
int i, tmp;
for (i = n / 2; i >= 0; i--)/* 建立初始堆 */
{
sift(a, i, n);
}
for (i = n - 1; i > 0; i--)/* 进行n-1趟排序 */
{
tmp = a[0]; /* 交换堆顶元素和最后一个元素 */
a[0] = a[i];
a[i] = tmp;
sift(a, 0, i); /* 将a[1..n-1]重建为堆 */
}
}
int main(int argc, char* argv[])
{
int a[7] = {8,9,3,5,1,6,4};
int i;
heapsort(a, 7);
for (i = 0; i < 7; i++)
printf("%d \n", a[i]);
return 0;
}
#include <stdio.h>
#define PARENT(i) i >> 1
#define LEFT(i) i << 1
#define RIGHT(i) (i << 1) + 1
#define HeapBase 1
long HeapSize = 0;
void Exchange(long* a, long* b)
{
long t = 0;
t = *a;
*a = *b;
*b = t;
}
void MaxHeapify(long* Ary, long i)
{
long l = LEFT(i);
long r = RIGHT(i);
long largest = 0;
if (l <= HeapSize)
{
if (*(Ary + l) > *(Ary + i))
largest = l;
else
largest = i;
}
if (r <= HeapSize)
if (*(Ary + r) > *(Ary + largest)) largest = r;
if ((largest != i) && (largest >= HeapBase) && (largest <= HeapSize))
{
Exchange(Ary + i, Ary + largest);
MaxHeapify(Ary, largest);
}
}
void BuildMaxHeap(long* Ary)
{
long i = 0;
for (i = HeapSize / 2; i >= HeapBase; i--)
{
MaxHeapify(Ary, i);
}
}
//Ary[1..n]
void HeapSort(long* Ary, long dwSize)
{
long i = 0;
HeapSize = dwSize;
BuildMaxHeap(Ary);
for (i = dwSize; i >= HeapBase; i--)
{
Exchange(Ary + HeapBase, Ary + i);
HeapSize--;
MaxHeapify(Ary, HeapBase);
}
}
int main()
{
long a[4] = {0};
a[1] = 2;
a[2] = 1;
a[3] = 8;
HeapSort(a, 3);
printf("%ld\n", a[1]);
printf("%ld\n", a[2]);
printf("%ld\n", a[3]);
return 0;
}
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
)