Linux 如何查看文件的创建时间

在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。

但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建时间;如果文件创建后,没有被读取过,那么访问时间=创建时间,这个基本不太可能。呵呵。

与文件相关的几个时间:

1。访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。

2。修改时间,对文件内容修改一次,这个时间就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。

3。状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。

查看文件的详细的状态、准确的修改时间等,可以通过stat命令+文件名。比如:

# stat nohup.out
     File: `nohup.out’
     Size: 8306               Blocks: 32            IO Block: 4096      regular file
Device: 802h/2050d         Inode: 820136         Links: 1
Access: (0777/-rwxrwxrwx)     Uid: (       0/       root)      Gid: (       0/       root)
Access: 2007-05-28 10:28:59.492016424 -0400
Modify: 2006-11-16 09:04:03.000000000 -0500
Change: 2007-05-28 10:27:44.074481632 -0400

说明:Access访问时间。Modify修改时间。Change状态改变时间。

可以stat *查看这个目录所有文件的状态

经济危机告诉我们什么

   经济危机来了,以前只在课本中见过,虽然画面画的很惨,但是不亲身经历根本是体会不到的,现在我们有幸(是不得不)经历这次经济危机,我们不能稀里糊涂地熬过就算过了,我们要学到一些东西,毕竟每个人都为这次经济危机交了不少的学费,毕竟经济危机也是难得经历一次的。

PHP 版的 mysqlping

如何判断一个mysql是否活着呢,mysqladmin提供了该功能,其实原理很简单,只要我们随便提供一个 mysql肯定不接受的用户名、密码,mysql如果存在,肯定要拒绝的,这时产生的错误号与mysql不存在产生的错误号肯定不一样,这样就判断出来了,下面是一个简单的例子,PHP版的:

<?php
$host 
$argv[1
];
$port $argv[2
];
@
mysql_connect($host.":".$port,‘oot’,‘jjjj’
);
if(
mysql_errno() == 1045
) {
    echo 
"mysql alived\n"
;
} else {
    echo 
"mysql died\n"
;
}
?>

PHP 实现i18n

i18n 是国际化编程的一种设计:
国际化是指软件能用于多国语言环境的能力。在Linux中通过locale来设置程序运行的不同语言环境,locale由ANSI C提供支持。locale的命名规则为<语言>_<地区>.<字符集编码>,如zh_CN.UTF-8,zh代表中文,CN代表大陆地区,UTF-8表示字符集。
::本文中的部分内容从网络获得
在php中实现程序的本地化,主要是依靠gettext函数实现,同时也会增加程序的复杂度。
首先在php.ini文件中加载php_gettext.dll模块。
例子:
index.php
<?php
      define(‘PACKAGE’,’index’);                     //定义一个区域变量,随便取名,最好和本网页的名称一致.
      bindtextdomain(PACKAGE,’./locate’);      //定义该区域的路径,在这个路径中包含有语言字典文件.
      textdomain(PACKAGE);                        //指定文件.
?>
<?php
    if(isset($_REQUEST["lang"])) {
        if($_REQUEST["lang"]==1) {
              putenv(‘LANG=zh_CN’);              //设定语言环境变量.
              setlocale(LC_ALL,’zh_CN’);         //设定本地语言
          }
          if($_REQUEST["lang"]==2) {
            putenv(‘LANG=en_US’);
            setlocale(LC_ALL,’en_US’);
          }
    } else {
        putenv(‘LANG=en_US’);
        setlocale(LC_ALL,’en_US’);
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
  <title>L10n Text</title>
</head>
<body>
  <form method="post" action="#">
    <b><?php echo _("Simp.Chinese"); ?>:</b><input type=
    "radio" name="lang" value="1"><br>
    <b><?php echo _("English"); ?>:</b><input type=
    "radio" name="lang" value="2"><br>
    <input type="submit" name="ChgLang" value=
    "<?php echo gettext("Change Lang"); ?>">
  </form><?php
    
      echo gettext("Hello,world!");
 ?>
</body>
</html>
 
在代码中对于需要翻译的字符串在使用时先用gettext($string)标记。注:gettext()可以改写成 _() 这样可以少打几个字。
然后在./locate/ (就是bindtextdomain所指定的路径下建立相应的文件夹) demo中为中文和英文的切换,所以我这里就建立了 zh_CN和 en_US两个文件夹,如果还有其他的语言支持就要建其他的文件夹,并以语言代码为文件夹名,在语言文件夹中建立子目录名称为LC_MESSAGES,字典文件都存储于这个目录。
然后从网上下载gnuwin(在sourceforge上有)主要要使用软件包中的xgettext和msgfmt指令。安装好gnuwin后,在命令行输入如下指令生成po文件,
xgettext -o index.po index.php  
 
index.po内容如下:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE’S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <
EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-07-26 03:24-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <
EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <
LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=GB2312\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../../index.php:7
msgid "Simp.Chinese"
msgstr "简体中文"
#: ../../../index.php:9
msgid "English"
msgstr "英文"
#: ../../../index.php:11
msgid "Change Lang"
msgstr "更改语言"
#: ../../../index.php:22
msgid "Hello,world!"
msgstr "你好,世界!"
 
在这个文件中将msgid所对应的msgstr翻译成相应的语言,同时更改charset改成对应的字符集,中文改成gb2312,英文可以用utf-8
保存文件执行msgfmt生成mo文件
msgfmt -o index.mo index.po
 
依照上面的操作,在en_US或者其他语言的目录下也生成相应的字典文件。
到点一下按钮 就可以轻松实现L10n了。

PHP IDE 集成开发环境整理大全

editplus  http://www.editplus.com/
EditPlus 是 Internet 时代的 32 位文本编辑程序,HTML 编辑及程序员的Windows 平台编辑器。它可以充分的替换记事本,它也提供网页作家及程序设计师许多强悍的功能。对于 HTML、CSS、PHP、ASP、Perl、C/C++、Java、JavaScript 及 VBScript的语法突显。当然,它也可以在自定义语法文件后扩充其他的程序语言。嵌合网页浏览器作 HTML 页的预览,及 FTP 命令做本地文件上传到 FTP 服务器。其他功能还包含 HTML 工具栏、用户工具、列号、标尺、URL 突显。自动完成、剪贴文本、行列选择、强大的搜索与替换、多重撤消/重做、拼写检测、自定义键盘快捷键、以及更多。

UltraEdit http://www.ultraedit.com/
一套极棒的文字、Hex、ASCII 码编辑器,可以取代记事本,内建英文单字检查、C++ 及 VB 指令突显,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。
UEStudio http://www.shengfang.org/
基于 IDE (Integrated Development Environment 完整开发环境) 概念建立。特别为在 Windows 系统进行软件开发而设计,UEStudio是一个强力的程序设计平台,为 UltraEdit 用户提供新的优秀功能和素材。

Visual SlickEdit 10.0  http://www.slickedit.com/products/pr_products.php
提供全面的、灵活的C/C++, C#, Java, HTML, XML, Unicode 和许多其它编程语言文件格式和编码方式的统一的代码编写、分析和维护平台,它提供了大量的非常有助于提高你编程效率的特性,由于它在Windows、Linux和UNIX平台下提供了统一的图形界面,为多平台编程的程序员提供了最大程度的可用性,有助于效率的大幅度提高。

以上三个不能称为IDE 集成开发环境,但是是非常优秀的编辑器,很多人也使用它进行下载。搜集整理www.shengfang.org

ZendStudio http://zend.com/store/products/zend-studio/beta.php
一个屡获大奖的专业 PHP Zend Studio集成开发环境,具备功能强大的专业编辑工具和调试工具,支持PHP语法加亮显示,支持语法自动填充功能,支持书签功能,支持语法自动缩排和代码复制功能,内置一个强大的PHP代码调试工具,支持本地和远程两种调试模式,支持多种高级调试等功能,面向服务器端

WaterProof PHPEdit http://www.waterproof.fr/
PHPEdit Devel http://www.phpedit.net/
不容错过的php开发利器,用了XML技术,还实现了像著名编程语言VC、DELPHI那样的语法高亮、函数自动完成、函数参数提示等激动人心的功能!甚至还能括号匹配!其函数列表还特别适合不熟悉php函数的初学者

NuSphere PHPeD http://www.nusphere.com/
在Windows 环境下集成的编辑和运行调试环境,支持HTML、Perl、Python、C++、Javascript以及其他技术,比如层叠样式表和ASP等

Trustudio http://www.xored.com/  
一个基于Eclipse的、同时支持Python和PHP的插件,曾经是我最喜欢的Python IDE环境,功能相当全了,不过有些细节不完善以致不大好用。

Eclipse, http://www.eclipse.org/
著名开源软件,IDE,广泛用于Java开发等。加上相应插件后,可支持大部分编程语言。

使用前提:已正确搭建安装了AMP(A=Apache, M=Mysql, P=PHP)环境,操作系统平台不限

下载:http://www.shengfang.org/
Eclipse3.0.1: http://www.eclipse.org/downloads/index.php  (选择适合你系统的相应版本,支持windows,linux,max等,建议选择最新版本3.0.1)

PHPeclipse插件: http://sourceforge.net/project/ showfiles.php?group_id=57621 (同上,最新版本1.1.2) http://www.shengfang.org/

PHP Designer 2005  http://www.mpsoftware.dk/
MPS PHP DESIGNER 是针对 PHP 网页的编写所设计的程序,它内建一系列的指令码、PHP4 原始码数据库、语法高亮度显示功能、FTP 客户端…等,不管您是 PHP 网页设计高手,或者是刚入门的新手,您都可以使用者套软件来帮您设计网页程序(SQL、HTML 亦支持)。
适合不论是网页专业人员或是初学PHP的新手,支持PHP, HTML, XHTML, CSS and SQL (Ingres, Interbase, MSSQL, MySQL, Oracle, Sybase and Standard SQL),多达18种风格,功能包括自动完成、代码库、TODO管理、FTP支持、任务管理、扩展工具、代码调试、自定义标记、帮助文件搜索等

DzSoft PHP Editor  http://www.dzsoft.com/
专为 PHP 所设计的网页程序编辑软件,具有 PHP 编辑、侦错、浏览、原始码检视、档案浏览、可自订的原始码样本等功能,无须架设网站主机就可以测试 PHP  http://www.shengfang.org/

Tavrida PHP Editor  http://www.hotscripts.com/Detailed/43478.html
像Delphi一样的编辑器,用来写PHP和支持数据库的网页,内建Web服务器可供测试,支持数据库

DreamweaverMX  http://www.macromedia.com/

Maguma Workbench  http://www.maguma.com/
一款高效的PHP的集成开发环境(IDE),包含了编辑和调试 PHP程序所有必须的工具,带有十分完整的断点、分步等调试功能,支持以树形方式显示文件中的函数和类成员 
____________________________________________________________________________________

  这里介绍了一些 PHP IDE 工具,非常见的 Editplus 之类的,都是专门为 PHP 开发的,有兴趣都可以试试看,找出自己用得顺手的就可以了,呵呵,本人一年来都是用 Zend Studio 作为开发工具,因为调试和编写都很方便,代码检测功能和手册查阅功能我非常喜欢。

转自:http://www.laogui.com/index.php? /archives/48_PHP_IDE.html

  我这里整理的都是专门为PHP设计的IDE,editplus,Ultra Edit等常用文本工具我就不介绍了!其中一些介绍是从那些下载站里复制过来的!

Zend Studio
  开发商: http://www.zend.com/store/products/zend-studio.php
  目前公认的最强大的PHP开发工具,这种集成软件包包括了用于编辑,调试,配置PHP程序所需要的客户及服务器组件,软件包具有工业标准的PHP开发环境,代码完成引擎,功能齐全的调试器等

NuSphere PHPEd
  http://www.nusphere.com/
  PhpED 通过无与伦比的PHP调试和压缩能力,以及一个新的NuSOAP web服务向导成为了PHP领域的领军产品。更加强大的Project Manager使得发布站点和应用程序比以前更加容易。现在可以在线程级别对正在运行或者开发中的程序进行测试和调校。支持 CVS 版本控制,而且,对PostgreSQL和MySQL数据库的本地支持为PHP使用开源数据库提供了一个广泛的环境。但对中文支持不太好,汉字都当作单字节处理了。PHPED还有Linux版本。

PHP Coder
  http://www.phpide.de/
  PHPCoder用于快速开发和调试PHP应用程序,它很容易扩展和定制,完全能够符合开发者的个性要求.1:结合了PHP编译器和参考文档,可以对编辑中的PHP脚本进行即时预览2:支持高亮显示HTML和PHP代码;3:自动完成功能,可以自动完成用户自定义代码片断;4:标准函数提示;5:有专门的工程项目管理器;6:对象浏览器搜寻编辑中文件的包含信息,自定义函数,并以树形显示.7:支持查找对称的语句标记符;8:支持高级搜索和替换;9:自带FTP功能;10:支持运行和断点调试11:……总之,PHPCoder是一个非常实用的,功能强大的编程环境,而且它是免费的!

Ankord PHP Expert Editor
  http://www.ankord.com/phpxedit.html
  PHP Expert Editor是一个容易使用的 PHP 开发工具,它的功能照顾到初级者及专业开发人员。 PHP Expert Editor 内建 http server 用作测试及除错(你也可以使用其他 http server), PHP 语法检查, FTP 功能, 程式码样板等功能。

DzSoft PHP Editor
  http://www.dzsoft.com/dzphp.htm
  专为 PHP 所设计的网页程序编辑软件 – DzSoft PHP Editor,具有 PHP 编辑、侦错、浏览、原始码检视、档案浏览、可自订的原始码样本..等功能,无须架设网站主机就可以测试 PHP 指令码,是一套功能强大的 PHP 编程软件。
  DzSoft PHP Editor和Ankord PHP Expert Editor非常相识,几乎找不到他们的主要区别,关于这两个软件之间的具体内幕我也不太清楚!

Dev-PHP IDE
  http://devphp.sourceforge.net/
  非常好用的php编辑器,支持php-gtk,內建許多快速html表单,非常的好用,本身含繁体语言包,另附暗地论坛的中文语言包

Master PHP
  http://www.gsoftwares.com/
  一款支持PHP, PHP3, PHTML, CSS, JS, HTML, HTM and SQL的编辑器,它允许用户编辑多种一次编辑多种文件,允许插入,运行和最优化程序的脚本,用户可以通过工具栏定制按钮和窗体,可以导出html和rtf格式,支持18种语言

Komodo
  http://www.activestate.com/Products/Komodo/
  Komodo支持在Windows与Linux上,Perl、Python及JavaScript等的程序语言开发,以及多种程序语言语法不同颜色标注。这款功能强大的IDE竟然不支持中文,连中文文件名的文件都打不开!

Maguma Studio
  http://www.maguma.com/
  Maguma Studio包含了编辑和调试 PHP 程序所有必须的工具。无论您是经验丰富的开发者、或是初学者它都适合您。带有十分完整的断点、分步等调试功能。支持以树形方式显示文件中的函数和类成员。

PhpLens
  http://phplens.com
  PhpLens是一款专为PHP开发人员准备的快速数据库开发程序。通过使用PhpLens,可以快速的设计、发布和维护数据库驱动的网络产品。它允许你以HTML表格的形式对数据库进行浏览、编辑、创建、删除和查找。不用写任何代码,它就允许你完成上述操作。

  先介绍到这里,以后再慢慢整理,虽然上面的软件都很强大,但我最习惯用的还是editplus。一则我水平不够,这些软件的很多功能用不上,二则英文太差,想用他们还需要熟悉一段时间,更多的PHP IDE可以参考这篇文章 http://www.linuxdocs.org/HOWTOs/PHP-HOWTO-9.html

  我会在自己的blog里不断更新此文章的: (原文已经丢失。。。。)http://www.laogui.com/weblog/index.php?/ archives/48_PHP_IDE.html

PHP二分查找法应用 之 IP查找

前段时间做数据分析,需要大量的IP地址查询(每秒钟近万次检索),首先考虑到使用数据库。数据库大概存储几十万条IP记录,记录集如下:

  这样做查询需要用到如下SQL:

  这样的检索显然用不到索引,即使用到,MySQL查询效率也不大可能达到每秒500次以上,我做了很多并发优化,最终平均查询效率也只有每秒200次左右,实在是头痛。一开始我也有想到借鉴纯真IP库的检索方法,但是我一直对算法有抵触,也以为二分法很难,所以就没有尝试使用,直到最后没有办法了,才最终实现了二分法的IP地址检索。
  从上表可以看到IP库是从0到4294967295的一个连续数值,这个数值要是拆开存储,会有几百G的数据,所以没办法使用索引也没办法哈希。最终我使用PHP将这些东东转为二进制存储,抛弃了数据库的检索。可以看到IP起止长度为一个4字节的长整型,后面的国家ID、省份ID等,可以使用2个字节的短整型来存储,总共一行数据就有18个字节,总共31万条数据,算起来也就5M的样子。具体IP库生成代码如下:
<?php

/*
IP文件格式:
3741319168 3758096383 182 0 0 0 0
3758096384 3774873599 3 0 0 0 0
3774873600 4026531839 182 0 0 0 0
4026531840 4278190079 182 0 0 0 0
4294967040 4294967295 312 0 0 0 0
*/
set_time_limit(0);
$handle = fopen(‘./ip.txt’, ‘rb’);
$fp = fopen("./ip.dat", ‘ab’);
if (
$handle) {
while (!
feof($handle)) {
$buffer = fgets($handle);
$buffer = trim($buffer);
$buffer = explode("\t", $buffer);
foreach (
$buffer as $key => $value) {
$buffer[$key] = (float) trim($value);
}
$str = pack(‘L’, $buffer[0]);
$str .= pack(‘L’, $buffer[1]);
$str .= pack(‘S’, $buffer[2]);
$str .= pack(‘S’, $buffer[3]);
$str .= pack(‘S’, $buffer[4]);
$str .= pack(‘S’, $buffer[5]);
$str .= pack(‘S’, $buffer[6]);
fwrite($fp, $str);
}
}

?>

这样IP就按照顺序每18字节一个单位排列了,所以很容易就使用二分法来检索出IP信息:

<?php
function getip($ip, $fp) {
fseek($fp, 0);
$begin = 0;
$end = filesize(‘./ip.dat’);
$begin_ip = implode(, unpack(‘L’, fread($fp, 4)));
fseek($fp, $end 14);
$end_ip = implode(, unpack(‘L’, fread($fp, 4)));
$begin_ip = sprintf(‘%u’, $begin_ip);
$end_ip = sprintf(‘%u’, $end_ip);

do {
if ($end $begin <= 18) {
fseek($fp, $begin + 8);
$info = array();
$info[0] = implode(, unpack(‘S’, fread($fp, 2)));
$info[1] = implode(, unpack(‘S’, fread($fp, 2)));
$info[2] = implode(, unpack(‘S’, fread($fp, 2)));
$info[3] = implode(, unpack(‘S’, fread($fp, 2)));
$info[4] = implode(, unpack(‘S’, fread($fp, 2)));
return
$info;
}

$middle_seek = ceil((($end $begin) / 18) / 2) * 18 + $begin;

fseek($fp, $middle_seek);
$middle_ip = implode(, unpack(‘L’, fread($fp, 4)));
$middle_ip = sprintf(‘%u’, $middle_ip);

if ($ip >= $middle_ip) {
$begin = $middle_seek;
} else {
$end = $middle_seek;
}
} while (
true);
}

?>

  以上$fp为打开ip.dat的文件句柄,由于是循环检索,所以写在函数外面,免得每次检索都要打开一次文件,30W行数据二分法最多也只需要循环7次(2^7)左右即可找到准确的IP信息。之后本来还想将ip.dat放在内存中加快检索速度,后来发现,字符串定位函数的效率,根本和文件指针的偏移定位不是在一个数量级的,所以还是放弃使用内存来存放IP库。
  这个实现,使IP检索效率提高了近百倍,只是一个简单的二分法的应用,从此算法在WEB应用中不重要的观念彻底打消了。其实要实现这个,我还请教了金狐,我一开始是请他帮我生成一个纯真格式的IP库,然后用Discuz的IP查询函数来检索,不过他不肯帮我,最后造就了我的这个实践和学习。有时候,求人不如求己。

PHP 中单一实例类的实现

有时候我们希望一个类在使用的时候只存在一个实例,但是我们又不敢保证自己不会在无意中new 了多次,怎么办呢?这里给出了一个保证单一实例类的一种做法:

<?php
// 单一实例的封装方法 
 /**
 * @author lijunjie <lijunjie1982@yahoo.com.cn> 
 * @date 2008-12-7 
 * @version 1.0 
 */ 
class OnlyOneInstance 

    private static 
$instance false

    private 
$instanceId 0

    public static function 
getInstance
() { 
        if(
OnlyOneInstance::$instance === false
) { 
            
OnlyOneInstance::$instance = new OnlyOneInstance
(); 
        } 
        return 
OnlyOneInstance::$instance

    } 
    
/// 私有的构造函数保证了该类无法在外部构造
    
private function __construct
(){
        
$this->_init
();
    }
    private function 
_init
() { 
        
$this->instanceId mt_rand
(); 
    } 
    public function 
say
() { 
        echo 
"my id is $this->instanceId\n"

    } 

OnlyOneInstance::getInstance()->say(); 
OnlyOneInstance::getInstance()->say
(); 

// 两次输出是一样的,说明两次的使用的是同一个实例 
exit;
?> 

 

shell 之 九九乘法表

为了学点Linux shell,无聊至极,用while写了个99乘法表:

i=1
while [ $i lt 10 
];do 
    
j=
1
    
while [ $j lt 10 
];do
        if [ 
$i ge $j ];
then
            
echo –
"$i * $j = $(($i * $j))"’ ‘
        
fi
        
((j
++))
    
done
    
echo
    ((
i
++))
done

你还别说,shell还真不是很好写呢

负载均衡的原理与算法介绍

转自:http://sites.google.com/site/star33375249/Home/database/mysql/fu-zai-jun-heng-de-yuan-li-yu-suan-fa-jie-shao

服务器负载均衡算法有很多(持续性的和非持续性的),包括轮循算法、最少连接算法、响应时间算法、散列算法、最少连接失误算法,链路带宽算法等等。此外实际服务器(Real Server)可以被分配不同的加权值来调整被分配的流量。比如性能高的大型服务器可配置较大的加权值,而为性能较低的小型服务器设置较小的加权值。为了避免服务器因过载而崩溃,可为实际服务器指定最大连接阈值来避免该服务器过载。任何服务器可被指定为另一台服务器的备份服务器或溢出服务器,从而进一步保证了应用可用性。

    非持续性算法(Non-Persistent):

一个客户端的不同的请求可能被分配到一个实际服务组中的不同的实服务器上进行处理。主要有轮循算法、最少连接算法、响应速度算法等。

    -轮循算法(Round Robin):

说明:

    每一次来自网络的请求轮流分配给内部中的每台服务器,从1至N然后重新开始。

举例:

    此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况;

    -最少连接算法(Least Connection):

说明:

    客户端的每一次请求服务在服务器停留的时间都可能会有较大的差异,随着工作时间的加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生极大的不同,这样的结果并不会达到真正的负载均衡。最少连接数均衡算法对内部中有负载的每一台服务器都有一个数据记录,记录的内容是当前该服务器正在处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况,负载更加均衡。

举例:此种均衡算法适合长时间处理的请求服务。

  -响应速度算法(Response Time):

说明:

    负载均衡设备对内部各服务器发出一个探测请求(例如Ping),然后根据内部中各服务器对探测请求的最快响应时间来决定哪一台服务器来响应客户端的服务请求。

举例:

    此种均衡算法能较好地反映服务器的当前运行状态,但最快响应时间仅仅指的是负载均衡设备与服务器间的最快响应时间,而不是客户端与服务器间的最快响应时间。

    持续性算法(Persistent):

 

    从一个特定的客户端发出的请求都被分配到一个实服务组中的同一个实服务器上进行处理。主要包括:

A.基于IP的算法

-Persistent IP (pi):基于用户IP地址来选择服务器。

-Hash IP (hi) :基于用户IP地址的HASH值,来选择服务器

-Consistent Hash IP (chi):

B.基于报头/请求的算法

-Hash Header (hh):基于用户请求报中HTTP报头来选择服务器;

-Persistent Hostname (ph) :基于用户请求报中HTTP报头的Hostname的HASH值,来选择服务器;

-Persistent URL (pu):基于对URI Tag 和值的静态对应关系来选择服务器。

-SSL Session ID (sslsid):基于SSL会话ID来选择服务器。

C.基于Cookie的算法

-Persistent Cookie (pc) : 选择服务器基于用户请求包用Cookie Name / Value 的静态对应关系;

-Hash Cookie (hc) :选择服务器基于用户请求包用Cookie Name / Value 的Hash 值对应关系;

-Insert Cookie (ic) :选择服务器基于负载均衡器 向服务器响应包中插入Cookie;

-Re-write Cookie (rc):选择服务器基于负载均衡器向服务器响应包中重写Cookie值。

(必须为重写指定Cookie值的偏移量)

windows 批处理脚本 之 for

首先,贴个帮助吧:

D:\>for /?
对一组文件中的每一个文件执行某个特定命令。

FOR %variable IN (set) DO command [command-parameters]

  %variable  指定一个单一字母可替换的参数。
  (set)      指定一个或一组文件。可以使用通配符。
  command    指定对每个文件执行的命令。
  command-parameters
             为特定命令指定参数或命令行开关。

在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

如果命令扩展名被启用,下列额外的 FOR 命令格式会受到
支持:

FOR /D %variable IN (set) DO command [command-parameters]

    如果集中包含通配符,则指定与目录名匹配,而不与文件
    名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

    检查以 [drive:]path 为根的目录树,指向每个目录中的
    FOR 语句。如果在 /R 后没有指定目录,则使用当前
    目录。如果集仅为一个单点(.)字符,则枚举该目录树。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

    该集表示以增量形式从开始到结束的一个数字序列。
    因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
    序列 (5 4 3 2 1)。

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN (‘command’) DO command [command-parameters]

    或者,如果有 usebackq 选项:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN (‘command’) DO command [command-parameters]

    filenameset 为一个或多个文件名。继续到 filenameset 中的
   下一个文件之前,每份文件都已被打开、读取并经过处理。
    处理包括读取文件,将其分成一行行的文字,然后将每行
    解析成零或更多的符号。然后用已找到的符号字符串变量值
    调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开
    的第一个空白符号。跳过空白行。您可通过指定可选 "options"
    参数替代默认解析操作。这个带引号的字符串包括一个或多个
    指定不同解析选项的关键字。这些关键字为:

        eol=c           – 指一个行注释字符的结尾(就一个)
        skip=n          – 指在文件开始时忽略的行数。
        delims=xxx      – 指分隔符集。这个替换了空格和跳格键的
                          默认分隔符集。
        tokens=x,y,m-n  – 指每行的哪一个符号被传递到每个迭代
                          的 for 本身。这会导致额外变量名称的分配。m-n
                          格式为一个范围。通过 nth 符号指定 mth。如果
                          符号字符串中的最后一个字符星号,
                          那么额外的变量将在最后一个符号解析之后
                          分配并接受行的保留文本。
        usebackq        – 指定新语法已在下类情况中使用:
                          在作为命令执行一个后引号的字符串并且一个单
                          引号字符为文字字符串命令并允许在 filenameset
                          中使用双引号扩起文件名称。

    某些范例可能有助:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
    每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
    空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
    取得第二个符号,引用 %j 来取得第三个符号,引用 %k
    来取得第三个符号后的所有剩余符号。对于带有空格的文件
    名,您需要用双引号将文件名括起来。为了用这种方式来使
    用双引号,您还需要使用 usebackq 选项,否则,双引号会
    被理解成是用作定义某个要分析的字符串的。

    %i 专门在 for 语句中得到说明,%j 和 %k 是通过
    tokens= 选项专门得到说明的。您可以通过 tokens= 一行
    指定最多 26 个符号,只要不试图说明一个高于字母 ‘z’ 或
    ‘Z’ 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;而且,
    同时不能有 52 个以上都在使用中。

    您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,
    用单引号将括号之间的 filenameset 括起来。这样,该字符
    串会被当作一个文件中的一个单一输入行。

    最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将
    括号之间的 filenameset 变成一个反括字符串。该字符串会
    被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进
    内存,并被当作文件分析。因此,以下例子:

      FOR /F "usebackq delims==" %i IN (set) DO @echo %i

    会枚举当前环境中的环境变量名称。

另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

     ~I         – 删除任何引号("),扩充 %I
     %~fI        – 将 %I 扩充到一个完全合格的路径名
     %~dI        – 仅将 %I 扩充到一个驱动器号
     %~pI        – 仅将 %I 扩充到一个路径
     %~nI        – 仅将 %I 扩充到一个文件名
     %~xI        – 仅将 %I 扩充到一个文件扩展名
     %~sI        – 扩充的路径只含有短名
     %~aI        – 将 %I 扩充到文件的文件属性
     %~tI        – 将 %I 扩充到文件的日期/时间
     %~zI        – 将 %I 扩充到文件的大小
     %~$PATH:I   – 查找列在路径环境变量的目录,并将 %I 扩充
                   到找到的第一个完全合格的名称。如果环境变量名
                   未被定义,或者没有找到文件,此组合键会扩充到
                   空字符串

可以组合修饰符来得到多重结果:

     %~dpI       – 仅将 %I 扩充到一个驱动器号和路径
     %~nxI       – 仅将 %I 扩充到一个文件名和扩展名
     %~fsI       – 仅将 %I 扩充到一个带有短名的完整路径名
     %~dp$PATH:i – 查找列在路径环境变量的目录,并将 %I 扩充
                   到找到的第一个驱动器号和路径。
     %~ftzaI     – 将 %I 扩充到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。

D:\>

只看帮助可能还是不明白,再给几个例子:

1. 打印指定目录下的所有文件

D:\>for %i in (e:\*) do @echo %i
e:\101ThingsToKnowAboutSingleSignOn.pdf
e:\3-IT168单点登录系统数据库结构说明.doc
e:\FTP.cab
e:\login.do
e:\mysql_connect

2. 打印指定目录下的所有目录

D:\>for /D %i in (e:\*) do @echo %i
e:\demo
e:\help
e:\My Document
e:\Mycmd

3. 递归打印指定目录下的文件

D:\>for /R %i in (e:\) do @echo %i

4. 递归打印指定目录下的目录

D:\>for /R /D %i in (e:\) do @echo %i

5. 循环数字

D:\>for /L %i in (1,1,10) do @echo %i
1
2
3
4
5
6
7
8
9
10

6. 处理文件内容

待续。。。