随笔-60  评论-35  文章-15  trackbacks-0
  2008年1月5日
站长工具
  eWebEditor网页编辑器
  FCKEditor在线编辑器
  HTML在线编辑器
  所见即所得CSS编辑器
  CSS整形與最佳化工具

  颜色工具
  配色方案创建工具二
  在线网页配色器

  网络辅助
  超级转贴工具
  易贴网络备忘录
  超级编码转换器

  查询工具
  中国站长站查询工具
  日梭万年历
  世界网络查询工具
  在线电子地图
  全国报纸杂志电子版总汇
  全息在线万年历

  图片工具
  Logo在线制作
  IE版图像处理工具
  图片仓库
  Eoool在线图片制作
  在线生成图片按钮的工具
  在线生成条形码和印章的工具
  字库字体在线工具
  在线按钮制作工具
  多媒体可视化开发系统
  爱狗狗吧在线彩字生成工具
  在线照片相框生成工具

  加密解密
  网页加密解密工具

  计算工具
  多功能计算器

  在线手册
  终极配色手册
  迈至科ASP在线技术手册
  XML官方指南中文版
  Windows API 参考大全
  VBScript 语言参考
  VB API 参考手册
  PHP用户手册
  PHP编码规范
  InnoDB  中文参考手册
  文档对象模型中文手册
  网页制作完全手册
  默认行为中文手册
  样式表滤镜中文手册
  样式表中文手册


转载自:http://www.egil.cn/article.asp?id=333
posted @ 2008-01-05 20:45 Q系列类、方法、变量…… 阅读(331) | 评论 (0)编辑 收藏
  2007年12月18日

  一、AS调用JS方法时出现同名方法查看实例

  AS代码如下:

