<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>一树博客 &#187; 技术文档</title>
	<atom:link href="http://www.onono.org/category/it/feed" rel="self" type="application/rss+xml" />
	<link>http://www.onono.org</link>
	<description>一树的随想、生活与资料存档。</description>
	<lastBuildDate>Thu, 02 Sep 2010 00:13:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>FreeBSD下SNMP协议简单配置</title>
		<link>http://www.onono.org/2010/07/467.htm</link>
		<comments>http://www.onono.org/2010/07/467.htm#comments</comments>
		<pubDate>Mon, 19 Jul 2010 05:06:19 +0000</pubDate>
		<dc:creator>一树</dc:creator>
				<category><![CDATA[技术文档]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[SNMP]]></category>

		<guid isPermaLink="false">http://www.onono.org/?p=467</guid>
		<description><![CDATA[cd /usr/ports/net-mgmt/net-snmp make config make install clean 样例文件位于/usr/local/share/snmp/snmpd.conf.example 使用snmpconf命令生成配置文件snmpd.conf $ /usr/local/bin/snmpconf -i -g basic_setup The following installed configuration files were found: //如果之前有过配置文件，会提示，可忽略 1:  /usr/local/share/snmp/snmpd.conf Would you like me to read them in?  Their content will be merged with the output files created by this session. Valid answer examples: &#8220;all&#8221;, &#8220;none&#8221;,&#8221;3&#8243;,&#8221;1,2,5&#8243; Read in which (default =]]></description>
			<content:encoded><![CDATA[<p><code><br />
cd /usr/ports/net-mgmt/net-snmp<br />
make config<br />
make install clean<br />
</code><br />
样例文件位于/usr/local/share/snmp/snmpd.conf.example</p>
<p>使用snmpconf命令生成配置文件snmpd.conf</p>
<p>$ /usr/local/bin/snmpconf -i -g basic_setup<span id="more-467"></span></p>
<p>The following installed configuration files were found:</p>
<p>//如果之前有过配置文件，会提示，可忽略</p>
<p>1:  /usr/local/share/snmp/snmpd.conf</p>
<p>Would you like me to read them in?  Their content will be merged with the</p>
<p>output files created by this session.</p>
<p>Valid answer examples: &#8220;all&#8221;, &#8220;none&#8221;,&#8221;3&#8243;,&#8221;1,2,5&#8243;</p>
<p>Read in which (default = all): //可选择none，忽略之前的配置</p>
<p>************************************************</p>
<p>*** Beginning basic system information setup ***</p>
<p>************************************************</p>
<p>Do you want to configure the information returned in the system MIB group (contact info, etc)? (default = y): y</p>
<p>//选择y</p>
<p>Configuring: syslocation</p>
<p>Description:</p>
<p>The [typically physical] location of the system.</p>
<p>Note that setting this value here means that when trying to</p>
<p>perform an snmp SET operation to the sysLocation.0 variable will make</p>
<p>the agent return the &#8220;notWritable&#8221; error code.  IE, including</p>
<p>this token in the snmpd.conf file will disable write access to</p>
<p>the variable.</p>
<p>arguments:  location_string</p>
<p>The location of the system: Chengdu</p>
<p>//syslocation，填写这台被监控机的地理位置信息，方便查阅</p>
<p>Finished Output: syslocation  Chengdu</p>
<p>Configuring: syscontact</p>
<p>Description:</p>
<p>The contact information for the administrator</p>
<p>Note that setting this value here means that when trying to</p>
<p>perform an snmp SET operation to the sysContact.0 variable will make</p>
<p>the agent return the &#8220;notWritable&#8221; error code.  IE, including</p>
<p>this token in the snmpd.conf file will disable write access to</p>
<p>the variable.</p>
<p>arguments:  contact_string</p>
<p>The contact information: orz（at）onono.org</p>
<p>//该服务器的管理员联系方式，最好填一个电子邮箱，服务器不可用的时候，可通知管理员</p>
<p>Finished Output: syscontact  orz（at）onono.org</p>
<p>Do you want to properly set the value of the sysServices.0 OID (if you don&#8217;t know, just say no)? (default = y): y</p>
<p>//选择y</p>
<p>Configuring: sysservices</p>
<p>Description:</p>
<p>The proper value for the sysServices object.</p>
<p>arguments:  sysservices_number</p>
<p>does this host offer physical services (eg, like a repeater) [answer 0 or 1]: 0</p>
<p>does this host offer datalink/subnetwork services (eg, like a bridge): 0</p>
<p>does this host offer internet services (eg, supports IP): 1</p>
<p>does this host offer end-to-end services (eg, supports TCP): 1</p>
<p>does this host offer application services (eg, supports SMTP): 1</p>
<p>//依次选择0、0、1、1、1，由于主机不充当网桥等角色，前两项填0</p>
<p>Finished Output: sysservices 76</p>
<p>**************************************</p>
<p>*** BEGINNING ACCESS CONTROL SETUP ***</p>
<p>**************************************</p>
<p>Do you want to configure the agent&#8217;s access control? (default = y): n</p>
<p>****************************************</p>
<p>*** Beginning trap destination setup ***</p>
<p>****************************************</p>
<p>Do you want to configure where and if the agent will send traps? (default = y): n</p>
<p>****************************************</p>
<p>*** Beginning monitoring setup ***</p>
<p>****************************************</p>
<p>Do you want to configure the agent&#8217;s ability to monitor various aspects of your system? (default = y): n</p>
<p>The following files were created:</p>
<p>接下来，使用net-snmp-config &#8211;create-snmpv3-user -ro命令配置权限，先确认snmpd已停止：</p>
<p># /usr/local/etc/rc.d/snmpd stop</p>
<p>然后运行：</p>
<p># net-snmp-config &#8211;create-snmpv3-user -ro</p>
<p>Enter a SNMPv3 user name to create:</p>
<p>myusername     //用户名</p>
<p>Enter authentication pass-phrase:</p>
<p>pass1234       //密码，长度大于8位</p>
<p>Enter encryption pass-phrase:</p>
<p>[press return to reuse the authentication pass-phrase]</p>
<p>phrase1234     //phrase，长度大于8位</p>
<p>adding the following line to /var/net-snmp/snmpd.conf:</p>
<p>createUser myusername MD5 &#8220;pass1234&#8243; DES phrase1234</p>
<p>adding the following line to /usr/local/share/snmp/snmpd.conf:</p>
<p>rouser myusername</p>
<p>启动snmpd：/usr/local/etc/rc.d/snmpd start</p>
<p>用snmpwalk测试一下刚才的设置是否生效：</p>
<p>/usr/local/bin/snmpwalk -v 3 -l authPriv -u myusername -a MD5 -A 12345678 -x DES -X 87654321 localhost</p>
<p>SNMPv2-MIB::sysDescr.0 = STRING: FreeBSD ys-bsd.onono.org 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21 15:48:17 UTC 2009     root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386<br />
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::org<br />
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (86606) 0:14:26.06<br />
SNMPv2-MIB::sysContact.0 = STRING: Me &lt;orz（at）onono.org&gt;</p>
<p>……</p>
<p>……</p>
<p>NOTIFICATION-LOG-MIB::nlmLogDateAndTime.&#8221;default&#8221;.1 = STRING: 2010-7-19,12:49:39.0,-8:0<br />
NOTIFICATION-LOG-MIB::nlmLogDateAndTime.&#8221;default&#8221;.2 = STRING: 2010-7-19,12:49:39.0,-8:0<br />
NOTIFICATION-LOG-MIB::nlmLogDateAndTime.&#8221;default&#8221;.3 = STRING: 2010-7-19,12:49:39.0,-8:0<br />
NOTIFICATION-LOG-MIB::nlmLogDateAndTime.&#8221;default&#8221;.4 = STRING: 2010-7-19,12:49:39.0,-8:0</p>
<p>确认snmpd已侦听UDP161端口</p>
<p># sockstat -l4</p>
<p>USER   COMMAND  PID   FD PROTO LOCAL ADDRESS FOREIGN ADDRESS</p>
<p><span style="color: #ff0000;">root     snmpd      47043 9  udp4   *:161                 *:*</span></p>
<p>www      httpd      41173 3  tcp4   *:80                  *:*</p>
<p>www      httpd      41172 3  tcp4   *:80                  *:*</p>
<p>www      httpd      41171 3  tcp4   *:80                  *:*</p>
<p>root     httpd      92407 3  tcp4   *:80                  *:*</p>
<p>root     sshd       5388  4  tcp4   *:22                  *:*</p>
<p>mysql    mysqld     82716 5  tcp4   *:3306                *:*</p>
<p>root     sendmail   831   4  tcp4   127.0.0.1:25          *:*</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onono.org/2010/07/467.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>毕业设计（论文）——公司人事管理系统</title>
		<link>http://www.onono.org/2010/07/453.htm</link>
		<comments>http://www.onono.org/2010/07/453.htm#comments</comments>
		<pubDate>Sun, 18 Jul 2010 07:40:00 +0000</pubDate>
		<dc:creator>一树</dc:creator>
				<category><![CDATA[技术文档]]></category>
		<category><![CDATA[公司人事管理系统]]></category>
		<category><![CDATA[毕业论文]]></category>

		<guid isPermaLink="false">http://www.onono.org/?p=453</guid>
		<description><![CDATA[前不久本科的毕业论文，马马虎虎的答辩了一番。数据库和程序是自己写的，我文采不好，文字的部分参考了其他论文，粘贴在此供分享，转载请注明出处，谢谢。 摘 要 以C#技术、SQLServer技术为基础的公司人事管理系统将帮助企业科学、正规且高效运转。使用“三层架构”的整体概念设计的企业人事管理系统，包含人事管理、工资管理、综合管理、系统管理、用户管理等功能。 关键字：C#，SQL Server 2005，软件工程 Abstract A C-sharp and SQL Server technology-based personnel management system will help the company run their business in a scientific, formal and effective way. The 3-tier architecture build system including personnel management, payroll management, general management, system management, user management and many other functions. Key words: C# ,]]></description>
			<content:encoded><![CDATA[<p>前不久本科的毕业论文，马马虎虎的答辩了一番。数据库和程序是自己写的，我文采不好，文字的部分参考了其他论文，粘贴在此供分享，转载请注明出处，谢谢。<br />
<span id="more-453"></span></p>
<p style="text-align: center;">摘 要</p>
<p>以C#技术、SQLServer技术为基础的公司人事管理系统将帮助企业科学、正规且高效运转。使用“三层架构”的整体概念设计的企业人事管理系统，包含人事管理、工资管理、综合管理、系统管理、用户管理等功能。</p>
<p>关键字：C#，SQL Server 2005，软件工程</p>
<p style="text-align: center;">Abstract</p>
<p>A C-sharp and SQL Server technology-based personnel management system will help the company run their business in a scientific, formal and effective way.</p>
<p>The 3-tier architecture build system including personnel management, payroll management, general management, system management, user management and many other functions.</p>
<p>Key words: C# , SQL Server 2005 , software engineering</p>
<p><strong>目</strong> <strong>录</strong></p>
<p>第一章 绪 言&#8230; 1</p>
<p style="padding-left: 30px;">第一节  项目开发的背景&#8230; 1</p>
<p style="padding-left: 30px;">第二节  项目开发的目的&#8230; 1</p>
<p style="padding-left: 30px;">第三节  项目提出的意义&#8230; 1</p>
<p style="padding-left: 30px;">第四节  可行性分析&#8230; 1</p>
<p style="padding-left: 60px;">一、经济上可行性&#8230; 1</p>
<p style="padding-left: 60px;">二、技术上可行性&#8230; 2</p>
<p style="padding-left: 60px;">三、时机上可行性&#8230; 2</p>
<p style="padding-left: 60px;">四、管理上的可行性&#8230; 2</p>
<p>第二章 开发工具&#8230; 3</p>
<p style="padding-left: 30px;">第一节  C#语言简介&#8230; 3</p>
<p style="padding-left: 30px;">第二节  .NET简介&#8230; 3</p>
<p style="padding-left: 30px;">第三节  SQLSever 数据库简介&#8230; 4</p>
<p>第三章 数据流程&#8230; 5</p>
<p style="padding-left: 30px;">第一节  数据流程图&#8230; 5</p>
<p style="padding-left: 30px;">第二节  数据字典&#8230; 5</p>
<p style="padding-left: 60px;">一、职员信息表&#8230; 5</p>
<p style="padding-left: 60px;">二、职员薪资表&#8230; 6</p>
<p style="padding-left: 60px;">三、职务变更表&#8230; 6</p>
<p style="padding-left: 60px;">四、职务名称表&#8230; 6</p>
<p style="padding-left: 60px;">五、职员职位表&#8230; 7</p>
<p style="padding-left: 60px;">六、考勤记录表&#8230; 7</p>
<p style="padding-left: 60px;">七、部门名称表&#8230; 7</p>
<p style="padding-left: 60px;">八、考评记录表&#8230; 7</p>
<p>第四章 项目实施&#8230; 9</p>
<p style="padding-left: 30px;">第一节  系统总体结构设计&#8230; 9</p>
<p style="padding-left: 60px;">一、人事工作流程&#8230; 9</p>
<p style="padding-left: 60px;">二、系统设计思想&#8230; 9</p>
<p style="padding-left: 60px;">三、功能分析&#8230; 9</p>
<p style="padding-left: 30px;">第二节  代码设计&#8230; 9</p>
<p style="padding-left: 60px;">一、编码简述&#8230; 9</p>
<p style="padding-left: 60px;">二、详细编码&#8230; 10</p>
<p>结束语&#8230; 12</p>
<p>谢词&#8230; 13</p>
<p>参考文献&#8230; 14</p>
<p>第一章 绪 言</p>
<p>第一节  项目开发的背景</p>
<p>近年来，随着计算机技术的发展和互联网时代的到来，我们已经进入了信息时代，也有人称为数字化时代，在这数字化的时代里，企业的人事需要高效率的管理。信息技术持续迅猛的发展，给传统的人事管理提出了更高的要求。怎样让繁杂的人事管理变得轻松？如何应对人事变动频繁的挑战？</p>
<p>以C#技术、SQLServer技术为基础的公司人事管理系统就是一个很好的解决方案，它们将帮助这个企业科学、正规且高效运转。</p>
<p>第二节  项目开发的目的</p>
<p>使用“三层架构”的整体概念来设计企业的人事管理系统。在这个概念下，开发出来的系统功能包括人事管理、工资管理、综合管理、系统管理、用户管理。</p>
<p>在此开发的公司人事管理系统，旨在适应信息时代，提高企业人事管理的效率，帮助企业科学正规运转，减轻管理者的压力和负担，企业的管理人员无需经过特殊的训练就可以使用这个系统，降低管理成本，最大程度的满足企业人事管理需求。</p>
<p>升级、改造现有的纸质档案，重建员工档案，以符合数字化的标准。</p>
<p>第三节  项目提出的意义</p>
<p>企业在人事管理中实现数字化、信息化、智能化，和传统的纸质档案管理相比，是一个全新的革命，能够给企业带来先进的现代化的人事管理思想方法和模式，提高管理的有效性。</p>
<p>数字化的人事管理系统有助于促进人事管理正规化，而且还大大降低了管理的成本。</p>
<p>第四节  可行性分析</p>
<p>一、经济上可行性</p>
<p>现在,计算机的价格已经十分低廉，性能却有了长足的进步。而本系统的开发。为企业的工作和经济效率带来了一个质的飞跃，主要表现有以下几个方面：</p>
<p>第一、本系统的运行可以代替人工进行许多繁杂的劳动；</p>
<p>第二、本系统的运行可以节省许多资源，例如纸质和笔墨；</p>
<p>第三、本系统的运行可以大大的提高企业的工作效率；</p>
<p>所以，本系统在经济上是可行的。</p>
<p>二、技术上可行性</p>
<p>技术上的可行性分析，主要分析技术条件能否顺利完成开发工作，硬、软件能否满足开发者的需要等。该管理系统采用了当前流行的Client/Server模式进行开发，引入了数据访问层、业务逻辑层、表现层——三层的架构体系，是技术发展的大势所趋，它把应用系统带入了一个崭新的发展时代。数据库服务器选用微软的SQLServer数据库，它能够处理大量数据，同时保持数据的完整性并提供许多高级管理功能。它的灵活性、安全性和易用性为数据库编程提供了良好的条件。因此，系统的软件开发平台已成熟可行。硬件方面，科技飞速发展的今天，硬件更新的速度越来越快，容量越来越大，可靠性越来越高，价格越来越低，其硬件平台完全能满足此系统的需要。</p>
<p>三、时机上可行性</p>
<p>目前，企业内部大多都实现了数字化办公，办公室的有线无线网路覆盖了情况也相当理想，企业良好的硬件设施为公司人事管理系统提供了坚实的基础。</p>
<p>四、管理上的可行性</p>
<p>企业的管理人员是否支持数字化管理，现有的管理制度和方法是否科学，规章制度是否齐全，原始数据是否正确等问题，需要企业高层人员作出进一步肯定。规章制度和管理方法是该系统的制度保障。</p>
<p>综上所述，此系统开发目标已明确，在技术和经济等方面都可行，并且投入少、见效快。因此系统的开发是完全可行的。</p>
<p><strong><br />
</strong></p>
<p>第二章 开发工具</p>
<p>第一节  C#语言简介</p>
<p>C#(读作“c－sharp”)作为微软的下一代面向对象的语言产品，能够让开发人员在．NET平台上快速地建立大量的应用程序。按照微软给出的定义，C#是一种源自于C和C++的，简单的、现代的、面向对象的和类型安全的程序设计语言。C#为程序员提供了开发飞速发展的Web应用程序所需的强大而灵活的功能。C#和Java的核心与C++比较有着相同的优势和局限，比起C++，C#将更容易被人们理解和接受，未来大量．NET平台的应用将由 C#开发。</p>
<p>例如，我们可以使用C#开发任何古典风格的Windows程序。不仅如此，不管是控制序、图形程序、NT服务程序，还是普通组件，乃至Web页面，都可以用C#开发出来。可以相信，不论是企业的决策者、管理者或员工，都将欣赏C#为企业所带来的一切。</p>
<p>C#语言需要．NET框架的支持。我们所说的很多C#语言的新特点和功能，如类型安全、垃圾收集、版本制、兼容性以及跨语言的异常处理和继承，这些都是依赖于底层的．NET框架来完成的。</p>
<p>第二节  .NET简介</p>
<p>．NET是Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据，而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。</p>
<p>．NET的最终目的就是让用户在任何地方、任何时间，以及利用任何设备都能访问他们所需要的信息、文件和程序。而用户不需要知道这些东西存在什么地方，甚至连如何获得等具体细节都不知道。他们只需发出请求，然后只管接收就是了，而所有后台的复杂性是完全屏蔽起来的。所以对于企业的IT人员来说，他们也不需要管理复杂的平台以及各种分布应用之间的工作是如何协调的。</p>
<p>．NET包括4个重要特点，一是软件变服务，二是基于XML的共同语言，三是融合多种设备和平台，四是新一代的人机界面。这四个特点基本上覆盖了．NET的技术特征。</p>
<p>融合多种设备和平台，随着Internet逐渐成为一个信息和数据的中心，各种设备和服务已经或正在接入和融入Internet，成为其中的一部分。．NET谋求与各种Internet接入设备和平台的一体化，主要关注在无线设备和家庭网络设备及相关软件、平台方面。</p>
<p>新一代的人机界面，新一代人机界面主要体现在“智能与互动”两个方面。．NET包括通过自然语音、视觉、手写等多种模式的输入和表现方法；基于XML的可编辑复合信息架构——通用画布；个性化的信息代理服务；使机器能够更好地进行自动处理的智能标记等技术。</p>
<p>第三节  SQLSever 数据库简介</p>
<p>Microsoft SQL Server 2000 是Microsoft 公司继SQL Server 6.5和SQL Server 7.0以后，在新千年推出的又一改进的新版关系型数据管理系统。它能使用户快捷地管理数据库和开发应用程序。SQL Server 2000 使用了了先进的数据库结构，与Windows DNA紧密集成，具有强大的Web 功能，它可以利用高端硬件平台以及最新网络和 存储技术，可以为最大的Web站点和企业应用提供优良的扩展性和可靠性，使用户能够在Internet 领域快速建立服务系统，为占领市场赢得宝贵的时间。同时，SQL Server 2000 还为用户提供了重要的安全性功能的增强，为用户的数据安全提供了可靠的保证。另外，SQL Server 2000还为用户提供了重要的安全性功能的增强，为用户的数据安全提供了可靠的保证。另外,SQL Server 2000 在数据库服务器自动管理技术方面处于数据库领域的领先地位，它可以使用户免去繁琐复杂的工作量，从而有精力处理更重要的问题，使用系统在商业战略上占得先机。</p>
<p>关系型数据库系统是当前最流行的数据库软件系统。它是一个非常复杂的软件系统，对数据库的所有操作，包括定义、查询、更新和各种运行控制最终都通过它来实现的，因它是使数据库系统具有资料共享、并发访问、资料独立等特性的根本保证。</p>
<p>就关系数据库管理系统(RDBMS)而言，它是位于用与操作系统之间的一层数据管理软件，它主要负责强化数据库的结构，简单来说包括如下功能：</p>
<p>1．维持数据库中资料的关系。</p>
<p>2．保障资料的正确存储，即保障定义资料之间的关系的种种规则不会被违背。</p>
<p>3．在系统出错时，把资料恢复到一个能保证一致性的状态。</p>
<p><strong><br />
</strong></p>
<p>第三章 数据流程</p>
<p>第一节  数据流程图</p>
<p><a href="http://www.onono.org/wp-content/uploads/2010/07/clip_image002.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-456" title="论文插图" src="http://www.onono.org/wp-content/uploads/2010/07/clip_image002-300x166.jpg" alt="" width="300" height="166" /></a></p>
<p>图1.数据流程图</p>
<p>第二节  数据字典</p>
<p>一、职员信息表</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="142" valign="top">列名</td>
<td width="142" valign="top">说明</td>
<td width="142" valign="top">数据类型</td>
<td width="142" valign="top">可为空值</td>
</tr>
<tr>
<td width="142" valign="top">user_id</td>
<td width="142" valign="top">用户ID</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（主键）</td>
</tr>
<tr>
<td width="142" valign="top">user_pass</td>
<td width="142" valign="top">密码</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">否</td>
</tr>
<tr>
<td width="142" valign="top">user_privilege</td>
<td width="142" valign="top">权限级别</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">否</td>
</tr>
<tr>
<td width="142" valign="top">user_name</td>
<td width="142" valign="top">用户名</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">否</td>
</tr>
<tr>
<td width="142" valign="top">user_sex</td>
<td width="142" valign="top">性别</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">birthplace</td>
<td width="142" valign="top">出生地</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">birthday</td>
<td width="142" valign="top">生日</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">education</td>
<td width="142" valign="top">教育程度</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">professional</td>
<td width="142" valign="top">专业</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">idcard</td>
<td width="142" valign="top">身份证</td>
<td width="142" valign="top">nchar(19)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">marriage</td>
<td width="142" valign="top">婚姻状况</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">political</td>
<td width="142" valign="top">政治面貌</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">tel</td>
<td width="142" valign="top">电话</td>
<td width="142" valign="top">nchar(13)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">zip_code</td>
<td width="142" valign="top">邮编</td>
<td width="142" valign="top">nchar(6)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">email</td>
<td width="142" valign="top">Email</td>
<td width="142" valign="top">nchar(20)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">home_place</td>
<td width="142" valign="top">住址</td>
<td width="142" valign="top">nchar(30)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">date_in</td>
<td width="142" valign="top">入公司时间</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">date_salary</td>
<td width="142" valign="top">起薪时间</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">depart_id</td>
<td width="142" valign="top">所在部门</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">work_title</td>
<td width="142" valign="top">职称</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">old_identity</td>
<td width="142" valign="top">原身份</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">old_job</td>
<td width="142" valign="top">原职务</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">old_company</td>
<td width="142" valign="top">原工作单位</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">date_beginwork</td>
<td width="142" valign="top">入职时间</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">exp</td>
<td width="142" valign="top">工作经验</td>
<td width="142" valign="top">varchar(50)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">job_id</td>
<td width="142" valign="top">职位</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否</td>
</tr>
<tr>
<td width="142" valign="top">etc</td>
<td width="142" valign="top">备注</td>
<td width="142" valign="top">varchar(50)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">avatar</td>
<td width="142" valign="top">头像</td>
<td width="142" valign="top">image</td>
<td width="142" valign="top">是</td>
</tr>
</tbody>
</table>
<p>图2.职员信息表</p>
<p>二、职员薪资表</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="142" valign="top">列名</td>
<td width="142" valign="top">说明</td>
<td width="142" valign="top">数据类型</td>
<td width="142" valign="top">可为空值</td>
</tr>
<tr>
<td width="142" valign="top">salary_id</td>
<td width="142" valign="top">薪水流水ID</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（主键）</td>
</tr>
<tr>
<td width="142" valign="top">user_id</td>
<td width="142" valign="top">用户</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（外键）</td>
</tr>
<tr>
<td width="142" valign="top">base_sa</td>
<td width="142" valign="top">底薪</td>
<td width="142" valign="top">smallmoney</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">overtime</td>
<td width="142" valign="top">加班费</td>
<td width="142" valign="top">smallmoney</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">subsidy</td>
<td width="142" valign="top">补贴</td>
<td width="142" valign="top">smallmoney</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">housing</td>
<td width="142" valign="top">房贴</td>
<td width="142" valign="top">smallmoney</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">bonus</td>
<td width="142" valign="top">奖金</td>
<td width="142" valign="top">smallmoney</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">other</td>
<td width="142" valign="top">其他</td>
<td width="142" valign="top">smallmoney</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">pension</td>
<td width="142" valign="top">养老金</td>
<td width="142" valign="top">smallmoney</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">health</td>
<td width="142" valign="top">医疗保险</td>
<td width="142" valign="top">smallmoney</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">actual</td>
<td width="142" valign="top">实际发放工资</td>
<td width="142" valign="top">smallmoney</td>
<td width="142" valign="top">否</td>
</tr>
<tr>
<td width="142" valign="top">post_datetime</td>
<td width="142" valign="top">计发时间</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
</tbody>
</table>
<p>图3.职员薪资表</p>
<p>三、职务变更表</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="142" valign="top">列名</td>
<td width="142" valign="top">说明</td>
<td width="142" valign="top">数据类型</td>
<td width="142" valign="top">可为空值</td>
</tr>
<tr>
<td width="142" valign="top">move_id</td>
<td width="142" valign="top">调令ID</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（主键）</td>
</tr>
<tr>
<td width="142" valign="top">user_id</td>
<td width="142" valign="top">用户</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（外键）</td>
</tr>
<tr>
<td width="142" valign="top">depart_old</td>
<td width="142" valign="top">旧部门</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（外键）</td>
</tr>
<tr>
<td width="142" valign="top">depart_new</td>
<td width="142" valign="top">新部门</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（外键）</td>
</tr>
<tr>
<td width="142" valign="top">job_old</td>
<td width="142" valign="top">旧职务</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（外键）</td>
</tr>
<tr>
<td width="142" valign="top">job_new</td>
<td width="142" valign="top">新职务</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（外键）</td>
</tr>
<tr>
<td width="142" valign="top">time_checkout</td>
<td width="142" valign="top">调出时间</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">time_checkin</td>
<td width="142" valign="top">调入时间</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">etc</td>
<td width="142" valign="top">备注</td>
<td width="142" valign="top">varchar(50)</td>
<td width="142" valign="top">是</td>
</tr>
</tbody>
</table>
<p>图4.职务变更表</p>
<p>四、职务名称表</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="142" valign="top">列名</td>
<td width="142" valign="top">说明</td>
<td width="142" valign="top">数据类型</td>
<td width="142" valign="top">可为空值</td>
</tr>
<tr>
<td width="142" valign="top">job_id</td>
<td width="142" valign="top">职务ID</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（主键）</td>
</tr>
<tr>
<td width="142" valign="top">job_name</td>
<td width="142" valign="top">职务名称</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">否</td>
</tr>
</tbody>
</table>
<p>图5.职务名称表</p>
<p>五、职员职位表</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="142" valign="top">列名</td>
<td width="142" valign="top">说明</td>
<td width="142" valign="top">数据类型</td>
<td width="142" valign="top">可为空值</td>
</tr>
<tr>
<td width="142" valign="top">job_id</td>
<td width="142" valign="top">职务ID</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（主键）（外键）</td>
</tr>
<tr>
<td width="142" valign="top">user_id</td>
<td width="142" valign="top">用户</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（主键）（外键）</td>
</tr>
</tbody>
</table>
<p>图6.职员职位表</p>
<p>六、考勤记录表</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="142" valign="top">列名</td>
<td width="142" valign="top">说明</td>
<td width="142" valign="top">数据类型</td>
<td width="142" valign="top">可为空值</td>
</tr>
<tr>
<td width="142" valign="top">att_id</td>
<td width="142" valign="top">考勤记录ID</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（主键）</td>
</tr>
<tr>
<td width="142" valign="top">user_id</td>
<td width="142" valign="top">用户</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（外键）</td>
</tr>
<tr>
<td width="142" valign="top">depart_id</td>
<td width="142" valign="top">部门</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">是（外键）</td>
</tr>
<tr>
<td width="142" valign="top">days_all</td>
<td width="142" valign="top">全勤天数</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">days_should</td>
<td width="142" valign="top">应出勤天数</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">years</td>
<td width="142" valign="top">年度</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">months</td>
<td width="142" valign="top">月份</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">datetime_begin</td>
<td width="142" valign="top">起始日期</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">datetime_end</td>
<td width="142" valign="top">截止日期</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
</tbody>
</table>
<p>图7.考勤记录表</p>
<p>七、部门名称表</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="142" valign="top">列名</td>
<td width="142" valign="top">说明</td>
<td width="142" valign="top">数据类型</td>
<td width="142" valign="top">可为空值</td>
</tr>
<tr>
<td width="142" valign="top">depart_id</td>
<td width="142" valign="top">部门ID</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（主键）</td>
</tr>
<tr>
<td width="142" valign="top">depart_name</td>
<td width="142" valign="top">部门名称</td>
<td width="142" valign="top">nchar(10)</td>
<td width="142" valign="top">否</td>
</tr>
</tbody>
</table>
<p>图8.部门名称表</p>
<p>八、考评记录表</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="142" valign="top">列名</td>
<td width="142" valign="top">说明</td>
<td width="142" valign="top">数据类型</td>
<td width="142" valign="top">可为空值</td>
</tr>
<tr>
<td width="142" valign="top">evaluate_id</td>
<td width="142" valign="top">考评流水ID</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（主键）</td>
</tr>
<tr>
<td width="142" valign="top">user_id</td>
<td width="142" valign="top">用户</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">否（外键）</td>
</tr>
<tr>
<td width="142" valign="top">depart_id</td>
<td width="142" valign="top">部门</td>
<td width="142" valign="top">int</td>
<td width="142" valign="top">是（外键）</td>
</tr>
<tr>
<td width="142" valign="top">evaluate_date</td>
<td width="142" valign="top">评价日期</td>
<td width="142" valign="top">datetime</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">results</td>
<td width="142" valign="top">业绩</td>
<td width="142" valign="top">varchar(20)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">results_desc</td>
<td width="142" valign="top">业绩说明</td>
<td width="142" valign="top">varchar(50)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">attitude</td>
<td width="142" valign="top">工作态度</td>
<td width="142" valign="top">varchar(20)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">attitude_desc</td>
<td width="142" valign="top">工作态度详情</td>
<td width="142" valign="top">varchar(50)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">lev</td>
<td width="142" valign="top">工作水平</td>
<td width="142" valign="top">varchar(20)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">lev_desc</td>
<td width="142" valign="top">工作水平详情</td>
<td width="142" valign="top">varchar(50)</td>
<td width="142" valign="top">是</td>
</tr>
<tr>
<td width="142" valign="top">etc</td>
<td width="142" valign="top">备注</td>
<td width="142" valign="top">varchar(50)</td>
<td width="142" valign="top">是</td>
</tr>
</tbody>
</table>
<p>图9.考评记录表</p>
<p>第四章 项目实施</p>
<p>第一节  系统总体结构设计</p>
<p>一、人事工作流程</p>
<p>企业人事管理部门在此系统中完成各项管理事务。</p>
<p>由档案管理人员录入初始信息，包括职务名称、部门名称、员工的资料，生产基本工资信息。</p>
<p>当职位变动时，由人事主管修改相关信息，并重新生成基本工资信息。</p>
<p>每日考勤情、病休假等情况记录在案，月末录入考勤与评价情况，自动计算出该月工资。</p>
<p>二、系统设计思想</p>
<p>利用企业现有的计算机平台资源，减少消耗人力、物力、财力，提高企业人事管理水平。最大程度满足企业的人事管理需求，轻松应对人事变动频繁的挑战，更方便快捷的查找、更新、删除人事资料。</p>
<p>三、功能分析</p>
<p>（一）人事管理：人事档案管理、考勤管理、考核管理、调动管理、职称评定、奖惩管理和人事统计。</p>
<p>（二）工资管理：职务设定、基本工资设定、工资表生成、工资表查询、工资奖惩、月末工资处理。</p>
<p>（三）综合管理：部门管理、假期与出差管理、员工聘用合同与通知。</p>
<p>（四）系统管理：数据备份与还原、系统初始化。</p>
<p>（五）用户管理：用户管理、权限设置。</p>
<p>第二节  代码设计</p>
<p>一、编码简述</p>
<p>（一）为了代码的规范要求代码风格统一，这具有重要的意义：</p>
<p>1.增加开发过程代码的强壮性、可读性、易维护性。</p>
<p>2.减少有经验和无经验开发人员编程所需的脑力工作。</p>
<p>3.为软件的良好维护性打下好的基础。</p>
<p>4.通过人为以及自动的方式对最终软件应用质量标准。</p>
<p>5.使新的开发人员快速适应项目氛围。</p>
<p>6.支持项目资源的复用：允许开发人员从一个项目区域（或子项目团队）移动到另一个，而不需要重新适应新的子项目团队的氛围。</p>
<p>（二）代码优化的意义：</p>
<p>1.仅仅对符合功能说明书的要求、能正确运行的代码进行优化是有意义的。</p>
<p>2.代码优化能减少冗余代码的数量，用更少的代码来实现同样的功能。</p>
<p>3.提高代码的内聚程度，减少耦合程度。</p>
<p>4.对代码的抽象能提高代码的重用度，对今后其他项目的进度有非常重要的意义。</p>
<p>二、详细编码</p>
<p>（一）数据访问层(DAL)</p>
<p>数据访问层（Data Access Layer）简称为DAL，它是程序中和数据库进行交互的层。该层直接操作数据库，针对数据的增添、删除、修改、更新、查找等。对每一个数据表，都有一个类来完成一些方法，以满足对数据表的各种操作。</p>
<p>一个名为DbHelperSQL的类用于维护与SQLServer数据库的连接、可调用存储过程，所有的T-SQL查询语句均由这个类来执行，最后将数据集返回给业务逻辑层。</p>
<p>（二）业务逻辑层(BLL)</p>
<p>业务逻辑层（Business Logic Layer）是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计。</p>
<p>业务逻辑层在体系架构中的位置很关键，它处于数据访问层与表示层中间，起到了数据交换中承上启下的作用。由于层是一种弱耦合结构，层与层之间的依赖是向下的，底层对于上层而言是“无知”的，改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时，遵循了面向接口设计的思想，那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下，理想的分层式架构，应该是一个支持可抽取、可替换的“抽屉”式架构。对于数据访问层而言，它是调用者；对于表示层而言，它却是被调用者。</p>
<p>数据的有效性验证的工作在这个层完成，以更好的保证程序运行的健壮性。如不允许将必填的选项留空、数据格式是否正确以及数据类型验证、用户权限的合法性判断等。通过以上的诸多判断以决定是否将操作继续向后传递，尽量保证程序的正常运行。</p>
<p>（三）表示层（UI）</p>
<p>表示层位于最外层（User Interface），离用户最近。用于显示数据和接收用户输入的数据，为用户提供一种交互式操作的界面。合理的摆放各类控件，整齐的排列，给用户以良好的视觉体验。</p>
<p>（四）Model层</p>
<p>Model层里面的一个类对应数据库里面的一张表，类里面的每一个属性对应表里面的一个字段，每个属性都有自己的GET和SET方法，项目中的数据存取都要依靠GET和SET方法来实现。它不属于纵向的某一个层，而是所有层都要用到的业务实体层。</p>
<p><strong><br />
</strong></p>
<p>结束语</p>
<p>在本系统的开发过程中，在知识、经验方面都存在着不足。另外，在整个开发的过程中，时间也比较仓促。因此，该系统必然会存在一些缺陷和不足。因为对企业人事管理的整个流程不够熟悉，在做需求分析的时候可能没有完全满足用户的需求。</p>
<p>尽管本管理系统存在着很多漏洞，但其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点，仍不失为企业人事管理的一个强大工具。通过开发这个系统，我掌握了软件开发的流程，巩固了基本知识，让我更熟练的使用Visual Studio 2005开发软件。在这次毕业设计论文中的收获并不仅仅是掌握开发工具的应用，更是学会了设计系统的思维方法，以及与同学们之间相互帮助的精神。</p>
<p>经过长时间的构思与设计，在指导老师的精心指导和安排下，本系统已经设计完毕。其使用功能基本符合公司在实际工作的需要，具有一定的实用性。但是由于时间比较仓促，加上本人软件设计经验的不足。因此，在分析问题、解决问题时显得不够严密、完善，还需要在以后的工作中不断地改进和完善。</p>
<p>在这次的毕业设计中，让我深深地体现到进行软件开发不是一件简单的事情，它需要设计者具有全面的专业知识、缜密的思维、严谨的工作态度以及较高的分析问题、解决问题的能力，而我在很多方面还有欠缺。</p>
<p>谢词（略）</p>
<p>参考文献</p>
<p>[1] 程志云，张帆，崔翔，《数据库原理与SQL Server 2005》，机械工业出版社，2009</p>
<p>[2] 崔淼，陈明非，《Visual C# 2005程序设计教程》，机械工业出版社，2008</p>
<p>附图：</p>
<p><a href="http://www.onono.org/wp-content/uploads/2010/07/界面展示-人事档案.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-462" title="界面展示-人事档案" src="http://www.onono.org/wp-content/uploads/2010/07/界面展示-人事档案-300x192.jpg" alt="" width="300" height="192" /></a></p>
<p><a href="http://www.onono.org/wp-content/uploads/2010/07/界面展示-三层架构.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-463" title="界面展示-三层架构" src="http://www.onono.org/wp-content/uploads/2010/07/界面展示-三层架构-300x191.jpg" alt="" width="300" height="191" /></a></p>
<p><a href="http://www.onono.org/wp-content/uploads/2010/07/界面展示-数据库展示.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-464" title="界面展示-数据库展示" src="http://www.onono.org/wp-content/uploads/2010/07/界面展示-数据库展示-300x207.jpg" alt="" width="300" height="207" /></a></p>
<p><a href="http://www.onono.org/wp-content/uploads/2010/07/数据流程图.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-465" title="数据流程图" src="http://www.onono.org/wp-content/uploads/2010/07/数据流程图-300x168.jpg" alt="" width="300" height="168" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.onono.org/2010/07/453.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginx相关参数配置备忘</title>
		<link>http://www.onono.org/2010/03/424.htm</link>
		<comments>http://www.onono.org/2010/03/424.htm#comments</comments>
		<pubDate>Sun, 28 Mar 2010 16:31:19 +0000</pubDate>
		<dc:creator>一树</dc:creator>
				<category><![CDATA[技术文档]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://www.onono.org/?p=424</guid>
		<description><![CDATA[（暂未验证正确性） discuz论坛重写参数 location / { if (!-e $request_filename) { rewrite ^/archiver/((fid&#124;tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last; rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&#38;page=$2 last; rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&#38;extra=page%3D$3&#38;page=$2 last; rewrite ^/space-(username&#124;uid)-(.+)\.html$ /space.php?$1=$2 last; rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last; break; } } 防盗链 location ~* ^.+\.(gif&#124;jpg&#124;png&#124;swf&#124;flv&#124;rar&#124;zip)$ { valid_referers none blocked server_names *.onono.org http://localhost; if ($invalid_referer) { rewrite ^/ http://error.org/images/error.gif; return 403; } } WordPress #]]></description>
			<content:encoded><![CDATA[<p>（暂未验证正确性）<br />
<span id="more-424"></span><br />
discuz论坛重写参数<br />
<code><br />
location / {<br />
if (!-e $request_filename) {<br />
rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$   /archiver/index.php?$1 last;<br />
rewrite ^/forum-([0-9]+)-([0-9]+)\.html$   /forumdisplay.php?fid=$1&amp;page=$2 last;<br />
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$  /viewthread.php?tid=$1&amp;extra=page%3D$3&amp;page=$2 last;<br />
rewrite ^/space-(username|uid)-(.+)\.html$   /space.php?$1=$2 last;<br />
rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;<br />
break;<br />
}<br />
}</code></p>
<p>防盗链<br />
<code><br />
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {<br />
valid_referers none blocked server_names *.onono.org http://localhost;<br />
if ($invalid_referer) {<br />
rewrite   ^/   http://error.org/images/error.gif;<br />
return   403;<br />
}<br />
}<br />
</code></p>
<p>WordPress<br />
<code><br />
# SEO friendly URLs for WordPress<br />
#<br />
location / {<br />
  root /path/to/YOURDIRECTORY/public_html/forums;<br />
  index index.php;<br />
  if (!-e $request_filename) {<br />
    rewrite ^(.*)$ /index.php?q=$1 last;<br />
  }<br />
}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.onono.org/2010/03/424.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>win2003下无法运行cronolog原因探究</title>
		<link>http://www.onono.org/2009/12/404.htm</link>
		<comments>http://www.onono.org/2009/12/404.htm#comments</comments>
		<pubDate>Sat, 19 Dec 2009 13:39:19 +0000</pubDate>
		<dc:creator>一树</dc:creator>
				<category><![CDATA[技术文档]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[cronolog]]></category>
		<category><![CDATA[win2003]]></category>

		<guid isPermaLink="false">http://www.onono.org/?p=404</guid>
		<description><![CDATA[cronolog官网：http://cronolog.org/ cronolog的安装很简单，把cronolog.exe扔进apache/bin目录就行了，在设置虚拟主机日志的时候，加入相应的格式即可。 问题是，完全正确的设置以后，Apache服务就不能重新启动了，在windows系统日志和Apache日志里都留下了错误信息，windows系统日志的错误信息看了没用，让人摸不到头脑，Apache日志里写的是Access is denied.  : Couldn&#8217;t start ErrorLog process Unable to open logs 初步分析应该是权限不够，什么权限？不外乎就是读和执行，无论是Apache安装目录还是日志存放目录，Apache进程的运行用户都有读写和运行权限，甚至所有磁盘为Apache进程加上读写运行权限，都行不通。显然，排除了NTFS权限导致的权限不够的原因。后来使用Apache自带的rotatelogs也行不通，而且网上千篇一律的说rotatelogs有漏洞，时间久了会产生大量同名的进程，累积起来就导致日志记录失败。 最后在cronolog的网站上仿佛z找到了答案：http://cronolog.org/security.html 在类Unix系统上运行cronolog，通常需要root权限。在查阅一些英文论坛的时候，提问者说在WinXP下运行Apache+cronolog没有问题，完全移植到win2003上就行不通了，win2003特殊在什么地方呢？ 在Apache官方文档上是这样写的：http://httpd.apache.org/docs/2.2/platform/windows.html windows平台上建议新建一个用户，赋予Users权限，让这个用户运行httpd服务。在winXP上，不会考虑权限等问题，因为几乎所有用户安装的应用程序都是administratiors权限。 受此启发，win2003上运行httpd服务的用户是apache，立即为这个用户赋予administratiors组权限，Apache立刻启动成功！在进程中，多了几个cmd.exe和cronolog.exe进程，所属用户正是apache，每份需要切割的日志会产生2个cmd和2个cronolog进程，切割四份日志就产生了16个进程，每个占用1M左右。 问题解决，但是Apache是不建议以administratiors权限运行的，会带来安全风险，linux上也大多建议以nobody运行Apache。windows上运行Apache还是有令人不爽的地方，凑合着用了。]]></description>
			<content:encoded><![CDATA[<p>cronolog官网：<a href="http://cronolog.org/" target="_blank">http://cronolog.org/</a></p>
<p>cronolog的安装很简单，把cronolog.exe扔进apache/bin目录就行了，在设置虚拟主机日志的时候，加入相应的格式即可。</p>
<p>问题是，完全正确的设置以后，Apache服务就不能重新启动了，在windows系统日志和Apache日志里都留下了错误信息，windows系统日志的错误信息看了没用，让人摸不到头脑，Apache日志里写的是Access is denied.  : Couldn&#8217;t start ErrorLog process<br />
Unable to open logs</p>
<p><span id="more-404"></span>初步分析应该是权限不够，什么权限？不外乎就是读和执行，无论是Apache安装目录还是日志存放目录，Apache进程的运行用户都有读写和运行权限，甚至所有磁盘为Apache进程加上读写运行权限，都行不通。显然，排除了NTFS权限导致的权限不够的原因。后来使用Apache自带的rotatelogs也行不通，而且网上千篇一律的说rotatelogs有漏洞，时间久了会产生大量同名的进程，累积起来就导致日志记录失败。</p>
<p>最后在cronolog的网站上仿佛z找到了答案：<a href="http://cronolog.org/security.html" target="_blank">http://cronolog.org/security.html</a></p>
<p>在类Unix系统上运行cronolog，通常需要root权限。在查阅一些英文论坛的时候，提问者说在WinXP下运行Apache+cronolog没有问题，完全移植到win2003上就行不通了，win2003特殊在什么地方呢？</p>
<p>在Apache官方文档上是这样写的：<a href="http://httpd.apache.org/docs/2.2/platform/windows.html" target="_blank">http://httpd.apache.org/docs/2.2/platform/windows.html</a></p>
<p>windows平台上建议新建一个用户，赋予Users权限，让这个用户运行httpd服务。在winXP上，不会考虑权限等问题，因为几乎所有用户安装的应用程序都是administratiors权限。</p>
<p>受此启发，win2003上运行httpd服务的用户是apache，立即为这个用户赋予administratiors组权限，Apache立刻启动成功！在进程中，多了几个cmd.exe和cronolog.exe进程，所属用户正是apache，每份需要切割的日志会产生2个cmd和2个cronolog进程，切割四份日志就产生了16个进程，每个占用1M左右。</p>
<p>问题解决，但是Apache是不建议以administratiors权限运行的，会带来安全风险，linux上也大多建议以nobody运行Apache。windows上运行Apache还是有令人不爽的地方，凑合着用了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onono.org/2009/12/404.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>win2003 + Apache + ZendCore + MySQL + hMail + FileZilla解决方案</title>
		<link>http://www.onono.org/2009/12/398.htm</link>
		<comments>http://www.onono.org/2009/12/398.htm#comments</comments>
		<pubDate>Thu, 17 Dec 2009 11:13:00 +0000</pubDate>
		<dc:creator>一树</dc:creator>
				<category><![CDATA[技术文档]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.onono.org/?p=398</guid>
		<description><![CDATA[win2003上安装Apache效率肯定比Linux环境低，这是先天不足，操作系统暂时换不了的情况下，为了使用htaccess等一些熟悉的功能，只好凑合着在win2003上用Apache，总比IIS跑PHP要好。 ZendCore配置PHP挺方便的，以fast-cgi方式运行PHP，据说效率比较高，所以选了它。稍微修改一下php-cgi.exe的进程数，默认是8个，服务器实际上很空间，用不了那么多，就改为了4个。 MySQL没什么好说的。 由于没钱买WinMail，也不想用破解的，免费的hMail倒是不错的选择，使用MySQL数据库的邮件系统。 FTP服务器为什么没有选择Serv-U？同理，付费的原因，轻量级的FileZilla同样好用。 整个安装完毕，重启，观察状态，MySQL和一长串的php-cgi.exe占用内存最多，加上其他必须运行的进程，内存占用约700~800兆。 安装包都是在官网下载的： http://httpd.apache.org/ http://www.zend.com/en/products/platform/downloads http://dev.mysql.com/downloads/ http://www.hmailserver.com/ http://filezilla-project.org/ 供参考。]]></description>
			<content:encoded><![CDATA[<p>win2003上安装Apache效率肯定比Linux环境低，这是先天不足，操作系统暂时换不了的情况下，为了使用htaccess等一些熟悉的功能，只好凑合着在win2003上用Apache，总比IIS跑PHP要好。</p>
<p>ZendCore配置PHP挺方便的，以fast-cgi方式运行PHP，据说效率比较高，所以选了它。稍微修改一下php-cgi.exe的进程数，默认是8个，服务器实际上很空间，用不了那么多，就改为了4个。</p>
<p>MySQL没什么好说的。</p>
<p>由于没钱买WinMail，也不想用破解的，免费的hMail倒是不错的选择，使用MySQL数据库的邮件系统。</p>
<p>FTP服务器为什么没有选择Serv-U？同理，付费的原因，轻量级的FileZilla同样好用。</p>
<p>整个安装完毕，重启，观察状态，MySQL和一长串的php-cgi.exe占用内存最多，加上其他必须运行的进程，内存占用约700~800兆。</p>
<p>安装包都是在官网下载的：<br />
<a href="http://httpd.apache.org/" target="_blank">http://httpd.apache.org/<br />
</a><a href="http://www.zend.com/en/products/platform/downloads" target="_blank">http://www.zend.com/en/products/platform/downloads</a><a href="http://httpd.apache.org/" target="_blank"><br />
</a><a href="http://dev.mysql.com/downloads/" target="_blank">http://dev.mysql.com/downloads/</a><br />
<a href="http://www.hmailserver.com/" target="_blank">http://www.hmailserver.com/</a><br />
<a href="http://filezilla-project.org/" target="_self">http://filezilla-project.org/</a></p>
<p>供参考。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onono.org/2009/12/398.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>div+css学习笔记之ul/li用法</title>
		<link>http://www.onono.org/2009/07/244.htm</link>
		<comments>http://www.onono.org/2009/07/244.htm#comments</comments>
		<pubDate>Tue, 28 Jul 2009 08:28:28 +0000</pubDate>
		<dc:creator>一树</dc:creator>
				<category><![CDATA[技术文档]]></category>

		<guid isPermaLink="false">http://www.onono.org/?p=244</guid>
		<description><![CDATA[其他地方转载过来的，比较详细。 今天用到序列圆点的，直接用&#60;li&#62;&#60;/li&#62;的通不过w3c检测，必须和ul或ol结合使用，但问题是用了ul后左边空出了很多。而且圆点是在内容外面的（形成段落的形式），本来的格式是圆点和文字在一起的，后来经过讨论还是在外面的好看。而用css定义的圆点还是可以用属性来变换的（可以是空心或实心等），不同操作系统会显示按操作系统的习惯显示（圆或方不同）。 下面是用到的代码： &#60;div class=&#8221;content&#8221;&#62;&#60;ul&#62; &#60;li&#62;&#60;span class=&#8221;contenttitle&#8221;&#62;zdz流风的作品&#60;/span&#62; ul和li的使用，灵活方便&#60;br /&#62;&#60;/li&#62; &#60;li&#62;&#60;span class=&#8221;contenttitle&#8221;&#62;流风，飘然的风&#60;/span&#62; 多学点知识，多研究下技术对自己有好处&#60;br /&#62;&#60;/li&#62;&#60;/ul&#62;&#60;/div&#62; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; css对应的定义： ul{ margin-left: 15px;margin-bottom: 0px; } li{ list-style-type:disc; } －－－－－－－－－－－－－－－－ 参考资料： list-style-type的用法 语法： list-style-type : disc &#124; circle &#124; square &#124; decimal &#124; lower-roman &#124; upper-roman &#124; lower-alpha &#124; upper-alpha &#124; none &#124; armenian &#124; cjk-ideographic &#124; georgian &#124; lower-greek &#124;]]></description>
			<content:encoded><![CDATA[<p>其他地方转载过来的，比较详细。<span id="more-244"></span></p>
<p>今天用到序列圆点的，直接用&lt;li&gt;&lt;/li&gt;的通不过w3c检测，必须和ul或ol结合使用，但问题是用了ul后左边空出了很多。而且圆点是在内容外面的（形成段落的形式），本来的格式是圆点和文字在一起的，后来经过讨论还是在外面的好看。而用css定义的圆点还是可以用属性来变换的（可以是空心或实心等），不同操作系统会显示按操作系统的习惯显示（圆或方不同）。</p>
<p>下面是用到的代码：</p>
<p>&lt;div class=&#8221;content&#8221;&gt;&lt;ul&gt;<br />
&lt;li&gt;&lt;span class=&#8221;contenttitle&#8221;&gt;zdz流风的作品&lt;/span&gt; ul和li的使用，灵活方便&lt;br /&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;span class=&#8221;contenttitle&#8221;&gt;流风，飘然的风&lt;/span&gt; 多学点知识，多研究下技术对自己有好处&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>css对应的定义：</p>
<p>ul{<br />
margin-left: 15px;margin-bottom: 0px;<br />
}<br />
li{<br />
list-style-type:disc;<br />
}</p>
<p>－－－－－－－－－－－－－－－－</p>
<p>参考资料：</p>
<p>list-style-type的用法</p>
<p>语法：<br />
list-style-type : disc | circle | square | decimal | lower-roman | upper-roman | lower-alpha | upper-alpha | none | armenian | cjk-ideographic | georgian | lower-greek | hebrew | hiragana | hiragana-iroha | katakana | katakana-iroha | lower-latin | upper-latin<br />
取值：<br />
disc : CSS1 默认值。实心圆<br />
circle : CSS1 空心圆<br />
square : CSS1 实心方块<br />
decimal : CSS1 阿拉伯数字<br />
lower-roman : CSS1 小写罗马数字<br />
upper-roman : CSS1 大写罗马数字<br />
lower-alpha : CSS1 小写英文字母<br />
upper-alpha : CSS1 大写英文字母<br />
none : CSS1 不使用项目符号<br />
armenianl : CSS2 未支持。传统的亚美尼亚数字<br />
cjk-ideographic : CSS2 未支持。浅白的表意数字<br />
georgian : CSS2 未支持。传统的乔治数字<br />
lower-greek : CSS2 未支持。基本的希腊小写字母<br />
hebrew : CSS2 未支持。传统的希伯莱数字<br />
hiragana : CSS2 未支持。日文平假名字符<br />
hiragana-iroha : CSS2 未支持。日文平假名序号<br />
katakana : CSS2 未支持。日文片假名字符<br />
katakana-iroha : CSS2 未支持。日文片假名序号<br />
lower-latin : CSS2 未支持。小写拉丁字母<br />
upper-latin : CSS2 未支持。大写拉丁字母</p>
<p>－－－－－－－－－－－－－－－－－－－</p>
<p>LI代码的格式化:</p>
<p>A).运用CSS格式化列表符：</p>
<p>ul li{<br />
list-style-type:none;<br />
}</p>
<p>B).如果你想将列表符换成图像，则：</p>
<p>ul li{<br />
list-style-type:none;<br />
list-style-image: url(images/icon.gif);<br />
}</p>
<p>C).为了左对齐，可以用如下代码：</p>
<p>ul{<br />
list-style-type:none;<br />
margin:0px;<br />
}</p>
<p>D).如果想给列表加背景色，可以用如下代码：</p>
<p>ul{<br />
list-style-type: none;<br />
margin:0px;<br />
}<br />
ul li{<br />
background:#CCC;<br />
}</p>
<p>E).如果想给列表加MOUSEOVER背景变色效果，可以用如下代码：</p>
<p>ul{ list-style-type: none; margin:0px; }<br />
ul li a{ display:block; width: 100%; background:#ccc; }<br />
ul li a:hover{ background:#999; }</p>
<p>说明：display:block;这一行必须要加的，这样才能块状显示！</p>
<p>F).LI中的元素水平排列,关键FLOAT:LEFT：</p>
<p>ul{<br />
list-style-type:none;<br />
width:100%;<br />
}<br />
ul li{<br />
width:80px;<br />
float:left;<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onono.org/2009/07/244.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>伪静态，很好很强大</title>
		<link>http://www.onono.org/2009/07/206.htm</link>
		<comments>http://www.onono.org/2009/07/206.htm#comments</comments>
		<pubDate>Sun, 12 Jul 2009 08:28:14 +0000</pubDate>
		<dc:creator>一树</dc:creator>
				<category><![CDATA[技术文档]]></category>
		<category><![CDATA[rewriter]]></category>
		<category><![CDATA[伪静态]]></category>

		<guid isPermaLink="false">http://www.onono.org/?p=206</guid>
		<description><![CDATA[自从使用了linux主机，不管是CentOS、FreeBSD还是Ubuntu，腰不酸了，腿不痛了，PR也直线上升了~ 好了，废话少说，用WordPress肯定会选linux主机而不会选windows主机，为什么？除了性能等因素，我看重的，是伪静态。WordPress默认会在目录下设置一个.htaccess文件，在里面写入伪静态规则（重写规则,rewrite-rules）。下面来看看这个文件里写了什么东西： # BEGIN WordPress &#160; RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] &#160; # END WordPress RewriteEngine、RewriteBase、RewriteCond、RewriteRule等指令可以在Apache文档里查阅：http://lamp.linux.gov.cn/Apache/ApacheMenu/rewrite/rewrite_guide.html WordPress的这几句简单的重写规则，把所有的操作都交由index.php处理。 比如，打开一树相册的地址为http://www.onono.org/album/，看上去是访问了一个目录，实际上是把album作为参数，传递给index.php，然后回显正确的页面（Page），相当于访问http://www.onono.org/index.php?p=103。 WordPress的重写过程虽然简单，但是内部的处理过程不简单，要同时处理页面、分类、文章正文等URL被重写后的请求。 如果WordPress的这个例子看不大明白，换一个简单的，来自Discuz的一条重写规则： RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$ forumdisplay.php?fid=$1&#38;amp;page=$2 在访问某板块的帖子列表页，打开的页面是forum-23-1.html，实际上打开的页面为forumdisplay.php?fid=23&#38;page=1，显示id为23的板块第1页帖子。 这样有什么好处呢？简单的说，可以让很长的URL变得很短、好看、易记。 搜索引擎在抓取页面的时候，计算页面权重，http://www.onono.org/album/肯定比http://www.onono.org/index.php?p=103的权重高，一些静态html页面（就像forum-23-1.html一样）比带参数的forumdisplay.php?fid=23&#38;page=1更受搜索引擎欢迎。]]></description>
			<content:encoded><![CDATA[<p>自从使用了linux主机，不管是CentOS、FreeBSD还是Ubuntu，腰不酸了，腿不痛了，PR也直线上升了~</p>
<p>好了，废话少说，用WordPress肯定会选linux主机而不会选windows主机，为什么？除了性能等因素，我看重的，是伪静态。WordPress默认会在目录下设置一个.htaccess文件，在里面写入伪静态规则（重写规则,rewrite-rules）。下面来看看这个文件里写了什么东西：<br />
<span id="more-206"></span></p>
<div class="geshi html">
<ol>
<li class="li1">
<div class="de1"># BEGIN WordPress
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">RewriteEngine On
</div>
</li>
<li class="li1">
<div class="de1">RewriteBase /
</div>
</li>
<li class="li1">
<div class="de1">RewriteCond %{REQUEST_FILENAME} !-f
</div>
</li>
<li class="li1">
<div class="de1">RewriteCond %{REQUEST_FILENAME} !-d
</div>
</li>
<li class="li1">
<div class="de1">RewriteRule . /index.php [L]
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"># END WordPress</div>
</li>
</ol>
</div>
<p>RewriteEngine、RewriteBase、RewriteCond、RewriteRule等指令可以在Apache文档里查阅：<a href="http://lamp.linux.gov.cn/Apache/ApacheMenu/rewrite/rewrite_guide.html" target="_blank">http://lamp.linux.gov.cn/Apache/ApacheMenu/rewrite/rewrite_guide.html</a></p>
<p>WordPress的这几句简单的重写规则，把所有的操作都交由index.php处理。<br />
比如，打开一树相册的地址为<a href="http://www.onono.org/album/">http://www.onono.org/album/</a>，看上去是访问了一个目录，实际上是把album作为参数，传递给index.php，然后回显正确的页面（Page），相当于访问<a href="http://www.onono.org/index.php?p=103">http://www.onono.org/index.php?p=103</a>。<br />
WordPress的重写过程虽然简单，但是内部的处理过程不简单，要同时处理页面、分类、文章正文等URL被重写后的请求。</p>
<p>如果WordPress的这个例子看不大明白，换一个简单的，来自Discuz的一条重写规则：</p>
<div class="geshi no html">
<ol>
<li class="li1">
<div class="de1">RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$ forumdisplay.php?fid=$1&amp;amp;page=$2</div>
</li>
</ol>
</div>
<p>在访问某板块的帖子列表页，打开的页面是forum-23-1.html，实际上打开的页面为forumdisplay.php?fid=23&amp;page=1，显示id为23的板块第1页帖子。</p>
<p>这样有什么好处呢？简单的说，可以让很长的URL变得很短、好看、易记。<br />
搜索引擎在抓取页面的时候，计算页面权重，<a href="http://www.onono.org/album/">http://www.onono.org/album/</a>肯定比<a href="http://www.onono.org/index.php?p=103">http://www.onono.org/index.php?p=103</a>的权重高，一些静态html页面（就像forum-23-1.html一样）比带参数的forumdisplay.php?fid=23&amp;page=1更受搜索引擎欢迎。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onono.org/2009/07/206.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress无法正确记录访客IP</title>
		<link>http://www.onono.org/2009/07/181.htm</link>
		<comments>http://www.onono.org/2009/07/181.htm#comments</comments>
		<pubDate>Fri, 03 Jul 2009 07:37:45 +0000</pubDate>
		<dc:creator>一树</dc:creator>
				<category><![CDATA[技术文档]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.onono.org/?p=181</guid>
		<description><![CDATA[这个问题困扰我很久了，特别是近来发垃圾评论的人增多，想封IP都变得不可能，因为WordPress在后台记录的IP统统为127.0.0.1，在其他主机上都很正常，很肯定是主机商的问题。 找了客服同志，客服找技术支持，给的答复是： 把以下代码加到wp-config.php开头 if&#40;isset&#40;$_SERVER&#91;&#39;HTTP_X_FORWARDED_FOR&#39;&#93;&#41;&#41; &#123; $list = explode&#40;&#39;,&#39;,$_SERVER&#91;&#39;HTTP_X_FORWARDED_FOR&#39;&#93;&#41;; $_SERVER&#91;&#39;REMOTE_ADDR&#39;&#93; = $list&#91;0&#93;; &#125; 太神奇了~~ 最后，客服说，高难度的事都要找那位技术人员…… 解读一下，$_SERVER['HTTP_X_FORWARDED_FOR']和$_SERVER['REMOTE_ADDR']都是用于获取客户端IP的，全局变量，因此可以直接调用。 $_SERVER['REMOTE_ADDR']是正在浏览当前页面用户的 IP 地址，由于服务器自身启用了反向代理，所以这个变量始终记录IP为127.0.0.1。 $_SERVER["HTTP_X_FORWARDED_FOR"]用于获取使用代理服务器用户的IP，但有时读取的仍然是代理服务器本身的IP。 如果$_SERVER['HTTP_X_FORWARDED_FOR']存在，则用它替代$_SERVER['REMOTE_ADDR']，WordPress在记录IP的时候，就能正确的引用$_SERVER['REMOTE_ADDR']变量的值，正确记录IP。]]></description>
			<content:encoded><![CDATA[<p>这个问题困扰我很久了，特别是近来发垃圾评论的人增多，想封IP都变得不可能，因为WordPress在后台记录的IP统统为127.0.0.1，在其他主机上都很正常，很肯定是主机商的问题。<br />
找了客服同志，客服找技术支持，给的答复是：<br />
把以下代码加到wp-config.php开头</p>
<p><span id="more-181"></span></p>
<div class="geshi php">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re1">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#39;HTTP_X_FORWARDED_FOR&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$list</span> <span class="sy0">=</span> <span class="kw3">explode</span><span class="br0">&#40;</span><span class="st0">&#39;,&#39;</span><span class="sy0">,</span><span class="re1">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#39;HTTP_X_FORWARDED_FOR&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#39;REMOTE_ADDR&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$list</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>太神奇了~~<br />
最后，客服说，高难度的事都要找那位技术人员……</p>
<p>解读一下，$_SERVER['HTTP_X_FORWARDED_FOR']和$_SERVER['REMOTE_ADDR']都是用于获取客户端IP的，全局变量，因此可以直接调用。<br />
$_SERVER['REMOTE_ADDR']是正在浏览当前页面用户的 IP 地址，<strong><span style="color: #ff0000;">由于服务器自身启用了反向代理，所以这个变量始终记录IP为127.0.0.1</span>。</strong><br />
$_SERVER["HTTP_X_FORWARDED_FOR"]用于获取使用代理服务器用户的IP，但有时读取的仍然是代理服务器本身的IP。</p>
<p>如果$_SERVER['HTTP_X_FORWARDED_FOR']存在，则用它替代$_SERVER['REMOTE_ADDR']，WordPress在记录IP的时候，就能正确的引用$_SERVER['REMOTE_ADDR']变量的值，正确记录IP。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.onono.org/2009/07/181.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
