05月 17

一、如何写PHP规范注释

所有的文档标记都是在每一行的 * 后面以@开头。
如果在一段话的中间出来@的标记,这个标记将会被当做普通内容而被忽略掉。

@access
//该标记用于指明关键字的存取权限:private、public或proteced 使用范围:class,function,var,define,module

@author
//指明作者

@copyright
//指明版权信息

@const
//使用范围:define 用来指明php中define的常量

@final
//使用范围:class,function,var 指明关键字是一个最终的类、方法、属性,禁止派生、修改。

@global
//指明在此函数中引用的全局变量

@name
//为关键字指定一个别名。

@package
//用于逻辑上将一个或几个关键字分到一组。

@abstrcut
//说明当前类是一个抽象类

@param
//指明一个函数的参数

@return
//指明一个方法或函数的返回值

@static
//指明关建字是静态的。

@var
//指明变量类型

@version
//指明版本信息

@todo
//指明应该改进或没有实现的地方

@link
//可以通过link指到文档中的任何一个关键字

@ingore
//用于在文档中忽略指定的关键字

二、一些注释规范
1、注释必须是下面形式

/**
* XXXXXXX
*/

2、对于引用了全局变量的函数,必须使用glboal标记。
3、对于变量,必须用var标记其类型(int,string,bool…)
4、函数必须通过param和return标记指明其参数和返回值
5、对于出现两次或两次以上的关键字,要通过ingore忽略掉多余的,只保留一个即可
6、调用了其他函数或类的地方,要使用link或其他标记链接到相应的部分,便于文档的阅读。
7、必要的地方使用非文档性注释(PHPDOC无法识别的关键字前的注释),提高代码易读性。
8、描述性内容尽量简明扼要,尽可能使用短语而非句子。
9、全局变量,静态变量和常量必须用相应标记说明

三、能够被phpdoc识别的关键字:

include
require
include_once
require_once
define
function
global
class

四、 规范注释的php代码实例 :

/**
* 文件名(sample.php)
*
* 功能描述(略)
*
* @author jgcao 
* @version 1.0
* @package sample
*/

/**
* 包含文件
*/
include_once 'common.php';

/**
* 声明全局变量
* @global integer $GLOBALS['myvar']
* @name $myvar
*/
$GLOBALS['myvar'] = 6;

/**
* 声明全局常量
*/
define('NUM', 6);

/**
* 类名
*
* 类功能描述
*
* @package sample
* @subpackage classes(如果是父类 就添加)
*/
class myclass {

	/**
	* 声明普通变量
	*
	* @accessprivate
	* @var integer|string
	*/
	var $firstvar = 6;

	/**
	* 创建构造函数 {@link $firstvar}
	*/
	function myclass() {
		$this->firstvar = 7;
	}

	/**
	* 定义函数
	*
	* 函数功能描述
	*
	* @global string $_myvar
	* @staticvar integer $staticvar
	* @param string $param1
	* @param string $param2
	* @return integer|string
	*/
	function firstFunc($param1, $param2 = 'optional') {
		static $staticvar = 7;
		global $_myvar;
		return $staticvar;
	}
}
03月 15
//apply 用法
funObj.apply([thisObj[,argArray]]);

//call 用法
funObj.call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

//thisObj 可选项。将被用作当前对象的对象。

var newFun = new function()
{
	this.a = 10;
	this.b = 20;
}

function runFun(a,b)
{
	alert(a+b);
	alert(this.a + this.b);
}

runFun.call(newFun,3,5);

runFun.apply(newFun,new Array(3,5));

//对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
//对于第一个参数意义都一样,但对第二个参数:
//apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
文章标签:
03月 15

理解apache配置

apache 评论关闭

#
# Apache服务器主配置文件. 包括服务器指令的目录设置.
# 详见
#
# 请在理解用途的基础上阅读各指令。
#
# 再读取此文档后,服务器将继续搜索运行
# E:/Program Files/Apache Group/Apache/conf/srm.conf
# E:/Program Files/Apache Group/Apache/conf/access.conf
# 除非用ResourceConfig或AccessConfig覆盖这儿的标识
#
# 配置标识由三个基本部分组成:
# 1. 作为一个整体来控制Apache服务器进程的标识 (the ‘global environment’).
# 2. 用于定义主(默认)服务器参数的标识。
# 响应虚拟主机不能处理的请求。
# 同时也提供所有虚拟主机的设置值。
# 3. 虚拟主机的设置。在一个Apache服务器进程中配置不同的IP地址和主机名。
#
# 配置和日志文件名:指定服务器控制文件命名时,
# 以 “/” (或 “drive:/” for Win32)开始,服务器将使用这些绝对路径。
# 如果文件名不是以”/”开始的,预先考虑服务器根目录–
# 因此 “logs/foo.log”,如果服务器根目录是”/usr/local/apache”,
# 服务器将解释为 “/usr/local/apache/logs/foo.log”.
#
# 注: 指定的文件名需要用”/”代替”\”。
# (例, “c:/apache” 代替 “c:\apache”).
# 如果省略了驱动器名,默认使用Apache.exe所在的驱动器盘符
# 建议指定盘符,以免混乱。
#

### 部分 1: 全局环境
#
# 本部分的表示将影响所有Apache的操作
# 例如,所能处理的并发请求数或配置文件地址
#

#
# ServerType 可取值 inetd 或 standalone. Inetd 只适用于Unix平台
#
ServerType standalone

#
# ServerRoot: 目录树的根结点。服务器配置、出错信息、日志文件都保存在根目录下。
#
# 不要再目录末尾加”/”
#
ServerRoot “C:/Program Files/Apache Group/Apache”

#
# PidFile: 服务器用于记录启动时进程ID的文件。
#
PidFile logs/httpd.pid

#
# ScoreBoardFile: 用于保存内部服务器进程信息的文件。
# 并非必须。 但是如果指定了(此文件当运行Apache时生成)
# 那么必须确保没有两个Apache进程共享同一个scoreboard文件。
#
ScoreBoardFile logs/apache_runtime_status

#
# 在标准配置下,服务器将顺序读取 httpd.conf(此文件可通过命令行中-f参数指定),
# srm.conf 和 access.conf。
# 目前后两个文件是空的。为了简单起见,建议将所有的标识放在一个文件中。
# 以下两条注释的标识,是默认设置。
# 要让服务器忽略这些文件可以用 “/dev/null” (for Unix)
# 或”nul” (for Win32) 作为参数。
#
#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf

#
# Timeout: 接受和发送timeout的时间
#
Timeout 300

#
# KeepAlive: 是否允许保持连接(每个连接有多个请求)
# “Off” -无效
#
KeepAlive On

#
# MaxKeepAliveRequests: 每个连接的最大请求数。
# 设置为0表示无限制
# 建议设置较高的值,以获得最好的性能。
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: 同一连接同一客户端两个请求之间的等待时间。
#
KeepAliveTimeout 15

#
# 在Win32下,Apache每次产生一个子进程来处理请求。
# 如果这个进程死了,会自动产生另一个子进程。
# 所有的进入请求在子进程中多线程处理。
# 以下两个标识控制进程的运行
#

