• Linux下安装部署SNMP(流量监控)

    前言:
    记录我在一台原本没有安装snmp的服务器上通过源码方式安装最新版本snmp的过程。
    1)查原系统是否安装了snmp
    # rpm –qa | grep snmp
    2)下载、解压、配置、编译、安装
    (到http://www.net-snmp.net/download.html上下载最新的net-snmp版本,目前是5.5。)
    # cd /usr/local/src
    # wget http://cdnetworks-kr-2.dl.sourceforge.net/project/net-snmp/net-snmp/5.5/net-snmp-5.5.tar.gz
    # tar zxvf net-snmp-5.5.tar.gz
    # cd net-snmp-5.5
    # ./configure
    (编译中会有交互过程。如选择版本等。)
    # make
    # make install
    3)指令路径说明
    安装完成之后:/usr/local/sbin/snmpd 是启动snmp的程序,snmp的可执行命令(如,snmpget、snmpwalk等)默认安装在/usr/local/bin下。
    4)snmpd.conf文件
    用find / -name snmpd.conf查找一下snmpd.conf文件,可以发现仅有找到以下一条结查:
    /usr/local/src/net-snmp-5.5/python/netsnmp/tests/snmpd.conf
    将其cp到/etc下:
    cp /usr/local/src/net-snmp-5.5/python/netsnmp/tests/snmpd.conf /etc/snmpd.conf
    5)启动snmp
    用以下命令启动snmp:
    # /usr/local/sbin/snmpd -c /etc/snmpd.conf
    (将/usr/local/sbin/snmpd -c /etc/snmpd.conf 加入到/etc/rc.d/rc.local中,成为开机自动启动)
    6)检查snmp启动情况
    用netstat –anu 查一下是否监听:161端口;
    或用 ps –ef |grep snmp可以检查snmpd的进程
    7)测试snmp取数据
    # snmpwalk -c public -v 2c localhost
    看是否可以出现正常的查询结果。
    8)进行snmpd.conf文件的配置
    但此时仅是在本机上可以进行snmp查询,在另一个服务器上是查不到的,所以还要更改一下/etc/snmpd.conf的配置。
    # 1) 设置监控机的IP或监控机的网段,以及团体字映射到安全名
    com2sec local 192.168.10.2      public
    com2sec monitorhost 192.168.10.1      public
    com2sec mynetwork1 92.168.1.0/24     public
    # 2) 映射组名和安全名
    group MyRWGroup v2c        local
    group MyRWGroup v2c        monitorhost
    group MyROGroup v2c        mynetwork
    # 3)设置mib subtree视图
    view all    included  .1                               80
    # 4) 设置read/write权限
    access MyROGroup “”      any       noauth    exact  all    none   none
    access MyRWGroup “”      any       noauth    exact  all    all    none
  • jQuery性能优化(ie6)

    ie6浏览器,js引擎解析速度很慢,所以只能选择优化js代码

    1.尽量使用#id去寻找元素(id是唯一的,无需遍历和循环DOM)

    2.jQuery中第二快的选择器就是Tag选择器,尽量在Classes前面使用Tags
    eg:var active_light = $(‘#traffic_light input.css’); 比$(‘.css’)快许多

    3.养成保存jQuery对象到一个变量上的习惯
    记住,永远不要让相同的选择器在你的代码里出现多次.

    eg:
    $(‘#traffic_light input.on).bind(‘click’, function(){…});
    $(‘#traffic_light input.on).css(‘border’, ‘3px dashed yellow’);
    $(‘#traffic_light input.on).css(‘background-color’, ‘orange’);
    $(‘#traffic_light input.on).fadeIn(‘slow’);
    取而代之,首现保存jQuery变量到一个本地变量后,再继续你的操作。

    var $active_light = $(‘#traffic_light input.on’);
    $active_light.bind(‘click’, function(){…});
    $active_light.css(‘border’, ‘3px dashed yellow’);
    $active_light.css(‘background-color’, ‘orange’);
    $active_light.fadeIn(‘slow’);

    4.更好的利用链:
    var $active_light = $(‘#traffic_light input.on’);$active_light.bind(‘click’, function(){…})
    .css(‘border’, ‘3px dashed yellow’)
    .css(‘background-color’, ‘orange’)
    .fadeIn(‘slow’);
    这样可以让我们写更少的代码,使JavaScript更轻量。

    5.使用子查询
    jQuery 允许我们对一个已包装的对象使用附加的选择器操作. 因为我们已经在保存了一个父级对象在变量

    里, 这样大大提高对其子元素的操作:
    var $traffic_light = $(‘#traffic_light’),
    $active_light = $traffic_light.find(‘input.on’),
    $inactive_lights = $traffic_light.find(‘input.off’);
    提示: 你可以用逗号分隔的方法一次声明多个局部变量 节省字节数

    6.将 jquery结果缓存到一个全局变量中
    // 在全局范围定义一个对象 (例如: window对象)
    window.$my =
    {
    // 初始化所有可能会不止一次要使用的查询
    head : $(‘head‘),
    traffic_light : $(‘#traffic_light‘),
    traffic_button : $(‘#traffic_button‘)
    };
    function do_something()
    {
    //现在你可以引用存储的结果并操作它们
    var script = document.createElement(‘script‘);
    $my.head.append(script);
    $my.cool_results = $(‘#some_ul li‘);
    $my.other_results = $(‘#some_table td‘);// 将全局函数作为一个普通的jquery对象去使用.
    $my.other_results.css(‘border-color‘, ‘red‘);
    $my.traffic_light.css(‘border-color‘, ‘green‘);
    }

    7.第三,多用父子关系,少用嵌套关系。

    例如,使用parent>child代替parent child。因为”>”是child选择器,只从子节点里匹配,不递归。而” “是后

    代选择器,递归匹配所有子节点及子节点的子节点,即后代节点。

    jQuery选择器使用频率列表

    选 择 器 统计频率
    #id 51.290%
    .class 13.082%
    tag 6.416%
    tag.class 3.978%
    #id tag 2.151%
    tag#id 1.935%
    #id:visible 1.577%
    #id .class 1.434%
    .class .class 1.183%
    * 0.968%

    续表

    选 择 器 统计频率
    #id tag.class 0.932%
    #id:hidden 0.789%
    tag[name=value] 0.645%
    .class tag 0.573%
    [name=value] 0.538%
    tag tag 0.502%
    #id #id 0.430%
    #id tag tag 0.358%
  • 重启网络接口

    重启网络接口即可,networking restart 重启所有”激活”的主机网络接口,ifdown ethN, ifup ethN 重启制定网络接口。

  • jQuery上传插件Uploadify详解及其中文按钮解决方案

    网上找了一天,大家都说Uploadify唯一的缺点就是不支持中文按钮,杯具之前,我看了下Uploadify的API,才发现了几个参数没被大家提及的,这正是解决此问题的关键。(以后坚决养成没事就看API的习惯)
    Uploadify有一个参数是 buttonText 这个无论你怎么改都不支持中文,因为插件在js里用了一个转码方法把这个参数的值转过码了,解码的地方在那个swf文件里,看不到代码,所以这条路不行。
    另一个参数,网上很少提到,是 buttonImg( 按钮图片),这时你完全可以用一个图片来替换掉插件自带的那个黑色的flash浏览按钮,只要你自己的图片上是中文,这不就解决了中文按钮问题么?如果只加这一个,你会发现你的按钮图片下面有一片白色区域,其实就是那个flash留下的,白色区域表示鼠标可用范围,这个范围可以用width,height来调整。还有一个参数 wmode 它的默认值是opaque,把它改成transparent就行了,也就是把那片白色区域透明化。再用刚才说的方法,把按键点击范围设置成跟你图片一样大就完全OK了。
    ============================================
    Uploadify的用法就不说了,网上文章很多,跟别的jquery插件用法一样,就是几种文件的摆放路径而已。
    以下附上Uploadify部分参数的介绍,要看全部的就去看其API文件了,一般在下载的包里都有。
    uploader : uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后弹出打开文件对话框,默认值:uploadify.swf。
    script : 后台处理程序的相对路径 。默认值:uploadify.php
    checkScript :用来判断上传选择的文件在服务器是否存在的后台处理程序的相对路径
    fileDataName :设置一个名字,在服务器处理程序中根据该名字来取上传文件的数据。默认为Filedata
    method : 提交方式Post 或Get 默认为Post
    scriptAccess :flash脚本文件的访问模式,如果在本地测试设置为always,默认值:sameDomain
    folder : 上传文件存放的目录 。
    queueID : 文件队列的ID,该ID与存放文件队列的div的ID一致。
    queueSizeLimit : 当允许多文件生成时,设置选择文件的个数,默认值:999 。
    multi : 设置为true时可以上传多个文件。
    auto : 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 。
    fileDesc : 这个属性值必须设置fileExt属性后才有效,用来设置选择文件对话框中的提示文本,如设置fileDesc为“请选择rar doc pdf文件”,打开文件选择框效果如下图:
    fileExt : 设置可以选择的文件的类型,格式如:’*.doc;*.pdf;*.rar’ 。
    sizeLimit : 上传文件的大小限制 。
    simUploadLimit : 允许同时上传的个数 默认值:1 。
    buttonText : 浏览按钮的文本,默认值:BROWSE 。
    buttonImg : 浏览按钮的图片的路径 。
    hideButton : 设置为true则隐藏浏览按钮的图片 。
    rollover : 值为true和false,设置为true时当鼠标移到浏览按钮上时有反转效果。
    width : 设置浏览按钮的宽度 ,默认值:110。
    height : 设置浏览按钮的高度 ,默认值:30。
    wmode : 设置该项为transparent 可以使浏览按钮的flash背景文件透明,并且flash文件会被置为页面的最高层。 默认值:opaque 。
    cancelImg :选择文件到文件队列中后的每一个文件上的关闭按钮图标
    Uploadify还自带了很多参数及有用的方法和回调函数,都在API里,虽然是全英文的,但很容易看懂,这里就不说了。
    以下是我用到的代码,可以参考一下:
    <script type=”text/javascript”>
    $(document).ready(function() {
    $(“#uploadify”).uploadify({
    ‘uploader’       : ‘images/uploadify.swf’,
    ‘script’         : ‘<%=request.getContextPath()%>/content/ImportScheduleCommitAction.do’,
    ‘cancelImg’      : ‘images/cancel.png’,
    ‘folder’         : ‘/’,
    ‘queueID’        : ‘fileQueue’,
    ‘fileDataName’   : ‘uploadify’,
    ‘fileDesc’       : ‘支持格式:xls.’,
    ‘fileExt’        : ‘*.xls’,
    ‘auto’           : false,
    ‘multi’          : true,
    ‘height’         : 20,
    ‘width’          : 50,
    ‘simUploadLimit’ : 3,
    //’buttonText’     : ‘fdsfdsf…’,
    ‘buttonImg’      : ‘images/browse.jpg’,
    // ‘hideButton’     : true,
    // ‘rollover’       : true,
    ‘wmode’          : ‘transparent’ ,
    onComplete       : function (event, queueID, fileObj, response, data)
    {
    $(‘<li></li>’).appendTo(‘.files’).text(response);
    },
    onError          : function(event, queueID, fileObj)
    {
    alert(“文件:” + fileObj.name + ” 上传失败”);
    }
    // onCancel         : function(event, queueID, fileObj)
    // {
    //     alert(“取消文件:” + fileObj.name);
    // }
    });
    <script type=”text/javascript”>
    $(document).ready(function() {
    $(“#uploadify”).uploadify({
    ‘uploader’       : ‘images/uploadify.swf’,
    ‘script’         : ‘<%=request.getContextPath()%>/content/ImportScheduleCommitAction.do’,
    ‘cancelImg’      : ‘images/cancel.png’,
    ‘folder’         : ‘/’,
    ‘queueID’        : ‘fileQueue’,
    ‘fileDataName’   : ‘uploadify’,
    ‘fileDesc’       : ‘支持格式:xls.’,
    ‘fileExt’        : ‘*.xls’,
    ‘auto’           : false,
    ‘multi’          : true,
    ‘height’         : 20,
    ‘width’          : 50,
    ‘simUploadLimit’ : 3,
    //’buttonText’     : ‘fdsfdsf…’,
    ‘buttonImg’      : ‘images/browse.jpg’,
    // ‘hideButton’     : true,
    // ‘rollover’       : true,
    ‘wmode’          : ‘transparent’ ,
    onComplete       : function (event, queueID, fileObj, response, data)
    {
    $(‘<li></li>’).appendTo(‘.files’).text(response);
    },
    onError          : function(event, queueID, fileObj)
    {
    alert(“文件:” + fileObj.name + ” 上传失败”);
    }
    // onCancel         : function(event, queueID, fileObj)
    // {
    //     alert(“取消文件:” + fileObj.name);
    // }
    });
    要注意的是,我的script属性值是一个请求路径,我发现在我设置了同时上传多个文件后(比如3),并不是每请求一次去上传3个文件,而仍然是执行3次请求,请求一次上传一个文件。这也没办法,uplodify有那么多回调函数,要是一次处理多个,那回调函数的参数就不知道拿哪个了,因为这些参数都不是数组。
    也就是说,无论你设置同时上传几个文件,它都会一个一个去请求并上传,只是表面上感觉好像有多个线程同时在处理上传请求一样,只是表象而已。而且如果你把simUploadLimit设置过大就会经常出错,我设置成5的时候经常会有一两个文件上传失败。
  • ASP读写文本文件

    在ASP里,有一个FSO对象,File System Object,即文件系统对象。我们可以使用它来从文本文件中读取数据,或者将信息写入文本文件中。

    定义和用法

    OpenTextFile 方法打开指定的文件,并返回可用来访问此文件的 TextStream 对象。

    语法:

    FileSystemObject.OpenTextFile(fname,mode,create,format)
    参数 描述
    fname 必需的。要打开的文件的名称。
    mode 可选的。如何打开文件。

    • 1=ForReading – 打开文件用于读取数据。您无法向此文件写数据。
    • 2=ForWriting – 打开文件用于写数据。
    • 8=ForAppending – 打开文件,并向文件的末尾写数据。
    create 可选的。设置如果文件名不存在,是否创建新文件。True 指示可创建新文件,而 False 指示新文件不会被创建。False 是默认的。
    format 可选的。文件的格式。

    • 0=TristateFalse – 以 ASCII 打开文件。默认。
    • -1=TristateTrue – 以 Unicode 打开文件。
    • -2=TristateUseDefault – 使用系统默认格式打开文件。

    先来看一段代码:

    <%
    dim fs,f
    set fs=Server.CreateObject("Scripting.FileSystemObject")
    set f=fs.OpenTextFile(Server.MapPath("testread.txt"),8,true)
    f.WriteLine("This text will be added to the end of file")
    f.Close
    set f=Nothing
    set fs=Nothing
    %>

    上面的代码展示如何将一段文字写入到一个文本文件中。 下面我们再写一段程序,用ASP把它从文本文件中读出来,且看:

    <%
    dim fs,f,t,x
    set fs=Server.CreateObject("Scripting.FileSystemObject")
    set f=fs.CreateTextFile("c:\test.txt")
    f.write("Hello World!")
    f.close
    
    set t=fs.OpenTextFile("c:\test.txt",1,false)
    x=t.ReadAll
    t.close
    Response.Write("The text in the file is: " & x)
    %>

    这里使用了逐行读取的方法,将文本文件中的内容全部读取出来,保存到一个str变量中,ASP最后把str变量输出出来了。
    还一个方法叫readAll(),用它替换readLine()方法,表示,一次性把文本文件中的所有的内容都读出来,这时候当然就不需要循环了,大家可以自己写写看。
  • 地方团

    团购的最大亮点在于他能弥补类似淘宝、京东等商城无法提供生活化服务的缺陷。如果团购仅仅拼的是价格,那团购模式也不会被投资者如此看重了。
    从本地团购消费者的角度来讲,团购网站目前除了在一些大城市推广餐饮、娱乐服务外,对其他地区的大众推出的都是一些仅仅只有价格优势,而缺乏其他特色的产品。有些用户更需要的是一些本地商家、店家的打折优惠,对于这些需求,大的团购网站是无法满足他们的。地方团购网站正好弥补了这些不足,利用本地的地域优势,积极联系本地商家、店家,推出本地特色的团购产品和服务,这是行得通的。
    当我们的团购网站做出品牌知名度、用户量达到一定程度,你还怕没出路吗?无论是自己组建小团购运营还是将其出售给其他团购网站大佬,相信都是不错的选择。
  • php:strip_tags()

    strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。

  • php字符转换htmlspecialchars

    htmlspecialchars  将特殊字符转成 HTML 格式。

    本函数将特殊字符转成 HTML 的字符串格式 ( &….; )。最常用到的场合可能就是处理客户留言的留言版了。

    • & (和) 转成 &amp;
    • ” (双引号) 转成 &quot;
    • < (小于) 转成 &lt;
    • > (大于) 转成 &gt;

    此函数只转换上面的特殊字符,并不会全部转换成 HTML 所定的 ASCII 转换。

  • get_magic_quotes_gpc的使用

    if (! get_magic_quotes_gpc ()) {
    foreach ( array (‘_REQUEST’, ‘_GET’, ‘_POST’, ‘_FILES’, ‘_COOKIE’ ) as $v ) {
    $$v = abacaAddslashes ( $$v );
    }
    }

    在php的配置文件中,有个布尔值的设置,就是magic_quotes_runtime,当它打开时,

    php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反

    斜线。

  • sqlserver 一个sql查询 group by 应用

    select count(userid),left(U_birthday,4) from users where Addtime>dateadd(day,-30,getdate()) group by left(U_birthday,4)

    userid  自增id

    U_birthday 生日 2000-2-5 (格式)

    Addtime 注册时间 2000-2-5 22:33:15(格式)

    查询出最近一个月注册的各个年龄的用户总数