import flash.external.*;
var v = ExternalInterface.available;
t_btn.onRelease 
= function (){
//调用JS函数
var s = ExternalInterface.call("say","JS函数调用成功!")
//调用AS本地函数
+= say("\n本地函数调用成功!");
r_txt.text 
= s;
}
//AS本地函数
function say(s){
return s;
}  
HTML代码:
//定义一个JS函数
function say(txt){
return txt;
可以看到在JS中定义了一个say方法供AS调用,现在我们在AS中定义了一个同名的say方法来验证它们是否会出现覆盖。结果证明它们不会覆盖,都工作得很好。(PS:不错~)

二、JS调用AS方法时出现同名方法查看实例

  AS代码如下:

//导入包
import flash.external.*;
//提供JS访问的函数名
var _method:String = "say";
//指定本地函数中this变量的作用域,可设置为null留空
var e_area:Object = null;
//AS内部函数名
var method:Function = say;
//将函数注册到容器列表
var wasSuccessful:Boolean = ExternalInterface.addCallback(_method, method);
↑ 这里返回的void因此无法转换为Boolean

//查看注册是否成功
if(wasSuccessful){
result_txt.text 
= "函数注册成功";
}
//本地的函数
function say(txt:String) {
result_txt.text 
= txt;
}

HTML代码如下:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh_cn" lang="zh_cn">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>javascript 调用 flash 方法</title>
<script language="javascript">AC_FL_RunContent = 0;</script>
<script src="AC_RunActiveContent.js" language="javascript"></script>
</head>
<body bgcolor="#ffffff">
<!--影片中使用的 URL-->
<!--影片中使用的文本-->
<!--
<p>你们好</p>
-->
<!-- saved from url=(0013)about:internet -->
    
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="550" height="400" align="middle" id="myFlash">
    
<param name="allowScriptAccess" value="sameDomain" />
    
<param name="allowFullScreen" value="false" />
    
<param name="movie" value="flash读取css.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />    <embed name="myFlash" swLiveConnect="true" src="flash读取css.swf" quality="high" bgcolor="#ffffff" width="550" height="400" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
    
</object>
<SCRIPT LANGUAGE=JavaScript>
var InternetExplorer = navigator.appName.indexOf("Microsoft"!= -1;
function myFlash_DoFSCommand(command, args) {
var myFlashObj = InternetExplorer ? myFlash : document.myFlash;
alert (args);
}
if (navigator.appName && navigator.appName.indexOf("Microsoft"!= -1 && 
navigator.userAgent.indexOf(
"Windows"!= -1 && navigator.userAgent.indexOf("Windows 3.1"== -1) {
document.write('
<SCRIPT LANGUAGE=VBScript\> \n');
document.write('on error resume next \n');
document.write('Sub myFlash_FSCommand(ByVal command, ByVal args)\n');
document.write(' call myFlash_DoFSCommand(command, args)\n');
document.write('end sub\n');
document.write('
</SCRIPT\> \n');

</SCRIPT>

<script>


//定义一个JS本地函数
function say(s){
thisMovie(
"myFlash").say(s);
//↑这里的demo指的是使用Object插入flash的时候指定的id和embed指定的name,例如:id="demo"和name="demo"

alert(s);
}

//浏览器兼容访问DOM,并且将 flash Object返回
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft"!= -1) {
return window[movieName]
}
else {
return document[movieName]
}
}

</script>


<form name="www">
内容:
<input type="text" name="sendText" maxlength="45" onChange="say(this.value)" > 
</form>
</body>
</html>

可以看到在AS中定义了一个say方法供JS调用,现在我们在JS中定义了一个同名的say方法来验证它们是否会出现覆盖。结果证明它们不会覆盖,都工作得很好。(PS:也不错~)

  通过上面的两个例子我们可以得出结论在使用ExternalInterface时即使定义了同名方法,也不会造成方法覆盖,你大可放心使用。



其余
============================================================
 在论坛上经常看见有新手问到“我想让FLASH得到URL中的参数ID号,该怎么办?”“某某视频网站的FLASH播放器是如何播放不同ID的视频的?”...诸如此类问题看到了太多,每次都有一堆回帖,众说纷纭,里面难免有误导性质的回复。今天特结合自己平时工作中使用的心得对此类问题做一个小小的归纳。
  我所指的静态传值是区别于与服务端通信进行值传递的方式,例如LoadVars,XML,Remoting之类,后者暂且不在本文的讨论范围内,当你想让FLASH获取URL中的参数时,你为何不换个角度想了?其实我们可以让服务端动态生成SWF的的插入代码,主动将我们需要的参数“静态”传递给FLASH,FLASH直接用就可以了,根本不需要自己去拿,而以何种形式传递给FLASH,就是我所指的静态传值。我知道的可行的HTML与FLASH之间的静态传值方法有三种:
  • SWF地址后使用参数传递符“?”
  • FlashVars传递
  • JS控制

  下面来具体介绍下这三种方式的传递是如何工作的:
  

一、SWF地址后使用参数传递符“?”

  我们知道,在ULR地址中使用参数传递符“?”可以以GET方式传递参数,例如http://www.v-sky.com?uid=12&uname=vsky,这里使用了参数传递符“?”,同时使用了连接符“&”做为变量分隔标识,以这种规范的格式来传递两个参数:uid=12和uname=vsky,那么服务端可以使用GET方式获取这两个值。
  在FLASH中我们同样可以采用类似的方式来传递参数,HTML页面中插入SWF文件最常用的就是使用Object标签和Embed标签结合的方式,这也是Adobe的推荐方式:
  
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="center">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="demo.swf?uid=12&uname=vsky" />
<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />
<embed src="demo.swf?uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="center" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>



  其中粗体部分对应的就是SWF文件的地址,那么我们可以在这个地址后面通过类似于URL中GET方式传参的方法来个SWF传递参数,例如上面代码在页面完全加载完毕时,它已经给SWF文件写入了两个变量:uid=12和uname=vsky。

  

二、FlashVars传递

  你可以查阅FLASH帮助文档来看FlashVars的官方定义。其实在HTML语法中,这是一个被很多新手所忽视的属性,同样以上面的参数为例,下面用FlashVars来传递变量:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="center">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="demo.swf" />
<param name="FlashVars" value="uid=12&uname=vsky" />
<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />
<embed src="demo.swf" FlashVars="uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="center" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>


  跟方式一相同,它也是直接给FLASH里添加了这两个变量。但我个人推荐使用此方式,结合SWFObject的使用,使用FlashVars来传递变量有很多好处,例如代码清晰,容易管理,浏览其兼容,符合标准。他们的结合使用在“为FLASH程序构造灵活的接口”一文中我已经做了介绍(PS:随后我会提供一个复杂点的、有说服力的实际应用来说明这种灵活接口的使用)。
  

三、JS控制

  对于客户端页面中的资源,JS通过DOM结构来控制它们可以说是随心所欲的,FLASH也不例外,下面是Flash Player的Javascript方法一览表:


Play() —————————————- 播放动画
StopPlay()————————————停止动画
IsPlaying()———————————– 动画是否正在播放
GotoFrame(frame_number)—————- 跳转到某帧
TotalFrames()——————————- 获取动画总帧数
CurrentFrame()——————————回传当前动画所在帧数-1
Rewind()————————————-使动画返回第一帧
SetZoomRect(left,top,right,buttom)——-放大指定区域
Zoom(percent)——————————改变动画大小
Pan(x_position,y_position,unit)————使动画在x,y方向上平移
PercentLoaded()—————————-返回动画被载入的百分比
LoadMovie(level_number,path)———– 加载动画
TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数
TGotoLabel(movie_clip,label_name)—— movie_clip跳转到指定标签
TCurrentFrame(movie_clip)————— 回传movie_clip当前帧-1
TCurrentLabel(movie_clip)—————–回传movie_clip当前标签
TPlay(movie_clip)—————————播放movie_clip
TStopPlay(movie_clip)———————-停止movie_clip的播放
GetVariable(variable_name)—————–获取变量
SetVariable(variable_name,value)———–变量赋值
TCallFrame(movie_clip,frame_number)—call指定帧上的action
TCallLabel(movie_clip,label)—————-call指定标签上的action
TGetProperty(movie_clip,property)——–获取movie_clip的指定属性
TSetProperty(movie_clip,property,number)———-设置movie_clip的指定属性



  在这里我们只需要使用的是粗体标识的SetVariable方法,JS通过调用此方法能够直接更改SWF中的变量值。首先我们需要定义插入的SWF的ID,例如id为VskyDemo,那么我们可以通过下面的JS语句来完成SWF内部变量的设置:

window.document.VskyDemo.SetVariable("uid", 12);


  很简单吧,就是这样的。除非是涉及到了HTML中SWF之外元素跟它交互,否则我一般不使用JS来控制SWF里的变量,因为我总觉得怪怪的,呵呵,个人习惯吧。
  多多实践,不要觉得这些小东西不起眼,小东西多了,聚结到一起了就是一个大的应用。
  条条大路通北京,选择你自己喜欢的,自己认为便捷的方式就可以了,目前我是没有发现这三个方式存在功能上的缺陷。


======================================================================================

前言、JavaScript和Macromedia Flash的通信示例

原文地址: http://www.macromedia.com/support/flash/ts/documents/java_script_comm.htm
说明: 略作修改,主要是一些很初级的操作; 又很多相似的文章,不过这个很权威

下面是一些在Flash和使用Javascript的HTML文件直接通信的示例,每个示例都有简略的步骤

本文讨论了3种基本的Flash/Javascript通信方式:
Javascript 到 Flash的通信----使用Flash播放器的javascript方法
Flash 到 Javascript的通信----使用Flash的fscommand
Flash 到 Flash的通信----------使用本地连接对象或综合上2种技术

并不是所有的浏览器都很重视脚本.为了和Flash播放器通信,浏览器必须有内置的钩子以便Flash播放器可以'监听'.浏览器必须是下列的几种:
Netscape Navigator 3.0-4.7x, 和 Netscape 6.2或更高
(Windows 95/98/NT/2000/XP 或 MacOS; 允许Java和LiveConnect)
Internet Explorer 3.0 或更高
(仅Windows 95/98/NT/2000/XP; 允许ActiveX)

注意:Macintosh上的Internet Explorer和早期版本的Netscape6不支持这种方法.请查看本文的附加信息

一、Javascript到Flash的通信

这个例子演示了如何使用Flash的method把变量从HTML的input text 发送到该页面中的Flash文件中.HTML input的数据通过Flash的SetVariable方法传送到Flash文件中.

查看示例:示例
下载源文件: javascript_to_flash.zip(17k)

步骤:

Flash中
1.新建一个文件,保存为javascript_to_flash.fla
2.用文字工具在舞台上创建一个文本域
3.选择这个文本域,在属性面板中,从下拉列表中选择动态文本(Dynamic Text),在变量(variable)栏填上"myVar"
注意:最好的习惯是使用Instance,用myVar.text更改myVar的值.为了简单起见和兼容Flash4和Flash5,我们使用的是变量名的形式.
4.保存文件
5.发布HTML文件和SWF文件

Dreamweaver中
下一步的工作转移到Dreamweaver中了,当然也可以是其他的HTML编辑器
1.打开上一步发布的HTML文件
2.插入生成的SWF文件和OBJECT/EMBED标签
(1) Insert>Media>Flash,并选择这个Flash
(2) 切换到代码视图,我们需要修改被选中的<OBJECT>和<EMBED>标签
(3) 在OBJECT标签中,插入id="myFlash"

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0" 
 width=366 height=142 id="myFlash">

注意:如果你是粘贴复制代码的话,确保删除不必要的换行.否则可能会引起错误; id也可以在属性面板里直接输入
(4) 在EMBED标签中,插入name="myFlash"和swLiveConnect="true",确保没有使用id属性!代码应当是这样子的:

<embed src="javascript_to_flash.swf" quality=high width=366 height=142
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash"
name="myFlash" swLiveConnect="true">
</embed> 

3.创建表单域
(1) 回到设计视图
(2) 插入文本域(Insert> Form Object> Text Field),如果询问是否添加表单域,选择是
(3) 把文本域的HTML标签修改成这样:

<input type="text" name="sendText" maxlength="45"
onChange="doPassVar(this)">

每当文本域内容发生变化时,onChange就被触发,doPassVar()函数就被调用

4.创建传递变量值的Javascript函数
复制下面的Javascript到<head></head>标签内

<SCRIPT LANGUAGE=JavaScript>
<!--
function doPassVar(args){
var sendText = args.value;
window.document.myFlash.SetVariable("myVar", sendText);
}
//-->
</SCRIPT>

5.保存文件,测试一下(F12)

二、Flash到Javascript的通信

从HTML可以发送数据到Flash,反过来也可以. 这个例子演示了如何应用Flash的Fscommand来发送数据到Javascript.

查看示例:示例2
下载源文件: flash_to_javascript.zip(10K)

简要步骤:
Flash中
新建一个文件,保存为flash_to_javascript.fla
创建一个文本域,设置成输入文本(Input Text),选择"border"以便我们能看到他,指定他的变量为inputVar
创建一个按钮,在按钮上添加如下的as:

on (release) {
fscommand ("send_var", inputVar);
}

保存文件,导出HTML和SWF

Dreamweaver中
1.打开导出HTML文件,修改<OBJECT>和<EMBED>标签,结果同上:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
<embed src="javascript_to_flash.swf" quality=high
width=366 height=142
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash" name="myFlash" swLiveConnect="true">
</embed>

2. 插入如下的Javascript到<Body>标签内:

<SCRIPT LANGUAGE=JavaScript>
<!--
var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
function myFlash_DoFSCommand(command, args) {
   var myFlashObj = InternetExplorer ? myFlash : document.myFlash;
   alert (args);
}
if (navigator.appName && navigator.appName.indexOf("Microsoft")
!= -1 &&
navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows
3.1") == -1) {
document.write('<SCRIPT LANGUAGE=VBScript\> \n');
document.write('on error resume next \n');
document.write('Sub myFlash_FSCommand(ByVal command, ByVal args)\n');
document.write(' call myFlash_DoFSCommand(command, args)\n');
document.write('end sub\n');
document.write('</SCRIPT\> \n');
}
//-->
</SCRIPT> 

三、Flash和Flash的通信

通过上面两种方法的混和使用,同一HTML中两个或者更多的Flash直接可以相互传送消息. 从一个flash使用fscommand传送消息给Javascript,使用Flash的Javascript methods把消息传给另外一个flash

详细的看这里:Flash影片之间的通信示例

从Flash MX开始,local connection对象可以用来在flash之间传送消息. 这使得同一HTML中的或者位于两个浏览器窗口中的两个flash影片可以相互发送消息,而不必使用Javascript或者fscommand
详细的看这里:在Flash MX中使用local connection对象(英文)

本站的localConnection教程:http://www.flashempire.com/school/tutorview.php?id=327

附可控制Flash Player的Javascript方法:
一览表:
Play() ---------------------------------------- 播放动画
StopPlay()------------------------------------停止动画
IsPlaying()----------------------------------- 动画是否正在播放
GotoFrame(frame_number)---------------- 跳转到某帧
TotalFrames()------------------------------- 获取动画总帧数
CurrentFrame()------------------------------回传当前动画所在帧数-1
Rewind()-------------------------------------使动画返回第一帧
SetZoomRect(left,top,right,buttom)-------放大指定区域
Zoom(percent)------------------------------改变动画大小
Pan(x_position,y_position,unit)------------使动画在x,y方向上平移
PercentLoaded()----------------------------返回动画被载入的百分比
LoadMovie(level_number,path)----------- 加载动画
TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数
TGotoLabel(movie_clip,label_name)------ movie_clip跳转到指定标签
TCurrentFrame(movie_clip)--------------- 回传movie_clip当前帧-1
TCurrentLabel(movie_clip)-----------------回传movie_clip当前标签
TPlay(movie_clip)---------------------------播放movie_clip
TStopPlay(movie_clip)----------------------停止movie_clip的播放
GetVariable(variable_name)-----------------获取变量
SetVariable(variable_name,value)-----------变量赋值
TCallFrame(movie_clip,frame_number)---call指定帧上的action
TCallLabel(movie_clip,label)----------------call指定标签上的action
TGetProperty(movie_clip,property)--------获取movie_clip的指定属性
TSetProperty(movie_clip,property,number)-设置movie_clip的指定属


posted @ 2007-12-18 18:00 Q系列类、方法、变量…… 阅读(2920) | 评论 (2)编辑 收藏
  2007年4月13日
alter table admin                #<---- 表名
   add CONSTRAINT `xxid_fk`      #<---- 复合主键名称
      FOREIGN KEY (`xxid`)       #<---- 表字段名
        REFERENCES `club`(`id`)  #<---- 外键表名+字段名
posted @ 2007-04-13 15:15 Q系列类、方法、变量…… 阅读(279) | 评论 (0)编辑 收藏
  2007年1月25日

动态图片新闻,JS实现.


<script language="JavaScript">
var imgUrl=new Array();
var imgLink=new Array();
var imgText=new Array();
var picNum=0;
imgUrl[1]="图片地址一";
imgLink[1]="链接1";
imgText[1]="标题或简介或其它HTML内容1";
imgUrl[2]="图片地址二";
imgLink[2]="链接2";
imgText[2]="标题或简介或其它HTML内容2";
imgUrl[3]="图片地址三";
imgLink[3]="链接3";
imgText[3]="标题或简介或其它HTML内容3";
imgUrl[4]="图片地址四";
imgLink[4]="链接4";
imgText[4]="标题或简介或其它HTML内容4";
imgUrl[5]="图片地址五";
imgLink[5]="链接5";
imgText[5]="标题或简介或其它HTML内容5";


function NextPic(){
    if(picNum<4) picNum++ ;//显示4个图片
    else picNum=1;
    if (document.all){
        //下面注意,如果存在于FORM表单中,需要使用下面的方法,否则可直接使用name。
        document.imgInit.filters.revealTrans.Transition=Math.floor(Math.random()*23);
        document.imgInit.filters.revealTrans.apply();
        document.imgInit.filters.revealTrans.play();
    }
    document.images.imgInit.src=imgUrl[picNum];
    //如果不是图片,而是SWF等,可做判断,内容可在程序中做好,再放于下面。
    focustext.innerHTML='<a href='+imgLink[picNum]+' target=_blank>'+imgText[picNum]+'</a>';
    //设置翻页时间
    theTimer=setTimeout('NextPic()', 3000);
}


function goUrl(){
    window.open(imgLink[picNum],'_blank');
}
</script>


HTML代码中:
可以做到控件中
<TABLE cellPadding=0 width=100% border=0>
        <TR>
          <TD align=middle height="140" >
<div align='center'>
<a href='javascript:goUrl()'><img style="FILTER: revealTrans(duration=2,Transition=5)" src="javascript:NextPic()" width="170" height="120" border="1"  id=imgInit name=imgInit></a></TD></TR>
<TR><TD align=middle height="38" ><div name=focustext id=focustext align='center'></div>
</div>
</TD></TR></TABLE>

posted @ 2007-01-25 15:25 Q系列类、方法、变量…… 阅读(2625) | 评论 (1)编辑 收藏
生活规律34条
1.不说“不可能”。
2.凡事第一反应:找方法,而不是找借口。
3.遇到挫折对自己大声说:太棒了!
4.不说消极的话,不落入消极情绪,一旦出现立即正面处理。
5.凡事先订立目标,并且尽量制作“梦想版”。
6.凡事预先作计划,尽量将目标视觉化。
7.每一分,每一秒都做有用的事情。
8.随时用零碎的时间(如等人、排队等)做零碎的小活。
9.守时。
10.不要太依靠脑袋记忆,好脑子不如烂笔头。
11.随时记录灵感。
12.把重要的观念、方法写下来,并贴起来,随时提示自己。
13.走路比平时快30%。走路时,脚尖稍用力推进;肢体语言健康有力,不懒散、萎靡。
14.每天出门照镜子,给自己一个自信的笑容。
15.每天自我反省一次。
16.每天坚持一次运动。
17.听心跳1分钟(在做重要事前、疲劳时、心情烦躁时、紧张时)。
18.开会坐在前排。
19.微笑。
20.用心倾听,不打断对方说话。
21.说话时,声音有力。感觉自己声音似乎能产生有感染力的磁场。
22.说话之前,先考虑一下对方的感受。
23.每天有意识、真诚地赞美别人3次以上。
24.及时写感谢卡,哪怕是用便笺写。
25.不用训斥、指责的口吻跟别人说话。
26.控制自己,遇事第一反应是不要为自己辩解。
27.每天多做一件“分外事”。
28.不管任何方面,每天必须至少做一次“进步一点点”。
29.每天提前15分钟上班,推迟30分钟下班。
30.每天在下班前用5分钟的时间做一天的整理性工作。
31.定期存钱。
32.节俭。
33.时常运用“头脑风暴”。
34.恪守诚信,说到做到。
posted @ 2007-01-25 15:24 Q系列类、方法、变量…… 阅读(277) | 评论 (0)编辑 收藏

Apache服务器的设置文件位于/usr/local/apache/conf/目录下,传统上使用三个配置文件httpd.conf,access.conf和srm.conf,来配置Apache服务器的行为。

    httpd.conf提供了最基本的服务器配置,是对守护程序httpd如何运行的技术描述;srm.conf是服务器的资源映射文件,告诉服务器各种文件的MIME类型,以及如何支持这些文件;access.conf用于配置服务器的访问权限,控制不同用户和计算机的访问限制;这三个配置文件控制着服务器的各个方面的特性,因此为了正常运行服务器便需要设置好这三个文件。

  除了这三个设置文件之外,Apache还使用mime.types文件用于标识不同文件
对应的MIME类型, magic文件设置不同MIME类型文件的一些特殊标识,使得 Apache 服务器从文档后缀不能判断出文件的MIME 类型时,能通过文件内容中的这些特殊标记来判断文档的MIME类型。

bash-2.02$ ls -l /usr/local/apache/conf
total 100
-rw-r--r-- 1 root wheel 348 Apr 16 16:01 access.conf
-rw-r--r-- 1 root wheel 348 Feb 13 13:33 access.conf.default
-rw-r--r-- 1 root wheel 30331 May 26 08:55 httpd.conf
-rw-r--r-- 1 root wheel 29953 Feb 13 13:33 httpd.conf.default
-rw-r--r-- 1 root wheel 12441 Apr 19 15:42 magic
-rw-r--r-- 1 root wheel 12441 Feb 13 13:33 magic.default
-rw-r--r-- 1 root wheel 7334 Feb 13 13:33 mime.types
-rw-r--r-- 1 root wheel 383 May 13 17:01 srm.conf
-rw-r--r-- 1 root wheel 357 Feb 13 13:33 srm.conf.default

  事实上当前版本的Apache将原来httpd.conf、srm.conf与access.conf中的所有配置参数均放在了一个配置文件 httpd.conf中,只是为了与以前的版本兼容的原因(使用这三个设置文件的方式来源于NCSA-httpd),才使用三个配置文件。而提供的 access.conf和srm.conf文件中没有具体的设置。

  由于在新版本的Apache中,所有的设置都被放在了httpd.conf中,因此只需要调整这个文件中的设置。以下使用缺省提供的httpd.conf为例,解释Apache服
务器的各个设置选项。然而不必因为它提供设置的参数太多而烦恼,基本上这些
参数都很明确,也可以不加改动运行Apache服务器。但如果需要调整Apache服务
器的性能,以及增加对某种特性的支持,就需要了解这些设置参数的含义。

  关于Apache服务器的性能,在Internet上存在很大的争议,基本上使用Apache的使用者几乎都不怀疑它的优秀性能,Apache也支撑了很多著名的高负载的网站,但是在商业机构的评测中,Apache往往得分不高。很多人指出,在这些评测中,商业Web服务器及其操作系统往往由其专业公司的工程师进行过性能调整,而Free 的操作系统和Web服务器往往就使用其缺省配置或仅仅作很小的更改。需要指出的是,除了操作系统的性能调整之外,Apache 服务器本身的缺省配置绝不是最优化和最高效的,而是要适应几乎所有种类操作系统、所有种类硬件下的设置,多平台的软件不可能为特定平台和特定硬件提供最优化的缺省配置。因此要使用Apache的时候,性能调整是必不可少的。

  在商业评测中忽略了的另一个事实是,评测时往往对不同种类的功能进行比
较,例如使用Apache的标准CGI 的性能与ISAPI,NSAPI等服务器端API比较,事实上Apache服务器与此可以比较的功能为modperl ,FastCGI,与ASP类似的功能为PHP等等,只不过由于Apache的开放模式,这些功能是由独立的开发组,作为独立的模块来实现的。但是在评测中,测试人员没有加入相应的模块评测其性能。

HTTP守护进程的运行参数

  httpd.conf中首先定义了一些httpd守护进程运行时需要的参数,来决定其运行方式和运行环境。

  ServerType standalone
  ServerType定义服务器的启动方式,缺省值为独立方式standalone,httpd
服务器将由其本身启动,并驻留在主机中监视连接请求。在Linux下将在启动文件 /etc/rc.d/rc.local/init.d/apache中自动启动Web服务器,这种方式是推荐设置。
  启动Apache服务器的另一种方式是inet方式,使用超级服务器inetd监视连接请求并启动服务器。当需要使用inetd启动方式时,便需要更改为这个设置,并屏蔽/etc/rc.d/rc.local/init.d/apache文件,以及更改/etc/inetd.conf并重起 inetd,那么Apache就能从inetd中启动了。
  两种方式的区别是独立方式是由服务器自身管理自己的启动进程,这样在启
动时能立即启动服务器的多个副本,每个副本都驻留在内存中,一有连接请求不需要生成子进程就可以立即进行处理,对于客户浏览器的请求反应更快,性能较
高。而 inetd方式要由inetd发现有连接请求后才去启动http服务器,由于inetd 要监听太多的端口,因此反应较慢、效率较低,但节约了没有连接请求时Web服务器占用的资源。因此inetd方式只用于偶尔被访问并且不要求访问速度的服务器上。事实上inetd方式不适合http的突发和多连接的特性,因为一个页面可能包含多个图象,而每个图象都会引起一个连接请求,即使虽然访问人数造成教少,但瞬间的连接请求并不少,这就受到inetd性能的限制,甚至会影响由inetd启动的其他服务器程序。

  ServerRoot "/usr/local"
  ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将
进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对
路径,那么真实路径就位于这个ServerRoot定义的路径之下。
  由于httpd会经常进行并发的文件操作,就需要使用加锁的方式来保证文件操作不冲突,由于NFS文件系统在文件加锁方面能力有限,因此这个目录应该是本地磁盘文件系统,而不应该使用NFS文件系统。

  #LockFile /var/run/httpd.lock
  LockFile参数指定了httpd守护进程的加锁文件,一般不需要设置这个参数, Apache服务器将自动在ServerRoot下面的路径中进行操作。但如果ServerRoot为NFS文件系统,便需要使用这个参数指定本地文件系统中的路径。

  PidFile /var/run/httpd.pid
  PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最初启动的进程,它为其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFILE定义的文件中就记录httpd父进程的进程号。

  ScoreBoardFile /var/run/httpd.scoreboard
  httpd使用ScoreBoardFile来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apache服务器,这时每个Apache服务器都需要独立的设置文件htt pd.conf,并使用不同的ScoreBoardFile。

  #ResourceConfig conf/srm.conf
  #AccessConfig conf/access.conf
  这两个参数ResourceConfig和AccessConfig,就用于和使用 srm.conf 和 access.conf 设置文件的老版本Apache兼容。如果没有兼容的需要,可以将对应的设置文件指定为/dev/null,这将表示不存在其他设置文件,而仅使用 httpd.conf 一个文件来保存所有的设置选项。

  Timeout 300
  Timeout定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后服务器将断开与客户机的连接。

  KeepAlive On
  在HTTP 1.0中,一次连接只能作传输一次HTTP请求,而KeepAlive参数用于支持HTTP 1.1版本的一次连接、多次传输功能,这样就可以在一次连接中传递多个HTTP请求。虽然只有较新的浏览器才支持这个功能,但还是打开使用这个选项。

  MaxKeepAliveRequests 100
  MaxKeepAliveRequests为一次连接可以进行的HTTP请求的最大请求次数。将
其值设为0将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。

  KeepAliveTimeout 15
  KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,如果服务器
已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了
这个参数设置的值之后,服务器就断开连接。

  MinSpareServers 5MaxSpareServers 10
  在使用子进程处理HTTP请求的Web服务器上,由于要首先生成子进程才能处理客户的请求,因此反应时间就有一点延迟。但是,Apache服务器使用了一个特殊技术来摆脱这个问题,这就是预先生成多个空余的子进程驻留在系统中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。在运行中随着客户请求的增多,启动的子进程会随之增多,但这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。但是空余的子进程副本不能光增加不减少,太多的空余子进程没有处理任务,也占用服务器的处理能力,因此也要限制空余副本的数量,使其保持一个合适的数量,使得既能及时回应客户请求,又能减少不必要的进程数量。
  因此就可以使用参数MinSpareServers来设置最少的空余子进程数量, 以及
使用参数MaxSpareServers 来限制最多的空闲子进程数量,多余的服务器进程副
本就会退出。根据服务器的实际情况来进行设置,如果服务器性能较高,并且也
被频繁访问,就应该增大这两个参数的设置。对于高负载的专业网站,这两个值
应该大致相同,并且等同于系统支持的最多服务器副本数量,也减少不必要的副
本退出。

  StartServers 5
  StartServers参数就是用来设置httpd启动时启动的子进程副本数量,这个参数与上面定义的MinSpareServers和 MaxSpareServers参数相关,都是用于启动空闲子进程以提高服务器的反应速度的。这个参数应该设置为前两个值之间的一个数值,小于 MinSpareServers和大于MaxS pareServers都没有意义。

  MaxClients 150
  在另一方面,服务器的能力毕竟是有限的,不可能同时处理无限多的连接请
求,因此参数Maxclient s就用于规定服务器支持的最多并发访问的客户数,如果这个值设置得过大,系统在繁忙时不得不在过多的进程之间进行切换来为太多的客户进行服务,这样对每个客户的反应就会减慢,并降低了整体的效率。如果这个值设置的较小,那么系统繁忙时就会拒绝一些客户的连接请求。当服务器性能较高时,就可以适当增加这个值的设置。对于专业网站,应该使用提高服务器效率的策略,因此这个参数不能超过硬件本身的限制,如果频繁出现拒绝访问现象,就说明需要升级服务器硬件了。对于非专业网站,不太在意对客户浏览器的反应速度,或者认为反应速度较慢也比拒绝连接好,就也可以略微超过硬件条件来设置这个参数。
  这个参数限制了MinSpareServers和MaxSpareServers的设置,它们不应该大
于这个参数的设置。

  MaxRequestsPerChild 30
  使用子进程的方式提供服务的Web服务,常用的方式是一个子进程为一次连接服务,这样造成的问题就是每次连接都需要生成、退出子进程的系统操作,使得这些额外的处理过程占据了计算机的大量处理能力。因此最好的方式是一个子进程可以为多次连接请求服务,这样就不需要这些生成、退出进程的系统消耗, Apache就采用了这样的方式,一次连接结束后,子进程并不退出,而是停留在系统中等待下一次服务请求,这样就极大的提高了性能。
  但由于在处理过程中子进程要不断的申请和释放内存,次数多了就会造成一
些内存垃圾,就会影响系统的稳定性,并且影响系统资源的有效利用。因此在一个副本处理过一定次数的请求之后,就可以让这个子进程副本退出,再从原始的
httpd进程中重新复制一个干净的副本,这样就能提高系统的稳定性。这样,每
个子进程处理服务请求次数由MaxRe questPerChild定义。 缺省的设置值为30,
这个值对于具备高稳定性特点的Linux系统来讲是过于保守的设置,可以设置为1000甚至更高,设置为0支持每个副本进行无限次的服务处理。

  #Listen 3000
  #Listen 12.34.56.78:80
  #BindAddress *
  Listen参数可以指定服务器除了监视标准的80端口之外,还监视其他端口的
HTTP请求。由于FreeBSD系统可以同时拥有多个IP地址,因此也可以指定服务器只听取对某个BindAddress< /B>的IP地址的HTTP请求。如果没有配置这一项,则服务器会回应对所有IP的请求。
  即使使用了BindAddress参数,使得服务器只回应对一个IP地址的请求,但是通过使用扩展的Listen参数,仍然可以让HTTP守护进程回应对其他IP地址的请求。此时Listen参数的用法与上面的第二个例子相同。这种比较复杂的用法主要用于设置虚拟主机。此后可以用 VirtualHost参数定义对不同IP的虚拟主机,然而这种用法是较早的HTTP 1.0标准中设置虚拟主机的方法,每针对一个虚拟主机就需要一个IP地址,实际上用处并不大。在HTTP 1.1中,增加了对单IP地址多域名的虚拟主机的支持,使得虚拟主机的设置具备更大的意义。

LoadModule mime_magic_module libexec/apache/mod_mime_magic.so
LoadModule info_module libexec/apache/mod_info.so
LoadModule speling_module libexec/apache/mod_speling.so
LoadModule proxy_module libexec/apache/libproxy.so
LoadModule rewrite_module libexec/apache/mod_rewrite.so
LoadModule anon_auth_module libexec/apache/mod_auth_anon.so
LoadModule db_auth_module libexec/apache/mod_auth_db.so
LoadModule digest_module libexec/apache/mod_digest.so
LoadModule cern_meta_module libexec/apache/mod_cern_meta.so
LoadModule expires_module libexec/apache/mod_expires.so
LoadModule headers_module libexec/apache/mod_headers.so
LoadModule usertrack_module libexec/apache/mod_usertrack.so
LoadModule unique_id_module libexec/apache/mod_unique_id.so

ClearModuleList
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_mime_magic.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
AddModule mod_speling.c
AddModule mod_userdir.c
AddModule mod_proxy.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_auth_anon.c
AddModule mod_auth_db.c
AddModule mod_digest.c
AddModule mod_cern_meta.c
AddModule mod_expires.c
AddModule mod_headers.c
AddModule mod_usertrack.c
AddModule mod_unique_id.c
AddModule mod_so.c
AddModule mod_setenvif.c

Apache服务器的一个重要特性就是其模块化的结构,这不但表现为其能在编
译时能通过新的模块加入新的功能,还表现为其模块可以动态加载入http服务程
序中,而不必载入不需要的模块。使用Apache的动态加载模块只需要设置好Load Module和AddModule参数就可以了,这种特性就是Apache的 DSO(Dynamic Shared Object)特性,然而要想充分使用DSO特性仍然不是一个简单的事情,不适当的改动这里的设置就可能造成服务器不能正常启动。因此如果不是要增加或减少服务器提供的功能,就不要改动这里的设置。

  上面这些列表就显示了Linux下的缺省Apache服务器支持的模块,事实上很
多模块是没有必要的,不必要模块不会被载入内存。模块可以静态连接到Apache 服务器内部,也可以这样动态加载,将Apache的特性都编译成动态可加载模块是该Port的做法,而不是Apache的缺省做法,这样就以牺牲很小的性能的同时,带来极大的灵活性。

  因而动态可加载的能力还是对性能有轻微的影响,因此可以重新编译Apache,将自己所需要的功能编译进Apache 服务器内部,可以让系统显得更为干净,效率也有轻微的提高。通常仅仅为了这一个目的就重新编译Apache是没有必要的,如果需要增加其他特性而重新编译 Apache,不妨在增加其他模块的同时将所有的模块都静态连接入Apache 服务器。有的使用者更喜欢动态加载模块,那么也不妨全部都使用动态加载模块。

  这些模块都被放置到/usr/local/apache/libexec/目录下,每个模块对应Apache服务器的一个特性。详细解释每个模块的功能需要相当多的篇幅,其中比较重要的特性将在后面相应的地方中进行解释,而具体每个模块的功能及用法就需要查看Apache的文档。

  #ExtendedStatus On
  Apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,打开这个
ExtendedStatus 参数可以让服务器报告更全面的运行状态信息。


主服务器设置

  Apache服务器需要各种设置,以定义自己使用各种参数以提供Web服务。对于使用虚拟主机的情况,除了在虚拟主机的定义项中覆盖的设置之外(有的设置必须重新定义),这里的设置也是虚拟主机的缺省设置。

  Port 80
  Port定义了Standalone模式下httpd守护进程使用的端口,标准端口是80。这个选项只对于以独立方式启动的服务器才有效,对于以inetd方式启动的服务器则在inetd.conf中定义使用哪个端口。

  在Unix下使用80端口需要root权限,一些管理员为了安全的原因,认为 httpd 服务器不可能没有安全漏洞,因而更愿意使用普通用户的权限来启动服务器,这样就不能使用80端口及其他小于1024的端口,而必须使用大于 1024的端口来启动httpd,一般情况下8000或8080也是常用的端口。而Apache httpd服务器本身可以在以root权限打开80端口后再改变为普通用户身份进行运行,这样就减少了危险性,因而就不需要考虑这个安全问题。但是如果普通用户也想安装配置自己的WWW服务器,那么就不得不使用大于1024的端口。

  User nobody
  Group nogroup
  User和Group配置是Apache的安全保证,Apache在打开端口之后,就将其本身设置为这两个选项设置的用户和组权限进行运行,这样就降低了服务器的危险性。这个选项也只用于 Standalone模式,inetd模式在inetd.conf中指定运行Apache的用户。由于服务器必须执行改变身份的setuid()操作,因此初始进程应该具备root权限,如果是使用非root用户来启动Aapche,这个配置就不会发挥作用。
  缺省设置为nobody和nogroup,这个用户和组在系统中不拥有文件,保证了服务器本身和由它启动的CGI 进程没有权限更改文件系统。在某些情况下,例如为了运行CGI与Unix交互,也需要让服务器来访问服务器上的文件,如果仍然使用nobody和 nogroup,那么系统中将会出现属于nobody的文件,这对于系统安全是不利的,因为其他程序也会以nobody和nogroup的权限执行某些操作,就有可能访问这些nobody拥有的文件,造成安全问题。一般情况下要为Web服务设定一个特定的用户和组,同时在这里更改用户和组设置。

  ServerAdmin you@your.address
  配置文件中应该改变的也许只有ServerAdmin,这一项用于配置WWW服务器的管理员的email地址,这将在HTTP服务出现错误的条件下返回给浏览器,以便让Web使用者和管理员联系,报告错误。习惯上使用服务器上的webmaster作为WWW服务器的管理员,通过邮件服务器的别名机制,将发送到webmaster 的电子邮件发送给真正的Web管理员。

  #ServerName new.host.name
  缺省情况下,并不需要指定这个ServerName参数,服务器将自动通过名字解
析过程来获得自己的名字,但如果服务器的名字解析有问题(通常为反向解析不
正确),或者没有正式的DNS名字,也可以在这里指定IP地址。当ServerName设
置不正确的时候,服务器不能正常启动。
  通常一个Web服务器可以具有多个名字,客户浏览器可以使用所有这些名字或IP地址来访问这台服务器,但在没有定义虚拟主机的情况下,服务器总是以自己的正式名字回应浏览器。ServerName就定义了Web服务器自己承认的正式名字,例如一台服务器名字(在DNS中定义了A类型)为 exmaple.org.cn,同时为了方便记忆还定义了一个别名(CNAME记录)为www.exmaple.org.cn,那么Apache自动解析得到的名字就为example.org.cn,这样不管客户浏览器使用哪个名字发送请求,服务器总是告诉客户程序自己为 example.org.cn。虽然这一般并不会造成什么问题,但是考虑到某一天服务器可能迁移到其他计算机上,而只想通过更改DNS中的www别名配置就完成迁移任务,所以不想让客户在其书签中使用 Linux 记录下这个服务器的地址,就必须使用ServerName来重新指定服务器的正式名字。

  DocumentRoot "/www/"
  DocumentRoot定义这个服务器对外发布的超文本文档存放的路径,客户程序请求的UR L就被映射为这个目录下的网页文件。这个目录下的子目录,以及使用
符号连接指出的文件和目录都能被浏览器访问,只是要在URL上使用同样的相对目录名。

  注意,符号连接虽然逻辑上位于根文档目录之下,但实际上可以位于计算机
上的任意目录中,因此可以使客户程序能访问那些根文档目录之外的目录,这在
增加了灵活性的同时但减少了安全性。Apache在目录的访问控制中提供了 FollowSymLinks选项来打开或关闭支持符号连接的特性。

Options FollowSymLinks
AllowOverride None
  Apache服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两
种方式来实现,一个是在设置文件 httpd.conf(或access.conf)中针对每个目
录进行设置,另一个方法是在每个目录下设置访问控制文件,通常访问控制文件
名字为.htaccess。虽然使用这两个方式都能用于控制浏览器的访问,然而使用配置文件的方法要求每次改动后重新启动httpd守护进程,比较不灵活,因此主要用于配置服务器系统的整体安全控制策略,而使用每个目录下的.htaccess文件设置具体目录的访问控制更为灵活方便。
  Directory语句就是用来定义目录的访问限制的,这里可以看出它的标准语法,为一个目录定义访问限制。上例的这个设置是针对系统的根目录进行的,设置了允许符号连接的选项FollowSymLinks ,以及使用AllowOverride None表示不允许这个目录下的访问控制文件来改变这里进行的配置,这也意味着不用查看这个目录下的相应访问控制文件。
  由于Apache对一个目录的访问控制设置是能够被下一级目录继承的,因此对
根目录的设置将影响到它的下级目录。注意由于AllowOverride None的设置,使
得Apache服务器不需要查看根目录下的访问控制文件,也不需要查看以下各级目
录下的访问控制文件,直至httpd.conf(或access.conf )中为某个目录指定了
允许Alloworride,即允许查看访问控制文件。由于Apache对目录访问控制是采用的继承方式,如果从根目录就允许查看访问控制文件,那么 Apache就必须一级一级的查看访问控制文件,对系统性能会造成影响。而缺省关闭了根目录的这个特性,就使得Apache从httpd.conf中具体指定的目录向下搜寻,减少了搜寻的级数,增加了系统性能。因此对于系统根目录设置AllowOverride None不但对于系统安全有帮助,也有益于系统性能。

Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
  这里定义的是系统对外发布文档的目录的访问设置,设置不同的 AllowOverride选项,以定义配置文件中的目录设置和用户目录下的安全控制文件的关系,而Options选项用于定义该目录的特性。
  配置文件和每个目录下的访问控制文件都可以设置访问限制,设置文件是由
管理员设置的,而每个目录下的访问控制文件是由目录的属主设置的,因此管理
员可以规定目录的属主是否能覆盖系统在设置文件中的设置,这就需要使用 啊AllowOverride参数进行设置,通常可以设置的值为:
AllowOverride的设置 对每个目录访问控制文件作用的影响
All 缺省值,使访问控制文件可以覆盖系统配置
None 服务器忽略访问控制文件的设置
Options 允许访问控制文件中可以使用Options参数定义目录的选项
FileInfo 允许访问控制文件中可以使用AddType等参数设置
AuthConfig 允许访问控制文件使用AuthName,AuthType等针对每个用户的认证机制,这使目录属主能用口令和用户名来保护目录 Limit 允许对访问目录的客户机的IP地址和名字进行限制
  每个目录具备一定属性,可以使用Options来控制这个目录下的一些访问特性设置,以下为常用的特性选项:

Options设置 服务器特性设置
All 所有的目录特性都有效,这是缺省状态
None 所有的目录特性都无效
FollowSymLinks 允许使用符号连接,这将使浏览器有可能访问文档根目录 (DocumentRoot)之外的文档 SymLinksIfOwnerMatch 只有符号连接的目的与符号连接本身为同一用户所拥有时,才允许访问,这个设置将增加一些安全性
ExecCGI 允许这个目录下可以执行CGI程序 Indexes 允许浏览器可以生成这个目录下所有文件的索引,使得在这个目录下没有index.html(或其他索引文件)时,能向浏览器发送这个目录下的文件列表
 此外,上例中还使用了Order、Allow、Deny等参数,这是Limit语句中用来根据浏览器的域名和 IP地址来控制访问的一种方式。其中Order定义处理Allow和Deny的顺序,而Allow、Deny则针对名字或IP进行访问控制设置,上例使用 allowfrom all,表示允许所有的客户机访问这个目录,而不进行任何限制。

  UserDir public_html
  当在一台Linux上运行Apache服务器时,这台计算机上的所有用户都可以有自己的网页路径,形如 http://example.org.cn/~user,使用波浪符号?..褂肈ISABLED作 UserDir的参数即可。

#
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#
# Order allow,deny
# Allow from all
#
#
# Order deny,allow
# Deny from all
#
#

  这里可以看到Directory的另一个用法,即可以通过简单的模式匹配方法,针对分布在不同目录下的子目录定义访问控制权限。这样设置就需要Apache服务器对每个路径进行额外的处理,因此就会降低服务器的性能,所以缺省情况并没有打开这种访问限制。

  这里可以看到另外一个语句Limit,Limit语句就是用来针对具体的请求方法来设定访问控制的,其中可以使用GET、POST等各种服务器支持的请求方法做Lim
it的参数,来设定对不同请求方法的访问限制。一般可以打开对GET、POST、 HEAD三种请求方法,而屏蔽其他的请求方法,以增加安全性。Limit语句中,可以用Order 、Allow、Deny,Allow和Deny中可以使用匹配的方法针对域名和IP进行限制,只是对于域名是从后向前匹配,对于IP地址则从前向后匹配。

  DirectoryIndex index.html
  很多情况下,URL中并没有指定文档的名字,而只是给出了一个目录名。那么Apache服务器就自动返回这个目录下由DirectoryIndex定义的文件,当然可以指定多个文件名字,系统会这个目录下顺序搜索。当所有由DirectoryIndex指定的文件都不存在时,Apache服务器可以根据系统设置,生成这个目录下的所有文件列表,提供用户选择。此时该目录的访问控制选项中的Indexes选项(Options Indexes )必须打开,以使得服务器能够生成目录列表,否则Apache将拒绝访问。

  AccessFileName .htaccess
  AccessFileName定义每个目录下的访问控制文件的文件名,缺省为.htaccess,可以通过更改这个文件,来改变不同目录的访问控制限制。

Order allow,deny
Deny from all
  除了可以针对目录进行访问控制之外,还可以根据文件来设置访问控制,这
就是File语句的任务。使用File 语句,不管文件处于哪个目录,只要名字匹配,就必须接受相应的访问控制。这个语句对于系统安全比较重要,例如上例将屏蔽所有的使用者不能访问.htaccess文件,这样就避免.htaccess中的关键安全信息不至于被客户获取。

  #CacheNegotiatedDocs
  缺省情况下如果代理服务器和Apache服务器协商是否缓存其网页,Apache给
予否定的回答,不希望自己的网页被代理服务器缓存。然而这样就不能有效的利用代理服务器的优势,因此可以设置CacheNegotiatieDocs 选项, 使得代理服务器可以对网页进行缓存。然而即使不设置这个选项,有的代理服务器(或通过调整设置)也能对网页进行缓存。

  UseCanonicalName On
  打开这个UseCanonicalName是Web服务器的标准做法,因为客户发送的大部分请求都是对本服务器的引用,这样服务器就能使用 ServerName和Port选项的设置内容构建完整的URL,并回应客户,使浏览器能得到规范的URL。如果将这个参数设置为Off,那么 Apache将使用从客户请求中获得服务器的名字和端口值(支持HTTP 1.1的客户的请求中将会有这些信息),重新构建URL。

  TypesConfig /usr/local/apache/etc/mime.types
  TypeConfig用于设置保存有不同的MIME类型数据的文件名,在Linux下缺省设置为/usr/local/apache/etc/mime.types。

  DefaultType text/plain
  如果Web服务器不能决定一个文档的缺省类型,这通常表示文档使用了非标准的后缀,那么服务器就使用 DefaultType定义的MIME类型将文档发送给客户浏览器。这里的设置为text/plain,这样设置的问题是,如果服务器不能判断出文档的 MIME,那么大部分情况下这个文档为一个二进制文档,但使用 text/plain格式发送回去,浏览器将在内部打开它而不会提示保存。因此建议将这个设置更改为
application/octet-stream,这样浏览器将提示用户进行保存。

MIMEMagicFile /usr/local/apache/etc/magic
  除了从文件的后缀出发来判断文件的MIME类型之外,Apache还可以进一步分
析文件的一些特征,来判断文件的真实MIME类型。这个功能是由mod_mime_magic 模块实现的,它需要一个记录各种MIME类型特征的文件,以进行分析判断。上面的设置是一个条件语句,如果载入了这个模块,就必须指定相应的标志文件magic的位置。


通常连接时,服务器仅仅可以得到客户机的IP地址,如果要想获得客户机的
主机名,以进行日志记录和提供给 CGI程序使用,就需要使用这个 HostnameLookups 选项,将其设置为On打开DNS反查功能。但是这将使服务器对每次客户请求都进行DNS查询,增加了系统开销,使得反应变慢,因此缺省设置为使用Off关闭此选项。关闭选项之后,服务器就不会获得客户机的主机名,而只能使用IP地址来记录客户。

ErrorLog /var/log/httpd-error.log
LogLevel warn
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent} "" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
#CustomLog /var/log/httpd-access.log common
#CustomLog /var/log/httpd-referer.log referer
#CustomLog /var/log/httpd-agent.log agent
CustomLog /var/log/httpd-access.log combined

  这里定义了系统日志的形式,对于服务器错误记录, 由ErrorLog、 LogLevel 来定义不同的错误日志文件及其记录内容。
  对于系统的访问日志,缺省使用CustomLog参数定义日志的位置,缺省使用 combined 参数指定将所有的访问日志放在一个文件中,然而也可以将不同种类的访问日志放在不同的日志记录文件中,这是通过在 CustomLog中指定不同的记录类型来完成的。common表示普通的对单页面请求访问记录,referer表示每个页面的引用记录,可以看出一个页面中包含的请求数,agent表示对客户机的类型记录,显然可以将现有的combined 定义的设置行注释掉,并使用common、referer和agent作为CustomLog的参数,来为不同种类的日志分别指定日志记录文件。
  显然,LogFormat是用于定义不同类型的日志进行记录时使用的格式, 这里
使用了以%开头的宏定义,以记录不同的内容。
  如果这些参数指定的文件使用的是相对路径,那么就是相对于ServerRoot的
路径。

  ServerSignature On
  一些情况下,例如当客户请求的网页并不存在时,服务器将产生错误文档,
缺省情况下由于打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息。有的管理员更倾向于不对外显示这些信息,就
可以将这个参数设置为Off,或者设置为Email,最后一行将替换为对 ServerAdmin 的Email提示。

Alias /icons/ "/www/icons/"
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all

  Alias参数用于将URL与服务器文件系统中的真实位置进行直接映射,一般的
文档将在DocumentRoot 中进行查询,然而使用Alias定义的路径将直接映射到相
应目录下,而不再到DocumentRoot 下面进行查询。因此Alias可以用来映射一些
公用文件的路径,例如保存了各种常用图标的icons路径。这样使得除了使用符号连接之外,文档根目录(DocumentRoot)外的目录也可以通过使用了Alias映射,提供给浏览器访问。
  定义好映射的路径之后,应该需要使用Directory语句设置访问限制。

ScriptAlias /cgi-bin/ "/www/cgi-bin/"
AllowOverride None
Options None
Order allow,deny
Allow from all
  ScriptAlias也是用于URL路径的映射,但与Alias的不同在于,ScriptAlias 是用于映射CGI程序的路径,这个路径下的文件都被定义为CGI程序,通过执行它们来获得结果,而非由服务器直接返回其内容。缺省情况下CGI程序使用 cgi-bin目录作为虚拟路径。

  # Redirect old-URI new-URL
  Redirect参数是用来重写URL的,当浏览器访问服务器上的一个已经不存在的资源的时候,服务器返回给浏览器新的URL,告诉浏览器从该URL 中获取资源。这主要用于原来存在于服务器上的文档,改变了位置之后,而又希望能使用老URL能访问到,以保持与以前的URL兼容。

IndexOptions FancyIndexing
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz
ReadmeName README
HeaderName HEADER
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

当一个HTTP请求的URL为一个目录的时候,服务器返回这个目录中的索引文件。但如果一个目录中不存在缺省的索引文件,并且该服务器又许可显示目录文件列表的时候,就会显示出这个目录中的文件列表,为了使得这个文件列表能具有可理解性,而不仅仅是一个简单的列表,就需要前面的这些设置参数。
  如果使用了IndexOptions FancyIndexing选项,可以让服务器产生的目录列
表中针对各种不同类型的文档引用各种图标。而哪种文件使用哪种图标,则使用
下面的 AddIconByEncoding、AddIconByType以及AddIcon来定义,分别依据MIME 的编码、类型以及文件的后缀来判断使用何种图标。如果不能确定文档使用的图标,就使用 DefaultIcon定义的缺省图标。
  同样,使用AddDescription可以为不同类型的文档加入不同的描述。并且,
服务器还在目录下,查询使用ReadmeName和HeaderName定义的文件(自动加上 .
html后缀,如果没有发现,再使用.txt后缀进行搜索),如果发现了这些文件,
就在文件列表之前首先显示这些文件的内容,以使得普通目录列表具备更大的可
理解性。
  IndexIgnore让服务器在列出文件列表时忽略相应的文件, 这里使用模式配
置的方式定义文件名。

AddEncoding x-compress Z
AddEncoding x-gzip gz
  AddEncoding用于告诉一些使用压缩的MIME类型,这样可以让浏览器进行解压缩操作。

AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it
LanguagePriority en fr de

  一个HTML文档可以同时具备多个语言的版本,如对于file1.html文档可以具
备file1.html.en、file1.html.fr 等不同的版本,每个语言后缀必须使用 AddLanguage进行定义。这样服务器可以针对不同国家的客户,通过与浏览器进行协商,发送不同的语言版本。而LanguagePriority 定义不同语言的优先级,以便在浏览器没有特殊要求时,按照顺序使用不同的语言版本回应对file1.html 的请求。
这个国际化的能力实际的应用并不多。

#AddType application/x-httpd-php .phtml
#AddType application/x-httpd-php-source .phps
 AddType参数可以为特定后缀的文件指定MIME类型,这里的设置将覆盖 mime.types中的设置。

  #AddHandler cgi-script .cgi
  AddHandler是用于指定非静态的处理类型,用于定义文档为一个非静态的文
档类型,需要进行处理,再向浏览器返回处理结果。例如上面注释中的设置是将以.cgi结尾的文件设置为cgi-script类型,那么服务器将启动这个 CGI程序以进行处理。如果需要在前面AliasScript定义的路径之外执行CGI程序,就需要使用这个参数进行设置,此后以.cgi结尾的文件将被当作CGI程序执行。

  在配置文件、这个目录中的.htaccess以及其上级目录的.htaccess中必须允许执行CGI程序,这需要通过Options ExecCGI参数设定。

#AddType text/html .shtml
#AddHandler server-parsed .shtml
  另外一种动态进行处理的类型为server-parsed,由服务器自身预先分析网页内的标记,将标记更改为正确的HTML标识。由于server- parsed需要对text/html 类型的文档进行处理,因此首先定义了对应的.shtml为text/html类型。
  然而要支持SSI,还要首先要在配置文件(或.htaccess)中使用Options Includes允许该目录下的文档可以为SSI类型,或使用Options IncludesNOExec让执行普通的SSI标志,但不执行其中引用的外部程序。

  另一种指定server-parsed类型的方式为使用XBitBack设置选项,如果将 XBitHack设置为On,服务器将检查所有text/html类型的文档(包括.html后缀的文档),如果发现文件属性具备执行位 “x",则服务器就认为它是服务器分析文档,需要服务器进行处理。推荐使用AddHandler进行设置,而将XBitBack 设置为Off,因为使用XBitBack将对所有的HTML文档都执行额外的检查,降低了效率。

#AddHandler send-as-is asis
#AddHandler imap-file map
#AddHandler type-map var
上面被注释的AddHandler用于支持Apache服务器的asis、map和var处理能力

# Action media/type /cgi-script/location
# Action handler-name /cgi-script/location
 因为Apache内部提供的处理功能有限,因此可以使用Action为服务器定义外
部程序作为可处理的动态文档类型,这些外部程序与标准CGI程序相同,都是对输入的数据处理之后,再输出不同MIME类型的结果。例如要定义一个对特殊后缀wri都先执行wri2txt进行处理操作,再返回结果的操作,可以使用:

Action windows-writer /bin/wri2txt
AddHandler windows-writer wri
 更进一步,可以直接使用Action定义对某个MIME类型预先进行处理操作,这
需要例子中第一种格式的Action 参数设置方式。这样设置方式就不再需要额外的AddHandler用来将处理操作与文件后缀联系起来,而是使用Action直接处理MIME类型的文件。但如果文档后缀没有正式的MIME类型,还需要先定义一个MIME类型。

#MetaDir .web
#MetaSuffix .meta
 Meta信息是在文档发送给客户之前,预先发送给客户浏览器一些数据,因此
浏览器可以通过HEAD请求来访问这些Meta信息而不必真正通过GET来返回全部文档数据。服务器通常发送给浏览器的是一些标准的HTTP头信息,如果要想增加额外的信息,就需要使用MetaDir来定义Meta数据存放的目录, 而MetaS uffix用于指定包含Meta数据的文件后缀。

#ErrorDocument 500 "The server made a boo boo.
#ErrorDocument 404 /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
#ErrorDocument 402
http://some.other_server.com/subscription_info.html
  如果客户请求的网页不存在,或者没有访问权限等情况发生时,服务器将产
生一个错误代码,同时也将回应客户浏览器一个标识错误的网页。
ErrorDocument就用于设置当出现哪个错误时应该回应客户浏览器那些内容,ErrorDocument的第一个参数为错误的序号,第二个参数为回应的数据,可以为简单的文本,本地网页,本地CGI程序,以及远程主机上的网页。

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0
 BrowserMatch命令为特定的客户程序,设置特殊的参数,以保证对老版本浏
览器的兼容性,并支持新浏览器的新特性。

#
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#
# Deny from all
# ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#

  用于设置访问控制的设置主要是针对目录和文件进行设置的,然而也可以针
对不同的URL进行访问控制的设置,这样就不必担心ScriptAlias、Alias是否将路径设置到了受控制的目录之外了。针对URL进行控制的语句为 Location语句,这样不但能对服务器上的文件、CGI提供保护,此外,它还能保护不能找到对应文件,而是由服务器本身提供的特殊功能URL。 http://servername/server-status用于报告当?..器的状态,http: //servername/server-info用于报告Apache 服务器的统计信息。与此相关的设置还有ExtendedStatus参数,可以让服务器输出更详细的的报告。

#
#ProxyRequests On
#
#
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#ProxyVia On
#CacheRoot "/www/proxy"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com

#

  Apache服务器本身就具备代理的功能,然而这要求加载入mod_proxy模块。这能使用IfModule语句进行判断,如果存在 mod_proxy模块,就使用ProxyRequests打开代理支持。此后的Directory用于设置对Proxy功能的访问权限设置,以及用于设置缓冲的各个参数设置。

虚拟主机
#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78
#
# ServerAdmin webmaster@host.some_domain.com
# DocumentRoot /www/docs/host.some_domain.com
# ServerName host.some_domain.com
# ErrorLog logs/host.some_domain.com-error_log
# CustomLog logs/host.some_domain.com-access_log common
#

#

  缺省设置文件中的这些内容是用于设置命名基础的虚拟主机服务器时使用。
其中NameVirtualHost 来指定虚拟主机使用的IP地址,这个IP地址将对应多个 DNS名字,如果Apache使用了Listen 参数控制了多个端口,那么就可以在这里加上端口号以进一步进行区分对不同端口的不同连接请求。此后,使用 VirtualHost 语句,使用NameVirtualHost指定的IP地址作参数,对每个名字都定义对应的虚拟主机设置。
  虚拟主机是在一台Web服务器上,可以为多个单独域名提供Web服务,并且每个域名都完全独立,包括具有完全独立的文档目录结构及设置,这样域名之间完全独立,不但使用每个域名访问到的内容完全独立,并且使用另一个域名无法访
问其他域名提供的网页内容。
  虚拟主机的概念对于ISP来讲非常有用,因为虽然一个组织可以将自己的网页挂在具备其他域名的服务器上的下级往址上,但使用独立的域名和根网址更为正式,易为众人接受。传统上,必须自己设立一台服务器才能达到单独域名的目的,然而这需要维护一个单独的服务器,很多小单位缺乏足够的维护能力,更为合适的方式是租用别人维护的服务器。ISP也没有必要为一个机构提供一个单独的服务器,完全可以使用虚拟主机能力,使服务器为多个域名提供Web服务,而且不同的服务互不干扰,对外就表现为多个不同的服务器。
  有两种设定虚拟主机的方式,一种是基于HTTP 1.0标准,需要一个具备多IP
地址的服务器,再配置DNS 服务器,给每个IP地址以不同的域名,最后才能配置Apache的配置文件,使服务器对不同域名返回不同的Web文档。由于这需要使用额外的IP地址,对每个要提供服务的域名都要使用单独的IP地址,因此这种方式实现起来问题较多。
  可以在一个网络界面上绑定多个IP地址,Linux下需要使用ifconfig的 alias参数来进行这个配置,但此时会影响网络性能。
  HTTP 1.1标准在协议中规定了对浏览器和服务器通信时,服务器能够跟踪浏
览器请求的是哪个主机名字。因此可以利用这个新特性,使用更轻松的方式设定
虚拟主机。这种方式不需要额外的IP地址,但需要新版本的浏览器支持。这种方
式已经成为建立虚拟主机的标准方式。
  要建立非IP基础的虚拟主机,多个域名是不可少的配置,因为每个域名就对
应一个要服务的虚拟主机。因此需要更改DNS服务器的配置,为服务器增加多个C NAME选项,如:

linux IN A 192.168.1.64
vhost1 IN CNAME linux
vhost2 IN CNAME linux

 基本的设置选项都是为了linux主机设定的,如果要为vhost1和vhost2设定
虚拟主机,就要使用VirtualHost语句定义不同的选项,在语句中可以使用配置文件前面中的大部分选项,而可以重新定义几乎所有的针对服务器的设置。

NameVirtualHost 192.168.1.64

DocumentRoot /www/data
ServerName linux.example.org.cn

DocumentRoot /vhost1
ServerName vhost1.example.org.cn

DocumentRoot /vhost2
ServerName vhost2.example.org.cn

  这里需要注意的是,VirtualHost的参数地址一定要和NameVirtualHost定义
的地址相一致,必须保证所有的值严格一致,Apache服务器才承认这些定义是为这个IP地址定义的虚拟主机。
  此外,定义过NameVirtualHost之后,那么对这个IP地址的访问都被区分不同的虚拟主机进行处理,而对其他IP地址的访问,例如127.0.0.1,才应用前面定义的缺省选项。

 

posted @ 2007-01-25 15:22 Q系列类、方法、变量…… 阅读(374) | 评论 (0)编辑 收藏
http://pic1.blueidea.com/logo/logo.htm
posted @ 2007-01-25 15:03 Q系列类、方法、变量…… 阅读(415) | 评论 (0)编辑 收藏
很多设计师认为做好了企业网站就一定能够做好行业网站的设计,其实对设计来说行业网站和企业网站的设计截然不同,对整个网站的创意、风格、整体框架布局、文字编排、图片的合理利用,空间的合理安排上面等…有着许多诸多的要求,需要考虑的面更广,面对的问题也会更多。对于一名优秀的网站设计师来说不能绝不能放过任何一点小细节,本篇文章简述的是设计师在做行业网站时所需考虑的一些问题。

一、网站风格/创意
  风格(style)是抽象的。是指站点的整体形象给浏览者的综合感受。整体形象包括站点的版面布局,色彩,字体,浏览方式等…。如:我们觉得迪斯尼是生动活泼的而IBM则是专业严肃的。每一个网站都会给人们留下的不同感受。这里我们需要做到的是根据网站的定位做出网站特有的风格。除此我们还需要在风格同一上需要把握一下,其实这个风格的统一和传统的印刷出版物没什么区别。你网页上所有的图像、文字,包括像背景颜色、区分线、字体、标题、注脚什么的,都要统一风格,贯穿全站。这样子用户看起来舒服、顺畅,会对你的网站留下一个“很专业”的印象。而企业网站设计师往往就缺乏这一点,没有全局意思。

  创意,所谓创意就是不拘一格?某些设计师在做创意的时候大费周章,做出来确实不可否认很有创意、很别致,但往往对于行业网站的客户为什么不能接受呢?此时不要太责怪客户的不识货,应该反思,抓住客户的需求。其实做行业网站不需要很多大的创意,也不要浪费过多的时间去追求如何个性、如何好看,我们只需要一点小小的创意贯穿全站,也许会使网站更生动更具有吸引力、更有思想,比如中国现车交易网(http://www.chinaxcjy.com/)就是一个很好的案例,它把车的外形融入到网站中,使它脱颖而出。

二、网站LOGO
  Logo 顾名思义就是站点的标志图案,logo最重要的就是用图形化的方式传递网站的定位和经营理念、同时便于人们识别。网站logo的设计过程中一般有以下三种思路:1.直接以网站网址作为logo。2.根据网站提供的产品/服务特点展开logo设计。3.以传递网站运营商的经营理念为特色。如:全球五金网 logo(www.Wjw.cn)

三、视觉流程
  人们在阅读某种信息时,视觉总有一种自然的流动习惯,先看什么,后看什么,再看什么。在心理学的研究表明,一般的浏览习惯是从上到下、从左到右,在一个平面上,上松下稳而压抑。同样,平面的左松右稳。所以平面的视觉影响力上方强于下方,左侧强于右侧。这样平面的上部和中上部被称为“最佳视域”,也就是最优选的地方。在网页设计中一些突出或推荐的信息通常都放在这个位置。当然这种视觉流程只是一种感觉并非一种固定的公式,只要符合人们的心理顺序和逻辑顺序,就可以更为灵活地运用,在网页设计中,灵活而合理地运用直接影响到传达信息的准确与有效性。

四、网页框架与布局
 网页布局大致可分为“国”字型、拐角型、“T”字型、“L”字型、综合框架型、Flash 型、变化型,在这里就不做一一论述了。其实在我们在做设计的时候并没有过多的去考虑什么形式,比如我们在一张纸看到一个圆形的东西,很容易可以联想到它像太阳,而有些人则联想到月亮等等…这都是一种形式比喻,最重要的是抓住客户的需求,把握网站的定位做处合理的框架布局。

1. 分辨率
网页的整体宽度可分为三种设置形式:百分比、象素、象素+百分比。通常在网站建设中以象素形式最为常用,行业网站也不列外。我们在设计网页的时候必定会考虑到分辨率的问题,科技发展到现在我们通常用的是1024*768和800*600的分辨率,现在网络上很多都是用到778个象素的宽度,在800的分辨率下面往往使整个网页很压抑,有种不透气的感觉,其实这个宽度是指在800*600的分辨率上网页的最宽宽度,不代表最佳视觉,不妨试试760~770的象素,不管在1024还是800的分辨率下都可以达到较佳的视觉效果。

2. 合理广告
在目前一些网站的广告(弹出广告、浮动广告、大广告、banner广告、通栏广告等等…)让人觉得很烦琐,更本就不愿意来看,有时连你这个网站都不上了,这样一来网站受到了严重的影响、广告也没达到广告的目的。这些问题都是我们在设计网站之前需要考虑、需要规划的内容之一。

浮动广告有两种,第一种是在网页两边空余的地方可以上下浮动的广告,第二种是满屏幕到处随机移动的广告。建议能使用第一种的情况下尽量使用第一种,不可避免第二种情况时尽量在数量上控制最多一个就好。如果数量过多会直接影响到用户的心理、防挨到用户浏览信息,适得其反。首页广告不宜过多适中即可。如在注册或者某个购买步骤的页面上最好不要出现过多的其他无关的内容让用户分心,避免客户流失等…

3.空间的合理利用
 很多的网页都具有一个特点,用一个字来形容,那就是“塞”,它将各种各样的信息如文字、图片、动画等不加考虑的塞到页面上,有多少挤多少,不加以规范,导致浏览时会遇到很多的不方便,主要就是页面主次不分,喧宾夺主,要不就是没有重点,没有很好的归类,整体就像各大杂烩。让人难以找到需要的东西。有的则是一片空白失去平衡,也可以用个“散”字来形容。
  并非要把整个页面塞满了才不觉得空,也并非让整个页面空旷才不觉得满,只要合理的安排、有机的组合,使页面达到平衡,既使在一边的部分大面积留空,同样不会让人感到空,相反这样会给人留下广阔的思考空间,给人回味又达到了视觉效果。 

4.文字编排
  在网页设计中,字体的处理与颜色、版式、图形化等其他设计元素的处理一样非常关键。

4.1文字图形化
  文字图形化就是将文字用图片的形式来表现,这种形式在页面的子栏目里面最为常用,因为它具有突出,同时又美化了页面,使页面更加人性化加强了视觉效果。是文字无法达到的。对于通用性的网站弊端就是扩展性不强。

4.2强调文字
  如果将个别文字作为页面的诉求重点,则可以通过加粗、加下划线、加大号字体、加指示性符号、倾斜字体、改变字体颜色等手段有意识地强化文字的视觉效果,使其在页面整体中显得出众而夺目。这些方法实际上都是运用了对比的法则。如果在更新频率低的情况下也可以使用文字图形化。

五、网站配色
1.用一种色彩。这里是指先选定一种色彩,然后调整透明度或者饱和度,(说得通俗些就是将色彩变淡或则加深),产生新的色彩,用于网页。这样的页面看起来色彩统一,有层次感。

2.用两种色彩。先选定一种色彩,然后选择它的对比色(在Photoshop里按ctrl+shift+I)再进行微小的调整。整个页面色彩丰富但不花稍。

3.用一个色系。简单的说就是用一个感觉的色彩,例如淡蓝,淡黄,淡绿;或者土黄,土灰,土蓝。也就是在同一色系里面采用不同的颜色使网页增加色彩,而又不花,色调统一。这种配色方法在网站设计种最为常用。

4.灰色在网页设计中又称为“万能色”,其特点是可以和任何颜色搭配,在使用时把握量避免网页变灰。

在网页配色中,尽量控制在三种色彩以内,以避免网页花、乱、没有主色的显现。背景和前文的对比尽量要大,(绝对不要用花纹繁复的图案作背景),以便突出主要文字内容、也使用户在浏览信息的时候不会觉得累。

六、常见问题

6.1分解大型表格
  为了加快网页的浏览速度,尽可能避免用大型表格,因为浏览器必须等待整个表格的内容全部到达客户端,才能显示这个表格的内容,而文本或图像则是一边下载一边显示。同时我们制作网页时要尽量减少表格的深度、表格复杂化,这一点尤为重要可直接影响网页浏览速度、又给后面的程序添加带来了不必要的麻烦。

6.2网站导航要清晰
  “您所在位置”在大型网站中是不可缺少的一部分,其作用表明您现在所处在的位置,使用户不会不知东西南北迷失在网站中。其次还有读者进入目的页的点击次数,不能超过三次。如果三次以上还找不到用户所要的信息,人家可就没有耐心陪你玩了!

6.3图片注解
  在很多网站上我们都可以找到一个共同的缺点,当网速慢时有很图片都无法显示,又没有注解使得用户反感,如在注册时的按钮是图片做的又没加图片注解,而导致连注册都找不到,如果加了注解这些问题也就不成问题了!

6.4系统按钮
  在我们做按钮的时候,要做成“按钮”的形式(type="button"),而不要做成“提交表单”的形式(type="submit"),方便以后程序设计。

6.5空链接、死链接
  在一个优秀、专业的网站上是找不到任何一个空链接或死链接的情况,如果有这种情况会影响到用户对您网站的评价,所以我们在制作的时候尽量避免,避免办法就是提前做好链接,如果尚未完成的页面则链上“建设中…”的页面,加以解释。

6.6导航条
  在大型的行业网站里面主导航条最好是用文字形式,避免使用图片或Flash做导航条、缩小网站扩展性。

6.7网站的扩展性
  对于一个行业网站而言,网站的扩展性是相当重要的,随时都要考虑到网站需求的变化!
posted @ 2007-01-25 14:49 Q系列类、方法、变量…… 阅读(357) | 评论 (0)编辑 收藏
一.前期准备工作
>> 明确市场定位

企业正式开发和建设一个WEB网站之前,须先清楚网站所提供产品或服务的对象是哪类群体—这是一个非常关键的问题。如果你的目标市场是那些富有的商业专业人士,那么网站设计应大方得体,简洁易用;但如果是年轻些的客户群体,则可以把版面做的生动活泼一些。总之要因人制宜。要记住:网站是要让目标客户看的,并吸引他们购买,所以永远要把客户的感受放在第一位。
>> 确定网站主题

企业的WEB网站应具有清晰鲜明的主题。要让访问者在读到主页的第一段话之后就能清楚该网站大致是做什么的,而且可以迅速了解到网站所提供的产品或服务。若网站提供了多种不同产品,不要把所有产品都罗列到一个网页中,我们建议大家分门别类,并对每种产品均设立相应的产品页。
>> 色彩选择及搭配

网站给用户留下第一印象的既不是网站丰富的内容,也不是网站合理的版面布局,而是网站的色彩。不同的色彩搭配会产生不同的效果,并可能影响到访问者的情绪。一个网站设计成功与否,在某种程度上取决于设计者对色彩的运用和搭配。因而确定网站的标准色彩是相当重要的一步。

色彩的数量:网站整体使用色彩以两到三种为宜。颜色过多会使网页看起来很花哨,但缺乏内在的美感。在颜色选择和搭配上可借鉴一些国际大公司网站,他们对颜色的选择相当审慎。
色彩的搭配:色彩搭配一定要合理,给人以和谐愉快的感觉。一般来说,适合于网页标准色的颜色有蓝色,黄/橙色,黑/灰/白色三大系列色。在颜色的搭配上,有几种比较经典的方案:红/黄/白; 蓝/白; 红/灰/白; 蓝/橙/白; 黄/灰/白。实在不行就去Google一下吧,找一个自己喜欢的网站,看看人家的颜色是怎么搭配使用的,或许会对你大有启发。
其它注意事项:避免采用纯度很高的单一色彩,这样容易造成视觉疲劳。避免使用过于明亮或对比过于强烈的颜色,它们会对眼睛造成伤害,如白底黄字等等。颜色对比过于接近或不合理的,如深底浅字,深底深字等(例如深蓝色底和黑字)也是设计之大忌。建议最好用浅色背景(当然白色最好),黑或深色文字。

>> 遵循K.I.S.S理念

老话说的好:Keep It Simple Stupid。Stupid在这里指“拙朴”,即务求最简洁直观。该设计理念被奉为网站设计、搜索引擎优化和网上商务的黄金规则之一。如果你的网站无法为访问者提供最直接的产品或服务信息,就等于你在把自己的潜在客户往竞争对手的网站上送。
二.设计三要素
无论一个网站是出于什么目的,若想取得最大的成功,则须保证网站的便利、快速和便宜。这是网站设计中最基本的三个要素。
要素一:便利性
保证客户可以用最小的努力得到他们要找的资料信息。要做到这样,你必须确保网站为用户提供了充分的便利性。根据这一原则,我们在网站设计中应:

>> 建立良好网站结构

在设计时不单需要考虑站点的外观是否漂亮,还需要考虑到搜索引擎是否能够很好地支持你的设计结构。我们不建议大家使用下面这些设计形式:
- Frames结构:具有导航清晰且方便维护的优点,但搜索引擎对这类网站在索引上仍有一定难度。
- Flash动画:网页视觉效果较好,但搜索引擎同样在检索上存在一定难度,而且影响网页的打开速度。
- 纯图片网页:搜索引擎一般认为这样的网站没有为用户提供实质的信息内容,因而是无足轻重的。
- 动态页面:具有容易维护和更新的优点,但必须了解:并非所有的搜索引擎都能够象对待静态页面一样来对待动态页面,此外宜使动态页面的参数可能少。
- Javascript/Java Applets:搜索引擎不支持Java Applets,此外Java设计的网站往往会影响网页的打开速度。

>> 内容第一,形式其次

与其在网站的图片和颜色上下足工夫,不如多花点时间在网站的内容上—客户最关心的莫过于产品的性能,质量等等。只要你的内容足够吸引人,即使象白底黑字般简单的设计也远远胜过那些华丽的版面设计。
>> 内容更新与沟通

企业Web站点建好后应不断补充以新的内容。站点信息的不断更新不但可以让浏览者了解到企业的发展动态,同时也会帮助企业建立良好的形象。
>> 增强网站可信度

互联网的非个人性容易使网民滋生某种程度的不信任感。你的客户是否能够信任你,这其实完全取决于你。
建议:可从以下几方面着手来增强网站的可信度
- 网站内容信息的完整性及真实可信性
- 网站导航清晰,更新及时且无错误链接
- 专业的网站设计
- 网站显著位置列出个人信息保密声明(隐私保护条款)
- 网站显著位置列出服务条款信息
- 清楚地说明所有收费项目
- 对顾客服务咨询做出快速回应
- 对网上支付,清楚说明如何保护信用卡信息
- 向客户发送交易确认电子邮件
- 对网站上发表的文章明确说明作者及来源
- 避免链接到不相关或者低质量的站点

>> 提供退款承诺

如果要向客户表明你的产品或服务的质量,再没有比这更好的办法了。
>> 提供便捷付款

作为世界上最成功的“网络零售业”典范之一,网上超市亚马逊(Amazon.com)年销售额达数十亿美元的骄人成绩一部分原因恐怕就要归功于其付款手续的便捷性。
对网上销售服务应确保整个付款手续清楚易用。尽量简化付款步骤,除了交易所必须的信息之外,千万别要求客户提供其它个人信息。
可经常查看网络日志中关于客户付款方面的信息。若总出现客户付款中途放弃退出的情况,则需要重新检查付款手续是否欠妥。

>> 充分利用客户推荐信息

一个网站上提供了客户对其产品或服务的推荐或赞赏性的话,则在一定程度上可以提高公司和产品的可信性。所以要充分利用客户或准客户对公司或产品的赞赏性的话语,不过在网上发布之前先须征得他们的同意。
>> 提供产品小贴士信息

从细节着手,向客户提供一些针对产品或服务所出现的问题的简单解决方案。
posted @ 2007-01-25 14:38 Q系列类、方法、变量…… 阅读(312) | 评论 (0)编辑 收藏
这是一篇很好的总结文章,关于界面设计一些基本原则归纳,在设计的时候很有帮助

本文列举Jeff Johnson:《GUI设计禁忌》一书中提及的明确针对Web设计和笔者认为对Web设计有参考意义的设计原则和禁忌。设计Web项目时尽量参考一下基本原则,避免设计禁忌,应该能使Web项目的GUI上一个层次。

基本原则:

1、关注用户及其任务,而不是技术

2、首先考虑功能,然后才是表示

3、从用户的视角看问题,使用用户的词汇进行描述

4、不要向用户暴露实现细节

5、使常用的用户任务简单化,不要让用户解决额外的问题

6、保持一致性,引导用户的使用习惯

7、保持显示惯性,传递信息,而不仅仅是数据

8、设计应满足响应需求

禁忌:

1、同一页面包含重复功能的链接或按钮

2、将复选框用作单选按钮

3、无初始值的多选一设置

4、在非开/关设置中使用复选框

5、用文本框显示只读数据

6、单选按钮之间间隔太大

7、属性标记对齐方式不一致

8、当前无效的控件不充分置灰

9、显示对用户无意义的错误提示

10、不同的类型页面窗口显示相同的标题

11、窗口的标题和调用的命令不一致

12、要求用户输入随机数

13、相似的功能却有不一致的用户操作界面

14、取消按钮无法真正取消操作

15、网站结构反映公司的结构或网站升级的历史

16、返回按钮不能达到预期的目的

17、搜索选项过多,过度复杂

18、使用容易被忽略的隐藏的图片链接

19、需要向下滚动才能看到当前页的重要信息

20、图片按钮对鼠标按下操作没有视觉变化

21、无意义的虚假进度条

22、执行长时间的任务时鼠标指针不显示成忙状态

23、不考虑用户可能的人为的错误输入

24、认为好的UI就是漂亮的UI

25、盲目错误的使用页面模块化设计
posted @ 2007-01-25 14:35 Q系列类、方法、变量…… 阅读(385) | 评论 (0)编辑 收藏
仅列出标题  下一页