#
# MaxRequestsPerChild: 每个子进程死亡之前最大请求数
# 如果超过这个请求数,子程序会自动退出,避免延期使用导致内存溢出或其他问题。
# 大部分系统,并不需要此设置,
# 但是部分,象Solaris,确实值得注意。
# 对Win32, 可设置为0 (无限制)
# 除非有另外的考虑。
#
# 注: 此值不包括在每个连接初始化请求后,”keptalive”请求
# 例如, 如果一个子进程处理一个初始化请求和10个后续”keptalive”请求,
# 在这个限制下,只会记为一个请求。
#
MaxRequestsPerChild 0

#
# ThreadsPerChild: 服务器所允许的并发线程数。
# 此值的设置取决于服务器的响应能力(约多的请求在同一时间激活,则每个请求的处理时间越慢)
# 和服务器所允许消耗的系统资源。
#
ThreadsPerChild 50

#
# Listen: 允许将Apache绑顶到指定的IP地址和端口,作为默认值的辅助选项。
# 参见
#
#Listen 3000
#Listen 12.34.56.78:80

#
# BindAddress: 通过此选项可支持虚拟主机。
# 此标识用于告诉服务器监听哪个IP地址。
# 包括:”*”, IP地址, 或域名.
# 参见 和 Listen directives.
#
BindAddress 166.111.178.144

#
# Apache模块编译成标准的Windows结构。
#
# 以下模块绑定到标准的Apache二进制windows分布。
# 要修改标准操作,取消以下行的注释并且修改指定模块列表。
#
# 警告:这是高级选项。可能导致服务器崩溃。
# 没有专家的指导,不要轻易修改。
#
#ClearModuleList
#AddModule mod_so.c mod_mime.c mod_access.c mod_auth.c mod_negotiation.c
#AddModule mod_include.c mod_autoindex.c mod_dir.c mod_cgi.c mod_userdir.c
#AddModule mod_alias.c mod_env.c mod_log_config.c mod_asis.c mod_imap.c
#AddModule mod_actions.c mod_setenvif.c mod_isapi.c

#
# 动态共享对象(Dynamic Shared Object,DSO)
#
# 要使用基于DSO的功能模块,需要替换此处相应的
# `LoadModule’ 行。这样在使用之前这些包含的标识都将生效。
# 有关DSO及至的详细资料请看Apache1.3版中的README.DSOSO。
# 运行”apche -l”将列表显示Apache内奸的模块(类似标准的连接已经生效)
#
# 注:模块载入的顺序很重要。没有专家的建议,不要修改以下的顺序。
#
#LoadModule anon_auth_module modules/ApacheModuleAuthAnon.dll
#LoadModule dbm_auth_module modules/ApacheModuleAuthDBM.dll
#LoadModule digest_auth_module modules/ApacheModuleAuthDigest.dll
#LoadModule cern_meta_module modules/ApacheModuleCERNMeta.dll
#LoadModule digest_module modules/ApacheModuleDigest.dll
#LoadModule expires_module modules/ApacheModuleExpires.dll
#LoadModule headers_module modules/ApacheModuleHeaders.dll
#LoadModule proxy_module modules/ApacheModuleProxy.dll
#LoadModule rewrite_module modules/ApacheModuleRewrite.dll
#LoadModule speling_module modules/ApacheModuleSpeling.dll
#LoadModule info_module modules/ApacheModuleInfo.dll
#LoadModule status_module modules/ApacheModuleStatus.dll
#LoadModule usertrack_module modules/ApacheModuleUserTrack.dll

#
# ExtendedStatus 在服务器状态句柄被呼叫时控制是产生“完整”的状态信息(ExtendedStatus On)
# 还是仅返回基本信息(ExtendedStatus Off)
# 默认是:Off
#
#ExtendedStatus On

### 部分 2: 主服务器配置
#
# 此部分的标识用于主服务器所有的设置值,
# 响应任何定义不处理的请求
# 这些值同时给你稍后在此文件中定义的提供默认值。
#
# 所有的标识可能会在中出现。
# 对应的默认值会被虚拟主机重新定义覆盖。
#

#
# Port: Standalone服务器监听的端口。
# 在Apache能够监听指定端口前,需要在防火墙中进行设置。
# 其它运行httpd的服务器也可能影响此端口。 Disable
# 如果遇到问题,请关闭所有的防火墙、安全保护和其他的服务。
# Windos NT的”NETSTAT -a”指令会有助于问题的分析。
#
Port 80

#
# ServerAdmin: 你的地址。如果服务器有任何问题将发信到这个地址。
# 这个地址会在服务器产生的某些页面中出现,例如,错误报告。
#
ServerAdmin chenyl98@mails.tsinghua.edu.cn

#
# ServerName 允许设置主机名。如果与程序获得的不同,主机名将返回客户端。
# (例如,用”www”代替主机真实的名字)
#
# 注: 主机名不能随便指定。必须是你的机器有效的DNS名称。否则无法正常工作。
# 如果不能理解,倾向你的网络管理员询问。
# 如果你的主机没有注册DNS名,可在此输入IP地址。
# 此时必须用IP地址来访问。(如, http://123.45.67.89/)
# 这样扔可以完成重新定向的工作。
#
# 127.0.0.1 是TCP/IP的本地环路地址, 通常命名为localhost.
# 机器默认此地置为本身。 如果只是使用Apache来进行本地测试和开发,
# 可使用127.0.0.1 作为服务器名.
#
#ServerName new.host.name

#
# DocumentRoot: 放置服务文档的目录。
# 默认状态下,所有的请求都以这个目录为基础。
# 但是直接符号连接和别名可用于指向其他位置。
#
DocumentRoot “D:/www_root”

#
# Apache访问的每个目录可设置相关的服务和特性是允许或(和)不允许。
# (同样影响其子目录)
#
# 首先,设置”default”地址只有最基本的权限。
#

Options FollowSymLinks
AllowOverride None

#
# 注意从现在开始必须制定开启特殊的权限。
# 这样就不会产生意想不到的结果。
# 请仔细确认。
#

#
# 这个地址应与DocumentRoot保持一致
#

#
# 此值可是: “None”, “All”, 或下列的组合: “Indexes”,
# “Includes”, “FollowSymLinks”, “ExecCGI”, 或 “MultiViews”.
#
# 注意”MultiViews”必须明确指定— “Options All”不包括此特性。
#
Options Indexes FollowSymLinks MultiViews

#
# 此项控制目录中哪些.htaccess文件可覆盖。
# 允许值: “All”或者以下项的组合:”Options”, “FileInfo”,
# “AuthConfig”, “Limit”
#
AllowOverride None

#
# 控制哪些用户可从此服务器获得资料。
#
Order allow,deny
Allow from all

#
# UserDir: 当请求~user时,追加到用户主目录的路径地址。
#
# 在Win32下,并不要求指定为用户登陆的主目录。
# 因此可使用以下的格式。
# 详细参照文档UserDir
#

UserDir “f:/homepages/”

#
# 控制访问UserDir目录. The following is an example
# 以下是一个站点的例子,权限限制为只读。
#
#
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#
# Order allow,deny
# Allow from all
#

#
# Order deny,allow
# Deny from all
#

#

#
# DirectoryIndex: 预设的HTML目录索引文件名。
# 用空格来分隔多个文件名。
#

DirectoryIndex index.html

#
# AccessFileName: 每个目录中用于控制访问信息的文件名。
#
AccessFileName .htaccess

#
# 以下行防止客户端可访问 .htaccess 文件。
# 因为 .htaccess文件通常包含授权信息,
# 处于安全的考虑不允许访问。
# 如果想让访客看到.htaccess文件的内容,
# 可将这些行注释。
# 如果修改了上面的AccessFileName,
# 请在此进行相应的修改。
#
# 同时,一般会用类似.htpasswd的文件保存密码。
# 这些文件同样可以得到保护。
#

Order allow,deny
Deny from all

#
# CacheNegotiatedDocs: 默认下,Apache对每个文档发送”Pragma: no-cache”
# 这将要求代理服务器不缓存此文档。
# 取消下列行的可取消这个属性,这样代理服务器将缓存这些文档。
#
#CacheNegotiatedDocs

#
# UseCanonicalName: (1.3新增) 当此设置为on时,
# 无论何时Apache需要构建一个自引用的URL(指向响应来源服务器),
# 它将用ServerName和Port来构建一个规范的格式。
# 当此设置为off时,Apache将使用客户端提供的”主机名:端口”
# 这将同时影响CGI脚本中的SERVER_NAME和SERVER_PORT
#
UseCanonicalName On

#
# TypesConfig 记录媒体类型(mime.types)文件或类似的东东放置的位置
#

TypesConfig conf/mime.types

#
# DefaultType 是服务器处理未确认类型的文件,如为止的扩展名,的默认类型。
# 如果你的服务器上主要包含的是文本或HTML文档,”text/plain”是较好的设置
# 如果服务器上主要包含二进制文件,如应用程序或图片,
# 最好设置成”application/octet-stream”防止浏览器将二进制文件以文本的方式显示。
#
DefaultType text/plain

#
# mod_mime_magic模块允许服务器使用文件自身的不同标识来确定文件类型。
# MIMEMagicFile指示模块文件标识的定义所在的位置。
# mod_mime_magic不是默认服务器的一部分。
# (必须自行用LoadModule来追加 [见'全局环境'部分的 DSO 章节],
# 或者在编译服务器时包含mod_mime_magic部分)
# 包含在 中.
# 就是说,如果该模块是服务器的一部分,MIMEMagicFile标识将执行。
#

MIMEMagicFile conf/magic

#
# HostnameLookups: 注册客户端的机器名或IP地址。
# 例如: www.apache.org (on) 或 204.62.129.132 (off).
# 默认为off,因为对于网络来说,最好让人们有意识的设置为on,
# 因为开启此功能意味着每个客户请求将导致至少向name服务器发送一个lookup请求
#
HostnameLookups Off

#
# ErrorLog: 错误记录文件的地址
# 如果不在内指定ErrorLog
# 改虚拟主机的错误心细将记录到此处。
# 如果在中明确指定了错误记录文件,
# 则错误将记录在那儿而不是这儿。
#
ErrorLog logs/error.log

#
# LogLevel: 控制记录在error.log中信息的个数.
# 可能的值:debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn

#
# 以下标识定义CustomLog标识使用的格式。(见下)
#
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common
LogFormat “%{Referer}i -> %U” referer
LogFormat “%{User-agent}i” agent

#
# 访问记录的位置和格式 (功用的记录文件格式).
# 如果不在中定义记录文件,
# 那些访问记录就将保存在这儿。 Contrariwise, if you *do*
# 反之,如果指定了记录文件,那么访问记录将记录在那儿而不是这个文件中。
#
CustomLog logs/access.log common

#
# 如果希望使用代理和参考的记录文件, 取消以下标识的注释符
#
#CustomLog logs/referer.log referer
#CustomLog logs/agent.log agent

#
# 如果想在一个文件中记录访问、代理、参考信息(复合的记录格式)
# 可使用以下标识
#
#CustomLog logs/access.log combined

#
# 在服务器产生的页面(如错误文档信息,FTP目录列表等等,不包括CGI产生的文档)中
# 增加一条服务器版本和虚拟主机名的信息。
# 设置为”EMail”将包含mailto: ServerAdmin的连接.
# 可选值: On | Off | EMail
#
ServerSignature On

#
# 默认下,Apache用工作行解析所有CGI脚本
# 此注释行(脚本的第一行)包括’#'和’!'后面跟着执行特殊脚本的程序路径,
# 对perl脚本来说是C:\Program Files\Perl目录中的perl.exe。
# 工作行如下:

#!c:/program files/perl/perl

# 注意真实的工作行不能有缩进,必须是文件的第一行。
# 当然,CGI进程必须通过适当的scriptAlias或ExecCGI选项标识来启动。
#
# 然而,Windows下的Apache即允许以上的Unix方式,也可以通过注册表的形式。
# 用注册表执行文件的方法同在Windows资源管理器中双击运行的注册方法相同。
# 此脚本操作可在Windows资源管理器的“查看”菜单中设置。
# “文件夹选项”,然后查看“文件类型”。点击编辑按钮。
# 修改操作属性。Apache 1.3会尝试执行‘Open’操作,
# 如果失败则会尝试工作行
# 这个属性在Apache release 2.0中会有改变.
#
# 每个机制都有自身特定的安全弱点,这样可能导致别人运行你不希望调用的程序。
# 最佳的解决方案还在讨论中。
#
# 要是这个Windows的特殊属性生效 (同时会是Unix属性无效)
# 取消下列标识的注释符。
#
#scriptInterpreterSource registry
#
# 上面的标识可在块或.htaccess文件中单独替换。
# 可选择’registry’ (Windows behavior)或 ‘script’
# (Unix behavior) option, 将覆盖服务器的默认值。
#

#
# Aliases: 可无限制的追加别名。格式如下:
# Alias 假名 真名
#

#
# 注意如果假名中包含’/',服务器会在当前URL中发出请求。
# 因此”/icons”不能用于别名
# 必须用 “/icons/”..
#
Alias /icons/ “C:/Program Files/Apache Group/Apache/icons/”


Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all

#
# scriptAlias: 控制哪个目录包含服务器脚本。
# scriptAlias本质行和Aliases一样。, except that
# 区别在于真名目录中的文档被看作是一个应用程序。
# 请求时由服务器运行而不是发往客户端。
# “/”符号的规则同
# Alias相同.
#
scriptAlias /cgi-bin/ “C:/Program Files/Apache Group/Apache/cgi-bin/”

#
# “C:/Program Files/Apache Group/Apache/cgi-bin” 可修改为任何放置CGI脚本的目录
#

AllowOverride None
Options None
Order allow,deny
Allow from all


# 别名结束

#php脚本说明

scriptAlias /php/ “d:/php/”
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .phtml
Action application/x-httpd-php “/php/php.exe”

#php脚本说明结束

#
# Redirect 允许告诉客户端服务器上曾经有的文档,但是现在不存在了。
# 并且可以告诉客户端到哪儿去寻找。
# 格式: Redirect old-URL new-URL
#

#
# 控制服务器目录列表显示的标识
#

#
# FancyIndexing标识是使用特定的目录检索还是标准的(standard)
#
IndexOptions FancyIndexing

#
# AddIcon*表明不同文件或扩展名显示的图标。
# 这些图标只在特定检索状态下显示。
#
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 用于为制定图标的文件所显示的图标。
#
DefaultIcon /icons/unknown.gif

#
# AddDescription在服务器生成的检索的某个文件后追加小段说明。
# 此项只在设置为FancyIndexed时有效
# 格式:AddDescription “描述” 文件名
#
#AddDescription “GZIP compressed document” .gz
#AddDescription “tar archive” .tar
#AddDescription “GZIP compressed tar archive” .tgz

#
# ReadmeName是服务器默认的README文件。
# 并且会追加到目录列表的最后。
#
# HeaderName 是目录中需要预先显示内容的文件名。
#
# 如果MultiViews在选项中,作为结果,服务器将先找name.html,
# 如果存在就包含它。如果name.html不存在,
# 服务器会继续寻找name.txt。如果存在就作为纯文本包含进来。
#
ReadmeName README
HeaderName HEADER

#
# IndexIgnore是一系列的文件名。目录索引将忽略这些文件并且不包含在列表中。
# 允许使用通配符。
#
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t


# indexing标识结束

#
# 文件类型
#

#
# AddEncoding 可用于特殊浏览器(Mosaic/X 2.1+)快速传输压缩信息。
# 注:并不是所有的服务器都支持。
# 除了名字相似,以下Add*标识对上面的FancyIndexing定制标识无影响。
#
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
#
# AddLanguage用于指定文档的语言。
# 可以使用content标签指定每个文件的语言。
#
# 注 1: 后缀不必与所用语言的关键字相同。
# — 波兰语(Polish,标准代码为pl)的文档可以用
# “AddLanguage pl .po” 来避免与perl脚本文件混淆。
#
# 注 2: 以下例子表明两个字母的语言缩写和两个字母的国家缩写并不一定相同。
# E.g. ‘Danmark/dk’ 对比 ‘Danish/da’.
#
# 注 3: 其中’ltz’使用了三个字符,与RFC的规定不同。
# 但是这个问题正在修订中,并且重新清理RFC1766
#
# 丹麦Danish (da) – 荷兰Dutch (nl) – 英国English (en) – 爱萨尼亚Estonian (ee)
# 法国French (fr) – 德国German (de) – 现代希腊文Greek-Modern (el)
# 意大利Italian (it) – 朝鲜Korean (kr) – 挪威Norwegian (no)
# 葡萄牙Portuguese (pt) – 卢森堡Luxembourgeois* (ltz)
# 西班牙Spanish (es) – 瑞典Swedish (sv) – 加泰罗尼亚Catalan (ca) – 捷克Czech(cz)
# 波兰Polish (pl) – 巴西Brazilian Portuguese (pt-br) – 日本Japanese (ja)
# 俄国Russian (ru)
#
AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .ee
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage he .he
AddCharset ISO-8859-8 .iso8859-8
AddLanguage it .it
AddLanguage ja .ja
AddCharset ISO-2022-JP .jis
AddLanguage kr .kr
AddCharset ISO-2022-KR .iso-kr
AddLanguage no .no
AddLanguage pl .po
AddCharset ISO-8859-2 .iso-pl
AddLanguage pt .pt
AddLanguage pt-br .pt-br
AddLanguage ltz .lu
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .se
AddLanguage cz .cz
AddLanguage ru .ru
AddLanguage tw .tw
AddCharset Big5 .Big5 .big5
AddCharset WINDOWS-1251 .cp-1251
AddCharset CP866 .cp866
AddCharset ISO-8859-5 .iso-ru
AddCharset KOI8-R .koi8-r
AddCharset UCS-2 .ucs2
AddCharset UCS-4 .ucs4
AddCharset UTF-8 .utf8

# LanguagePriority 可设置语言的优先级。
#
# 优先级降序排列
# 在此处按照字母顺序,可自行修改
#

LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw

#
# AddType 可临时改变mime.types或者指定特殊文件的格式。
#
# 例如:PHP 3.x 模块 (非Apache标准配件,参见http://www.php.net)可用下面格式定义:
#
#AddType application/x-httpd-php3 .php3
#AddType application/x-httpd-php3-source .phps
#
# PHP 4.x, 使用:
#
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps

AddType application/x-tar .tgz

#
# AddHandler 可将特定文件扩展名映射到处理方法上。
# 与文件类型无关。此特性可内建到服务器中或者追加在操作指令中(见下)
#
# 如果希望用服务器端应用或scriptAliased外的CGI,取消以下行的注释符
#
# 用CGI脚本:
#
#AddHandler cgi-script .cgi

#
# 用服务器解析的HTML文档
#
#AddType text/html .shtml
#AddHandler server-parsed .shtml

#
# 取消以下注释符可激活Apache的send-asis HTTP file特性
#
#AddHandler send-as-is asis

#
# 如果使用服务器端解析的图像定位文件,使用以下标识:
#
#AddHandler imap-file map

#
# 要激活type maps使用:
#
#AddHandler type-map var


# 文档类型说明结束

#
# Action 定义在文件匹配时执行相应的脚本。
# 可简化常用CGI文件的调用。
# 格式: Action media/type /cgi-script/location
# 格式: Action handler-name /cgi-script/location
#

#
# MetaDir: 指定保存meta信息文件的目录。
# 这些文件包含附加的HTTP头,在发送文档是一并发送。
#
#MetaDir .web

#
# MetaSuffix: 指定包含meta信息的文件的后缀。
#
#MetaSuffix .meta

#
# 可定制的错误响应(Apache类型)
# 共三种风格:
#
# 1) 纯文本
#ErrorDocument 500 “The server made a boo boo.
# 注: 第一个”号用于表示是文本,实际不输出
#
# 2) 本地重定向
#ErrorDocument 404 /missing.html
# to redirect to local URL /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
# 注:可重定向到任何一个服务器端的脚本或文档
#
# 3) 外部重定向
#ErrorDocument 402 http://some.other_server.com/subscription_info.html
# 注: 大部分与初始请求关联的环境变量对这样的脚本无效。
#

#
# 基于浏览器的定制操作
#

#
# 以下标识修改普通的HTTP响应操作。
# 第一个标识针对Netscape2.x和其他无此功能的浏览器取消保持激活状态的功能
# 这些浏览器在执行这些功能时会出错。
# 第二个标识针对IE4.0b2设置。其中有一条不完整的HTTP/1.1指令
# 在301或302(重定向)响应时不能正确的保持激活状态
#
BrowserMatch “Mozilla/2″ nokeepalive
BrowserMatch “MSIE 4\.0b2;” nokeepalive downgrade-1.0 force-response-1.0

#
# 下面的标识通过不产生基本的1.1响应取消对违反HTTP/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


# 浏览器定制标识结束

#
# 允许使用URL”http://servername/server-status”的形式查看服务器状态报告
# 修改 “.your_domain.com”来匹配相应的域名以激活此功能
#
#
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#

#
# 允许使用URL”://servername/server-info”(要求加载mod_info.c),
# 来远程察看服务器配置报告。
# 修改 “.your_domain.com”来匹配相应的域名以激活此功能
#
#
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#

#
# 据报有人试图利用一个老的1.1漏洞。
# 这个漏洞与CGI脚本在Apache服务器上分布有关。
# 通过取消下面几行的注释符,可以将此类攻击记录转移到phf.apache.org上的记录脚本上。
# 或者也可以利用脚本scriptsupport/phf_abuse_log.cgi记录在本地服务器上。
#
#
# Deny from all
# ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#

#
# 代理服务器标识。取消下列行的注释符可激活代理服务器。
#
#
# ProxyRequests On

#
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#

#
# 激活/取消处理HTTP/1.1 “Via:” 报头
# (“Full”:加入服务器版本; “Block”:取消所有外发的Via: 报头)
# 可设置值: Off | On | Full | Block
#
# ProxyVia On

#
# 可修改下列各行并取消注释符来激活缓存。
# (没有CacheRoot标识就不使用缓存)
#
# CacheRoot “E:/Program Files/Apache Group/Apache/proxy”
# CacheSize 5
# CacheGcInterval 4
# CacheMaxExpire 24
# CacheLastModifiedFactor 0.1
# CacheDefaultExpire 1
# NoCache a_domain.com another_domain.edu joes.garage_sale.com

#
# 代理标识结束

### 部分 3: 虚拟主机
#
# 虚拟主机: 如果希望在一台服务器上实现多个域名和主机名的服务,
# 可设置VirtualHost来实现。Most configurations
# 大部分的设置使用基于名称的虚拟主机,这样服务器就不必为IP地址操心。
# 这些用星号在下面的标识中标出。
#
# 在试图设置虚拟主机前
# 请阅读中的文档。
# 以了解细节问题。
#
# 可用命令行参数 ‘-S’来确认虚拟主机的设置。
#

#
# 使用基于名称的虚拟主机
#
#NameVirtualHost *

#
# 虚拟主机实例:
# 几乎所有的Apache标识都可用于虚拟主机内。
# 第一个VirtualHost部分用于申请一个无重复的服务器名。
#
#
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#

详见 这里

文章标签:
03月 15

理解nginx配置

nginx 评论关闭

#运行用户
user nobody nobody;

#启动进程
worker_processes 2;

#制定进程到cpu(四cpu:0001 0010 0100 1000)
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;

#每个进程最大打开文件数
worker_rlimit_nofile 10240;

#进程号保存文件
pid logs/nginx.pid;

#全局错误日志及PID文件
error_log logs/error.log notice;

#工作模式及连接数上限
events {
#使用epoll(linux2.6的高性能方式)
use epoll;
#每个进程最大连接数(最大连接=连接数x进程数)
worker_connections 10240;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型
include conf/mime.types;

#默认文件类型
default_type application/octet-stream;

#设定日志格式
log_format main ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” ‘
‘”$gzip_ratio”‘;

log_format download ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” ‘
“$http_range” “$sent_http_content_range”‘;

#接收header的缓冲区大小
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

#开启gzip模块
gzip on;
#最小压缩文件大小
gzip_min_length 1100;
#压缩缓冲区
gzip_buffers 4 8k;
#压缩类型
gzip_types text/plain;
#压缩比率
gzip_comp_level 9;
#压缩通过代理的所有文件
gzip_proxied any;
#vary header支持
gzip_vary on;
#压缩版本(默认1.1,前端为squid2.5使用1.0)
gzip_http_version 1.0;

#输出缓冲区
output_buffers 1 32k;
postpone_output 1460;

#设定access log
access_log logs/access.log main;

#客户端发送header超时
client_header_timeout 3m;
#客户端发送内容超时
client_body_timeout 3m;
#客户端发送超时
send_timeout 3m;

#开启高效文件传输模式
sendfile on;
tcp_nopush on;
tcp_nodelay on;

#长链接超时时间
keepalive_timeout 65;

#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的Squid开启3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}

#设定虚拟主机
server {
listen 80;
server_name 192.168.8.1 www.yejr.com;

charset gb2312;

#设定本虚拟主机的访问日志
access_log logs/www.yejr.com.access.log main;

#如果访问 /img/*, /js/*, /css/* 资源,则直接取本地文件,不通过squid
#如果这些文件较多,不推荐这种方式,因为通过squid的缓存效果更好
location ~ ^/(img|js|css)/ {
root /data3/Html;
expires 24h;
}

#对 “/” 启用负载均衡
location / {
proxy_pass http://mysvr;

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}

#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic “NginxStatus”;
auth_basic_user_file conf/htpasswd;
}
}
}

详见 这里

文章标签:
03月 12

配置说明

# lighttpd configuration file
#
# use it as a base for lighttpd 1.0.0 and above
#
# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $
#
#### Options you really have to take care of ###############

#server.max-fds = 1024
#server.max-connections = 1024
# 最大连接数,大流量网站推荐2048,默认等于 server.max-fds

## modules to load
# 设置要加载的module
# at least mod_access and mod_accesslog should be loaded
# all other module should only be loaded if really neccesary
# – saves some time
# – saves memory
server.modules = (
# “mod_rewrite”, # 重写
# “mod_redirect”, # 跳转
“mod_alias”,
# url别名,指令使文档可以被存储在DocumentRoot以外的本地文件系统中
“mod_access”, # 访问控制,必须存在
# “mod_trigger_b4_dl”, # 触发器之类的,没试
# “mod_auth”, # 权限控制
“mod_status”, # 生成服务器状态的Web页面。
# “mod_setenv”, # 设置环境变量
# “mod_fastcgi”, # fastcgi
# “mod_proxy”, # 代理/网关功能支持
# “mod_simple_vhost”, # 基于域名的虚拟机
# “mod_evhost”, # 虚拟主机
# “mod_userdir”, # 用户跟踪
# “mod_cgi”, # cgi
# “mod_compress”, # 文件压缩
# “mod_ssi”, # ssi
# “mod_usertrack”,
# 使用Session跟踪用户(会发送很多Cookie),以记录用户的点击流
# “mod_expire”, # 过期,缓存时间
# “mod_secdownload”, # url加密,可防盗链
# “mod_rrdtool”, # 绘图
“mod_accesslog” # 日志文件
)

## A static document-root. For virtual hosting take a look at the
## mod_simple_vhost module.
# 网站根目录
server.document-root = “/usr/local/lighttpd/service/”

## where to upload files to, purged daily.
#上传目录
server.upload-dirs = ( “/usr/local/lighttpd/uploads” )

## where to send error-messages to
# 错误日志位置
server.errorlog = “/usr/local/lighttpd/log/error.log”

# files to check for if …/ is requested
# 网站Index 索引
index-file.names = ( “index.php”, “index.html”,
“index.htm”, “default.htm” )

## set the event-handler (read the performance section in the manual)
# server.event-handler = “freebsd-kqueue” # needed on OS X
# Linux环境下epoll系统调用可提高吞吐量
server.event-handler = “linux-sysepoll”

# mimetype mapping
mimetype.assign = (
“.pdf” => “application/pdf”,
“.sig” => “application/pgp-signature”,
“.spl” => “application/futuresplash”,
“.class” => “application/octet-stream”,
“.ps” => “application/postscript”,
“.torrent” => “application/x-bittorrent”,
“.dvi” => “application/x-dvi”,
“.gz” => “application/x-gzip”,
“.pac” => “application/x-ns-proxy-autoconfig”,
“.swf” => “application/x-shockwave-flash”,
“.tar.gz” => “application/x-tgz”,
“.tgz” => “application/x-tgz”,
“.tar” => “application/x-tar”,
“.zip” => “application/zip”,
“.mp3″ => “audio/mpeg”,
“.m3u” => “audio/x-mpegurl”,
“.wma” => “audio/x-ms-wma”,
“.wax” => “audio/x-ms-wax”,
“.ogg” => “application/ogg”,
“.wav” => “audio/x-wav”,
“.gif” => “image/gif”,
“.jar” => “application/x-java-archive”,
“.jpg” => “image/jpeg”,
“.jpeg” => “image/jpeg”,
“.png” => “image/png”,
“.xbm” => “image/x-xbitmap”,
“.xpm” => “image/x-xpixmap”,
“.xwd” => “image/x-xwindowdump”,
“.css” => “text/css”,
“.html” => “text/html”,
“.htm” => “text/html”,
“.js” => “text/javascript”,
“.asc” => “text/plain”,
“.c” => “text/plain”,
“.cpp” => “text/plain”,
“.log” => “text/plain”,
“.conf” => “text/plain”,
“.text” => “text/plain”,
“.txt” => “text/plain”,
“.dtd” => “text/xml”,
“.xml” => “text/xml”,
“.mpeg” => “video/mpeg”,
“.mpg” => “video/mpeg”,
“.mov” => “video/quicktime”,
“.qt” => “video/quicktime”,
“.avi” => “video/x-msvideo”,
“.asf” => “video/x-ms-asf”,
“.asx” => “video/x-ms-asf”,
“.wmv” => “video/x-ms-wmv”,
“.bz2″ => “application/x-bzip”,
“.tbz” => “application/x-bzip-compressed-tar”,
“.tar.bz2″ => “application/x-bzip-compressed-tar”,
# default mime type
“” => “application/octet-stream”,
)

# Use the “Content-Type” extended attribute to obtain mime type if possible
#mimetype.use-xattr = “enable”

## send a different Server: header
## be nice and keep it at lighttpd
# server.tag = “lighttpd”

#### accesslog module
# 访问日志, 以及日志格式 (combined), 使用X-Forwarded-For可越过代理读取真实ip
accesslog.filename = “/usr/local/lighttpd/log/access.log”
#accesslog.format = “%{X-Forwarded-For}i %v %u %t \”%r\” %s %b \”%{User-Agent}i\” \”%{Referer}i\”"

## deny access the file-extensions
#
# ~ is for backupfiles from vi, emacs, joe, …
# .inc is often used for code includes which should in general not be part
# of the document-root
# 设置禁止访问的文件扩展名
url.access-deny = ( “~”, “.inc” )

$HTTP["url"] =~ “\.pdf$” {
server.range-requests = “disable”
}

##
# which extensions should not be handle via static-file transfer
#
# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
static-file.exclude-extensions = ( “.php”, “.pl”, “.fcgi” )

######### Options that are good to be but not neccesary to be changed #######

## bind to port (default: 80)
# 端口
#server.port = 81

## bind to localhost (default: all interfaces)
#server.bind = “127.0.0.1″

## error-handler for status 404
#server.error-handler-404 = “/error-handler.html”
#server.error-handler-404 = “/error-handler.php”

## to help the rc.scripts
# 进程id记录位置
#server.pid-file = “/var/run/lighttpd.pid”

###### virtual hosts
##
## If you want name-based virtual hosting add the next three settings and load
## mod_simple_vhost
##
## document-root =
## virtual-server-root + virtual-server-default-host + virtual-server-docroot
## or
## virtual-server-root + http-host + virtual-server-docroot
##
#simple-vhost.server-root = “/srv/www/vhosts/”
#simple-vhost.default-host = “www.example.org”
#simple-vhost.document-root = “/htdocs/”

## 错误转向统一处理
## Format: .html
## -> …./status-404.html for ‘File not found’
#server.errorfile-prefix = “/usr/share/lighttpd/errors/status-”
#server.errorfile-prefix = “/srv/www/errors/status-”

## virtual directory listings
# 如果没有找到index文件,是否显示目录列表。建议disable。
dir-listing.activate = “disable”
## select encoding for directory listings
# 列表字符集
dir-listing.encoding = “utf-8″
####### If the URL is like ^/download/ then enable/disable dir-listing
$HTTP["url"] =~ “^/download/” {
dir-listing.activate = “enable”
}

## enable debugging
#debug.log-request-header = “enable”
#debug.log-response-header = “enable”
#debug.log-request-handling = “enable”
#debug.log-file-not-found = “enable”

### only root can use these options
#
# chroot() to directory (default: no chroot() )
#server.chroot = “/”

# 服务运行使用的用户及用户组
## change uid to (default: don’t care)
#server.username = “wwwrun”

## change uid to (default: don’t care)
#server.groupname = “wwwrun”

# gzip压缩存放的目录以及需要压缩的文件类型
#### compress module
#compress.cache-dir = “/var/cache/lighttpd/compress/”
#compress.filetype = (“text/plain”, “text/html”)

#### proxy module
## read proxy.txt for more info
#proxy.server = ( “.php” =>
# ( “localhost” =>
# (
# “host” => “192.168.0.101″,
# “port” => 80
# )
# )
#)

#### fastcgi module
## read fastcgi.txt for more info
## for PHP don’t forget to set cgi.fix_pathinfo = 1 in the php.ini
#fastcgi.server = ( “.php” =>
# ( “localhost” =>
# (
# “socket” => “/var/run/lighttpd/php-fastcgi.socket”,
# “bin-path” => “/usr/local/bin/php-cgi”
# )
# )
#)

#### CGI module
#cgi.assign = ( “.pl” => “/usr/bin/perl”,
#”.cgi” => “/usr/bin/perl” )
#

#### SSL engine
#ssl.engine = “enable”
#ssl.pemfile = “/etc/ssl/private/lighttpd.pem”

#### status module
#status.status-url = “/server-status”
#status.config-url = “/server-config”
$HTTP["remoteip"] == “192.168.0.205″ {
status.status-url = “/server-status”
}

#### auth module
## read authentication.txt for more info
# 权限控制
#auth.backend = “plain”
#auth.backend.plain.userfile = “lighttpd.user”
#auth.backend.plain.groupfile = “lighttpd.group”

#auth.backend.ldap.hostname = “localhost”
#auth.backend.ldap.base-dn = “dc=my-domain,dc=com”
#auth.backend.ldap.filter = “(uid=$)”

#auth.require = ( “/server-status” =>
# (
# “method” => “digest”,
# “realm” => “download archiv”,
# “require” => “user=jan”
# 允许的用户, 用户列表文件 在上面配置的auth.backend.htpasswd.userfile 里
# ),
# “/server-config” =>
# (
# “method” => “digest”,
# “realm” => “download archiv”,
# “require” => “valid-user”
# )
#)

#### url handling modules (rewrite, redirect, access)
# url 重写 (cakephp可用)
#url.rewrite = ( “^/$” => “/server-status” )
# url 跳转
#url.redirect = ( “^/wishlist/(.+)” => “http://www.123.org/$1″ )
#### both rewrite/redirect support back reference to regex conditional using %n
#$HTTP["host"] =~ “^www\.(.*)” {
# url.redirect = ( “^/(.*)” => “http://%1/$1″ )
#}

# 映射
alias.url = (
“/only/a/test” => “/usr/local/lighttpd/test”,
“/hahaha” => “/usr/local/lighttpd/hahaha”
)

#
# define a pattern for the host url finding
# %% => % sign
# %0 => domain name + tld
# %1 => tld
# %2 => domain name without tld
# %3 => subdomain 1 name
# %4 => subdomain 2 name
#
#evhost.path-pattern = “/srv/www/vhosts/%3/htdocs/”

# 基于 evhost 的虚拟主机 针对域名
#$HTTP["host"] == “a.lostk.com” {
#server.document-root = “/var/www/lostk/”
#server.errorlog = “/var/log/lighttpd/lostk-error.log”
#accesslog.filename = “/var/log/lighttpd/lostk-access.log”
#}

#### expire module
# 设定文件过期时间(缓存过期时间)
#expire.url = (
“/buggy/” => “access 2 hours”,
“/asdhas/” => “access plus 1 seconds 2 minutes”
)

#### ssi
#ssi.extension = ( “.shtml” )

#### rrdtool
#rrdtool.binary = “/usr/bin/rrdtool”
#rrdtool.db-name = “/var/lib/lighttpd/lighttpd.rrd”

#### setenv
#setenv.add-request-header = ( “TRAV_ENV” => “mysql://user@host/db” )
#setenv.add-response-header = ( “X-Secret-Message” => “42″ )

## for mod_trigger_b4_dl
# trigger-before-download.gdbm-filename = “/var/lib/lighttpd/trigger.db”
# trigger-before-download.memcache-hosts = ( “127.0.0.1:11211″ )
# trigger-before-download.trigger-url = “^/trigger/”
# trigger-before-download.download-url = “^/download/”
# trigger-before-download.deny-url = “http://127.0.0.1/index.html”
# trigger-before-download.trigger-timeout = 10

#### variable usage:
## variable name without “.” is auto prefixed by “var.” and becomes “var.bar”
#bar = 1
#var.mystring = “foo”

## integer add
#bar += 1
## string concat, with integer cast as string, result: “www.foo1.com”
#server.name = “www.” + mystring + var.bar + “.com”
## array merge
#index-file.names = (foo + “.php”) + index-file.names
#index-file.names += (foo + “.php”)

#### include
#include /etc/lighttpd/lighttpd-inc.conf
## same as above if you run: “lighttpd -f /etc/lighttpd/lighttpd.conf”
#include “lighttpd-inc.conf”

#### include_shell
#include_shell “echo var.a=1″
## the above is same as:
#var.a=1

# 针对端口的虚拟主机
#$SERVER["socket"] == “192.168.0.1:8000″ {
# server.document-root = “/var/www/xxx/”
# server.errorlog = “/var/log/lighttpd/test-error.log”
# accesslog.filename = “/var/log/lighttpd/test-access.log”
# …
#}

详见    这里 官方

文章标签:
03月 12

一、简介
1、lighttpd
Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。
Lighttpd使用fastcgi方式运行php,它会使用很少的PHP进程响应很大的并发量。
Fastcgi的优点:
(1)、从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑。

(2) 、从安全性上看, fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮,
(3)、从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与
(4)、从扩展性上讲, fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序(php,java,python…)

2、apache
apache是世界排名第一的web服务器,世界上百分之五十以上的web服务器在使用。
apache 的特性:
1)、 几乎可以运行在所有的计算机平台上。
2) 、支持最新的http/1.1协议
3) 、简单而且强有力的基于文件的配置(httpd.conf)。
4) 、支持通用网关接口(cgi)
5) 、支持虚拟主机。
6) 、支持http认证。
7) 、集成perl。
8) 、集成的代理服务器
9) 、可以通过web浏览器监视服务器的状态, 可以自定义日志。
10) 、支持服务器端包含命令(ssi)。
11) 、支持安全socket层(ssl)。
12) 、具有用户会话过程的跟踪能力。
13) 、支持fastcgi
14) 、支持java servlets

3、nginx
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler。ru站点开发。
Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。其拥有匹配 Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。
nginx做为HTTP服务器,有以下几项基本特性:
1) 、处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.
2) 、无缓存的反向代理加速,简单的负载均衡和容错.
3) 、FastCGI,简单的负载均衡和容错.
4)、 模块化的结构。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。
5)、 Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。
6) 、Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2。5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言,nginx比lighthttpd更胜一筹。
7) 、Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

二、比较:

server

Apache

Nginx

Lighttpd

Proxy代理

非常好

非常好

一般

Rewriter

非常好

一般

Fcgi

不好

非常好

热部署

不支持

支持

不支持

系统压力比较

很大

很小

比较小

稳定性

非常好

不好

安全性

一般

一般

技术支持

非常好

很少

一般

静态文件处理

一般

非常好

Vhosts虚拟主机

支持

不支持

支持

反向代理

一般

非常好

一般

Session sticky

支持

不支持

不支持

注:在相对比较大的网站,节约下来的服务器成本无疑是客观的。而有些小型网站往往服务器不多,如果采用 Apache 这类传统 Web 服务器,似乎也还能撑过去。但有其很明显的弊端: Apache 在处理流量爆发的时候(比如爬虫或者是 Digg 效应) 很容易过载,这样的情况下采用 Nginx 最为合适。
建议方案:
Apache 后台服务器(主要处理php及一些功能请求 如:中文url)
Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求)
Lighttpd 图片服务器
总体来说,随着nginx功能得完善将使他成为今后web server得主流。

文章标签:
03月 11

WEB项目三层开发

web 评论关闭

1、表示层(USL:User Show Layer)

主要表示WEB方式,也可以表示成WINFORM方式。如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

2、业务逻辑层(BLL: Business Logic Layer)

主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。如果说数据层是积木,那逻辑层就是对这些积木的搭建。

3、数据访问层(DAL:Data Access Laye)

主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。

文章标签:
03月 02

一、PHP单元测试工具

测试用例

二、JavaScript单元测试工具 — QUnit

QUnit是jQuery团队开发的JavaScript单元测试工具,使用方便,界面美观。


//安装测试
test( name, expected, test ) //添加一个测试运行
asyncTest( name, expected, test ) //添加异步测试运行
expect( amount ) //预计在一个测试中有几个断言
module( name, [lifecycle] ) //函数指定测试模块和周期。
init( ) //初始化测试

//断言函数
ok( state, [message] )  //判断函数,只能判断true和false。
equals( actual, expected, [message] ) //相等判断
same( actual, expected, [message] ) //相同判断(包含数组、对象等)

//异步测试
start( ) //TestRunner停止后再启动测试
stop( timeout ) //停止TestRunner的等待异步测试运行

建立一个测试页面,引入 qunit.js 和 qunit.css 这两个必需的文件

QUnit example

    测试用例

    //定义测试模块
    module( "测试示例" );
    //定义一个简单的函数,判断参数是不是数字
    function simpleTest(para) {
      if(typeof para == "number") {
        return true;
      }
      else{
        return false;
      }
    }
    //开始单元测试
    test('simpleTest()', function() {
      //列举各种可能的情况,注意使用 ! 保证表达式符合应该的逻辑
      ok(simpleTest(2), '2是一个数字');
      ok(!simpleTest("2"), '"2"不是一个数字');
    });
    
    //定义一个简单的函数,返回数字和2的乘积
      function simpleTest1(para) {
        return para * 2;
      }
      //开始单元测试
      test('simpleTest1()', function() {
        //列举各种可能的情况
        equals(simpleTest1(2), 4, '2 * 2 等于 4');
        equals(simpleTest(2), 3, '2 * 2 等于 3');
      });
    
    //定义一个简单的函数,返回一个数组
      function simpleTest2() {
        return [1, 2];
      }
      //开始单元测试
      test('simpleTest2()', function() {
        //列举各种可能的情况
        equals(simpleTest2(), [1, 2], '函数返回数组[1, 2]');
        equals(simpleTest2(), [1, 1], '函数返回数组[1, 1]');
      });
    
    //异步测试
    module( "异步测试示例" );
    //setTimeout
    test('asynchronous test', function() {
      // 暂停测试
      stop();
    
      setTimeout(function() {
        ok(true, '完成运行');
        //待测试完成后,恢复
        start();
      }, 100)
    })
    //另一种形式
    asyncTest('asynchronous test', function() {
      setTimeout(function() {
        ok(true);
        //待测试完成后,恢复
        start();
      }, 100)
    })
    
    //Ajax测试
    function ajax(successCallback) {
      $.ajax({
        url: 'server.php',
        success: successCallback
      });
    }
    
    test('asynchronous test', function() {
      // 暂停测试
      stop();
    
      ajax(function() {
        // 异步调用判断
      })
    
      setTimeout(function() {
        //异步测试完成后,恢复
        start();
      }, 2000);
    });
    
    文章标签:
    02月 25

    单元测试大多数由开发人员来完成,测试人员技术背景较好或者开发系统软件时可能会安排测试人员进行单元测试,大多数进行的单元测试都是开发人员调试程序或者开发组系统联合调试的过程。

    单元测试一般包括五个方面的测试:

    一、模块接口测试

    模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。模块接口测试也是集成测试的重点,这里进行的测试主要是为后面打好基础。

    测试接口正确与否应该考虑下列因素: 

    1、输入的实际参数与形式参数的个数是否相同;

    2、输入的实际参数与形式参数的属性是否匹配;

    3、输入的实际参数与形式参数的量纲是否一致;

    4、调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;

    5、调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;

    6、调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;

    7、调用预定义函数时所用参数的个数、属性和次序是否正确;

    8、是否存在与当前入口点无关的参数引用;

    9、是否修改了只读型参数;

    10、对全程变量的定义各模块是否一致;

    11、是否把某些约束作为参数传递。


    如果模块功能包括外部输入输出,还应该考虑下列因素: 

    1、文件属性是否正确;

    2、OPEN/CLOSE语句是否正确;

    3、格式说明与输入输出语句是否匹配;

    4、缓冲区大小与记录长度是否匹配;

    5、文件使用前是否已经打开;

    6、是否处理了文件尾;

    7、是否处理了输入/输出错误;

    8、输出信息中是否有文字性错误。


    二、局部数据结构测试

    检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确,局部功能是整个功能运行的基础。重点是一些函数是否正确执行,内部是否运行正确。

    局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误: 
    1、不合适或不相容的类型说明;  
    2、变量无初值;  
    3、变量初始化或省缺值有错;  
    4、不正确的变量名(拼错或不正确地截断);  
    5、出现上溢、下溢和地址异常。


    三、边界条件测试

    边界条件测试是单元测试中最重要的一项任务。众所周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。边界条件测试是一项基础测试,也是后面系统测试中的功能测试的重点,边界测试执行的较好,可以大大提高程序健壮性。

    四、模块中所有独立路径测试

    在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。测试目的主要是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。具体做法就是程序员逐条调试语句。

    常见的错误包括: 
    1、误解或用错了算符优先级;  
    2、混合类型运算;  
    3、变量初值错;  
    4、精度不够;  
    5、表达式符号错。


    比较判断与控制流常常紧密相关,测试时注意下列错误:  
    1、不同数据类型的对象之间进行比较;  
    2、错误地使用逻辑运算符或优先级;  
    3、因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;  
    4、比较运算或变量出错;  
    5、循环终止条件或不可能出现;  
    6、迭代发散时不能退出;  
    7、错误地修改了循环变量。


    五、模块的各条错误处理通路测试

    程序在遇到异常情况时不应该退出,好的程序应能预见各种出错条件,并预设各种出错处理通路。如果用户不按照正常操作,程序就退出或者停止工作,实际上也是一种缺陷,因此单元测试要测试各种错误处理路径。

    一般这种测试着重检查下列问题: 
    1、输出的出错信息难以理解;  
    2、记录的错误与实际遇到的错误不相符;  
    3、在程序自定义的出错处理段运行之前,系统已介入;  
    4、异常处理不当;  
    5、错误陈述中未能提供足够的定位出错信息。

    文章标签:
    02月 25

    学习web测试要点

    web 评论关闭

    一、功能测试

    1、链接测试
    (1)、测试所有链接是否按指示的那样确实链接到了该链接的页面;
    (2)、测试所链接的页面是否存在;
    (3)、保证Web应用系统上没有孤立的页面(所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问)。


    2、表单测试
    (1)、注册、登陆、信息提交等,必须测试提交操作的完整性,以校验提交给服务器的信息的正确性;
    (2)、用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等;
    (3)、检验默认值的正确性;
    (4)、如表单只能接受指定的某些值,测试时跳过这些字符,看系统是否会报错。


    3、Cookies测试(session测试同)
    (1)、Cookies是否起作用;
    (2)、Cookies是否按预定的时间进行保存;
    (3)、刷新对Cookies有什么影响。


    4、设计语言测试
    (1)、使用哪种版本的HTML;
    (2)、验证脚本语言Javascrīpt。


    5、数据库测试
    (1)、数据一致性错误:主要是由于用户提交的表单信息不正确而造成的;
    (2)、输出错误:主要是由于网络速度或程序设计问题等引起的。


    二、性能测试


    1、连接速度测试
    (1)、Web系统响应时间;
    (2)、超时的限制。


    2、负载测试
    (1)、某个时刻同时访问Web系统的用户数量;
    (2)、也可以是在线数据处理的数量。


    3、压力测试
    (1)、压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。
    (2)、压力测试的区域包括表单、登陆和其他信息传输页面等。


    三、可用性测试


    1、导航测试

    (1)、导航是否直观
    (2)、Web系统的主要部分是否可通过主页存取
    (3)、系统是否需要站点地图、搜索引擎或其他的导航帮助
    (4)、Web应用系统的页面结构、导航、菜单、连接的风格是否一致 
    (5)、Web应用系统导航帮助要尽可能地准确。Web应用系统的层次一旦决定,就要着手测试用户导航功能。


    2、图形测试
    一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有:
    (1)、要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间;
    (2)、Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面;
    (3)、验证所有页面字体的风格是否一致;
    (4)、背景颜色应该与字体颜色和前景颜色相搭配;
    (5)、图片的大小和质量也是一个很重要的因素,一般采用JPG或GIF压缩。


    3、内容测试
    检验Web应用系统提供信息的正确性、准确性和相关性。
    信息的正确性是指信息是可靠的还是误传的 。


    4、整体界面测试
    整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致?当然,对界面的整体测试并不能单靠个人直觉来评定;每个人的审美观、专业角度、系统面向的行业及用户、甚至性别与年龄等等,都是可能导致对界面作出不同评价的因素。所以要明白在对整体界面的测试过程中,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。


    四、兼容性测试


    1、平台测试
    在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。


    2、浏览器测试
    (1)、浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、Javascrīpt、ActiveX、 plug-ins或不同的HTML规格有不同的支持。
    (2)、测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。


    五、安全性测试
    (1)、现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等;
    (2)、Web应用系统是否有超时的限制,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用;
    (3)、为了保证Web应用系统的安全性,需要测试相关信息是否写进了日志文件、是否可追踪;
    (4)、当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性;
    (5)、服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。
    (6)、通过模拟攻击的形式拷贝Web应用程序的某个功能点的url地址,然后打开新的页面输入该url地址看其是否能跨过系统的登录模块直接进入该功能点。

    文章标签:
    第 1 页 / 共 12 页12345»10...Last »