• php:strip_tags()

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

  • php字符转换htmlspecialchars

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

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

    • & (和) 转成 &
    • ” (双引号) 转成 "
    • < (小于) 转成 &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(格式)

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

  • 一个php获取客户端ip,操作系统,浏览器信息的类

    以下为引用的内容:
    <?php class clientGetObj
    {
    function
    getBrowse
    ()
    {
    global
    $_SERVER
    ;
    $Agent = $_SERVER[‘HTTP_USER_AGENT’
    ];
    $browser =
    ;
    $browserver =
    ;
    $Browser = array(‘Lynx’, ‘MOSAIC’, ‘AOL’, ‘Opera’, ‘JAVA’, ‘MacWeb’, ‘WebExplorer’, ‘OmniWeb’
    );
    for(
    $i = 0; $i <= 7; $i
    ++){
    if(
    strpos($Agent, $Browsers[$i
    ])){
    $browser = $Browsers[$i
    ];
    $browserver =
    ;
    }
    }
    if(
    ereg(‘Mozilla’, $Agent) && !ereg(‘MSIE’, $Agent
    )){
    $temp = explode(‘(‘, $Agent
    );
    $Part = $temp[0
    ];
    $temp = explode(‘/’, $Part
    );
    $browserver = $temp[1
    ];
    $temp = explode(‘ ‘, $browserver
    );
    $browserver = $temp[0
    ];
    $browserver = preg_replace(‘/([d.]+)/’, ‘1’, $browserver
    );
    $browserver = $browserver
    ;
    $browser = ‘Netscape Navigator’
    ;
    }
    if(
    ereg(‘Mozilla’, $Agent) && ereg(‘Opera’, $Agent
    )) {
    $temp = explode(‘(‘, $Agent
    );
    $Part = $temp[1
    ];
    $temp = explode(‘)’, $Part
    );
    $browserver = $temp[1
    ];
    $temp = explode(‘ ‘, $browserver
    );
    $browserver = $temp[2
    ];
    $browserver = preg_replace(‘/([d.]+)/’, ‘1’, $browserver
    );
    $browserver = $browserver
    ;
    $browser = ‘Opera’
    ;
    }
    if(
    ereg(‘Mozilla’, $Agent) && ereg(‘MSIE’, $Agent
    )){
    $temp = explode(‘(‘, $Agent
    );
    $Part = $temp[1
    ];
    $temp = explode(‘;’, $Part
    );
    $Part = $temp[1
    ];
    $temp = explode(‘ ‘, $Part
    );
    $browserver = $temp[2
    ];
    $browserver = preg_replace(‘/([d.]+)/’,‘1’,$browserver
    );
    $browserver = $browserver
    ;
    $browser = ‘Internet Explorer’
    ;
    }
    if(
    $browser !=
    ){
    $browseinfo = $browser.‘ ‘.$browserver
    ;
    } else {
    $browseinfo = false
    ;
    }
    return
    $browseinfo
    ;
    }

    function getIP ()
    {
    global
    $_SERVER
    ;
    if (
    getenv(‘HTTP_CLIENT_IP’
    )) {
    $ip = getenv(‘HTTP_CLIENT_IP’
    );
    } else if (
    getenv(‘HTTP_X_FORWARDED_FOR’
    )) {
    $ip = getenv(‘HTTP_X_FORWARDED_FOR’
    );
    } else if (
    getenv(‘REMOTE_ADDR’
    )) {
    $ip = getenv(‘REMOTE_ADDR’
    );
    } else {
    $ip = $_SERVER[‘REMOTE_ADDR’
    ];
    }
    return
    $ip
    ;
    }

    function getOS ()
    {
    global
    $_SERVER
    ;
    $agent = $_SERVER[‘HTTP_USER_AGENT’
    ];
    $os = false
    ;
    if (
    eregi(‘win’, $agent) && strpos($agent, ’95’
    )){
    $os = ‘Windows 95’
    ;
    }
    else if (
    eregi(‘win 9x’, $agent) && strpos($agent, ‘4.90’
    )){
    $os = ‘Windows ME’
    ;
    }
    else if (
    eregi(‘win’, $agent) && ereg(’98’, $agent
    )){
    $os = ‘Windows 98’
    ;
    }
    else if (
    eregi(‘win’, $agent) && eregi(‘nt 5.1’, $agent
    )){
    $os = ‘Windows XP’
    ;
    }
    else if (
    eregi(‘win’, $agent) && eregi(‘nt 5’, $agent
    )){
    $os = ‘Windows 2000’
    ;
    }
    else if (
    eregi(‘win’, $agent) && eregi(‘nt’, $agent
    )){
    $os = ‘Windows NT’
    ;
    }
    else if (
    eregi(‘win’, $agent) && ereg(’32’, $agent
    )){
    $os = ‘Windows 32’
    ;
    }
    else if (
    eregi(‘linux’, $agent
    )){
    $os = ‘Linux’
    ;
    }
    else if (
    eregi(‘unix’, $agent
    )){
    $os = ‘Unix’
    ;
    }
    else if (
    eregi(‘sun’, $agent) && eregi(‘os’, $agent
    )){
    $os = ‘SunOS’
    ;
    }
    else if (
    eregi(‘ibm’, $agent) && eregi(‘os’, $agent
    )){
    $os = ‘IBM OS/2’
    ;
    }
    else if (
    eregi(‘Mac’, $agent) && eregi(‘PC’, $agent
    )){
    $os = ‘Macintosh’
    ;
    }
    else if (
    eregi(‘PowerPC’, $agent
    )){
    $os = ‘PowerPC’
    ;
    }
    else if (
    eregi(‘AIX’, $agent
    )){
    $os = ‘AIX’
    ;
    }
    else if (
    eregi(‘HPUX’, $agent
    )){
    $os = ‘HPUX’
    ;
    }
    else if (
    eregi(‘NetBSD’, $agent
    )){
    $os = ‘NetBSD’
    ;
    }
    else if (
    eregi(‘BSD’, $agent
    )){
    $os = ‘BSD’
    ;
    }
    else if (
    ereg(‘OSF1’, $agent
    )){
    $os = ‘OSF1’
    ;
    }
    else if (
    ereg(‘IRIX’, $agent
    )){
    $os = ‘IRIX’
    ;
    }
    else if (
    eregi(‘FreeBSD’, $agent
    )){
    $os = ‘FreeBSD’
    ;
    }
    else if (
    eregi(‘teleport’, $agent
    )){
    $os = ‘teleport’
    ;
    }
    else if (
    eregi(‘flashget’, $agent
    )){
    $os = ‘flashget’
    ;
    }
    else if (
    eregi(‘webzip’, $agent
    )){
    $os = ‘webzip’
    ;
    }
    else if (
    eregi(‘offline’, $agent
    )){
    $os = ‘offline’
    ;
    }
    else {
    $os = ‘Unknown’
    ;
    }
    return
    $os
    ;
    }

    }?>

    使用方法:

    1.将以上框内代码另存为getinfo.php

    2.在需要地页面引入getinfo.php
    <?php incude(‘getinfo.php’); ?>

    3. 使用之前定义的类

    以下为引用的内容:
    <?php
    $code = new clientGetObj;
    $str1 = $code->getBrowse();//浏览器:
    $str2 = $code->getIP();//IP地址:
    $str3 = $code->getOS();//操作系统:
    echo “目标浏览器:”.$str1.” OS:”.$str3.” IP:”.$str2;
    ?>
  • ADODB常用方法

    < ?php
    /*
    常用的ADODB使用方法
    */

    //定义数据库变量
    $DB_TYPE = mysql;
    $DB_HOST = localhost;
    $DB_USER = root;
    $DB_PASS = “”;
    $DB_DATABASE = ai-part;
    require_once(../adodb/adodb.inc.php);
    $db = NewADOConnection($DB_TYPE);//建立数据库对象
    $db->debug = true;//数据库的DEBUG测试,程序开发期,可设置为true,正式版要注释掉这行,(默认值是false)
    $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
    /*
    返回的记录集形式
    define(‘ADODB_FETCH_DEFAULT’,0);
    define(‘ADODB_FETCH_NUM’,1);
    define(‘ADODB_FETCH_ASSOC’,2);
    define(‘ADODB_FETCH_BOTH’,3);
    以上的常量,是在adodb.inc.php里定义的,也就是$ADODB_FETCH_MODE 这个变量可以设置的值
    常用的是:ADODB_FETCH_NUM 或 ADODB_FETCH_ASSOC
    ADODB_FETCH_NUM 返回的记录集中的索引,是数字形式,即数据库字段的排序顺序值
    ADODB_FETCH_ASSOC 返回的记录集中的索引,是原数据库字段名
    ADODB_FETCH_BOTH 和 ADODB_FETCH_DEFAULT 是同时返回 ADODB_FETCH_NUM, ADODB_FETCH_ASSOC的值,某些数据库不支持
    An example:

    $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
    $rs1 = $db->Execute(‘select * from table’);
    $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
    $rs2 = $db->Execute(‘select * from table’);
    print_r($rs1->fields); # 返回的数组是: array([0]=>’v0′,[1] =>’v1′)
    print_r($rs2->fields); # 返回的数组是: array([‘col1′]=>’v0’,[‘col2′] =>’v1’)
    */

    //连接数据库,方法有Connect,PConnect,NConnect,一般使用Connect. NConnect是连接特殊的数据库时才用
    if (!@$db->Connect($DB_HOST, $DB_USER, $DB_PASS, $DB_DATABASE)) {
    exit(服务器忙,请稍候再访问);
    }

    /*
    $db-> $rs-> 此类的使用方法
    Execute($sql,$inputarr=false),执行参数中的$sql语句,后面的那个$inputarr参数,一般情况下不需要
    SelectLimit($sql,$numrows=-1,$offset=-1,$inputarr=false)
    $numrows:取几条记录,$offset,从第几条开始取,SelectLimit,一般是用于分页,或只取出几条记录的时候用
    */

    //Example: 取出多个记录
    $sql = SELECT * FROM table ORDER BY id DESC;
    if (!$rs = $db->Execute($sql)) {//执行SQL语句,并把结果返回给$rs变量
    echo $db->ErrorMsg();//这个是打印出错信息
    $db->Close();//关闭数据库
    exit();
    }
    while (!$rs->EOF) {//遍历记录集
    echo $rs->fields[username] .
    ;//print_r($rs->fields)试试,$rs->fields[‘字段名’],返回的是这个字段里的值
    $rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
    }
    $rs->Close();//关闭它,以便释放内存,每次操作完都进行一次关闭,养成编程的好习惯

    //插入新记录
    $sql = INSERT table (user_type,username) VALUES (3, ‘liucheng’);
    $db->Execute($sql);
    //更新记录
    $sql = UPDATE table SET user_type=3 WHERE id=2;
    $db->Execute($sql);
    //删除记录
    $sql = DELETE FROM table WHERE id=2;
    $db->Execute($sql);

    // 取单个记录
    //$db->GetRow($sql), 取出SQL中的第一条记录,并返回一个数组,如果出错,则返回false
    $sql = SELECT username,password,user_type FROM table WHERE id=3;
    $data_ary = $db->GetRow($sql);
    if ($data_ary == false) {//如果用===,可能不是你想要的结果
    echo 没有找到此记录;
    exit();
    } else {
    echo $data_ary[username] . . $data_ary[password] . . $data_ary[user_type] .
    ;
    }
    //这里没有用到$rs,则不需要$rs->Close();
    //另一种方法 (使用上面的方法比较好,又方便)
    $sql = SELECT username,password,user_type FROM table WHERE id=3;
    if (!$rs = $db->Execute($sql)) {
    echo $db->ErrorMsg();
    $db->Close();
    exit();
    }
    if (!$result = $rs->FetchRow()) {
    echo 没有找到此记录;
    exit();
    } else {
    echo $result[username] . . $result[password] . . $result[user_type] .
    ;
    }

    //$db->GetOne($sql) 取出SQL中的第一条记录的第一个字段的值,如果出错,则返回false
    $sql = SELECT COUNT(id) FROM table;
    $record_nums = $db->GetOne($sql);
    echo $record_nums;
    $sql = SELECT username,password,user_type FROM table WHERE user_id=1;
    $result = $db->GetOne($sql);
    echo $result;//此值为记录中的username的值
    /*
    在进行添加,修改,删除记录操作时,要对字符串型的字段,使用$db->qstr()对用户输入的字符进行处理,对数字型字段,要在之前,进行数据判断
    更新记录,注意:这是针对php.ini中,magic_quotes被设置为Off的情况,如果不确定,可以使用
    $db->qstr($content,get_magic_quotes_gpc())
    注意:content= 等号右边,没有单引号
    */

    $sql = UPDATE table SET content= . $db->qstr($content) . WHERE id=2;
    $db->Execute($sql);

    /*$db->Insert_ID(),无参数,返回刚刚插入的那条记录的ID值,仅支持部分数据库,带auto-increment功能的数据库,如PostgreSQL, MySQL 和 MS SQL
    */

    //Example:
    $sql = INSERT table (user_type,username) VALUES (3, ‘liucheng’);
    $db->Execute($sql);
    $data_id = $db->Insert_ID();
    echo $data_id;

    /*$db->GenID($seqName = ‘adodbseq’,$startID=1),产生一个ID值.$seqName:用于产生此ID的数据库表名,$startID:起始值,一般不用设置,它会把$seqName中的值自动加1.支持部分数据库,某些数据库不支持

    Insert_ID,GenID,一般我用GenID,使用它的目的,是在插入记录后,要马上得到它的ID时,才用
    */
    /*Example:
    先创建一个列名为user_id_seq的表,里面只有一个字段,id,int(10),NOT NULL,然后插入一条值为0的记录
    */

    $user_id = $db->GenID(user_id_seq);
    $sql = INSERT table (id, user_type,username) VALUES ( . $user_id . , 3, ‘liucheng’);
    $db->Execute($sql);

    /*
    $rs->RecordCount(),取出记录集总数,无参数
    它好像是把取出的记录集,用count()数组的方法,取得数据的数量
    如果取大量数据,效率比较慢,建议使用SQL里的COUNT(*)的方法
    $sql = “SELECT COUNT(*) FROM table”, 用此方法时,不要在SQL里加ORDER BY,那样会降低执行速度

    Example:
    */
    $sql = SELECT * FROM table ORDER BY id DESC;
    if (!$rs = $db->Execute($sql)) {
    echo $db->ErrorMsg();
    $db->Close();
    exit();
    }
    $record_nums = $rs->RecordCount();

    /*
    如果想对某一结果集,要进行两次同样的循环处理,可以用下面方法
    以下,只是一个例子,只为说明$rs->MoveFirst()的使用方法
    */

    $sql = SELECT * FROM table ORDER BY id DESC;
    if (!$rs = $db->Execute($sql)) {
    echo $db->ErrorMsg();
    $db->Close();
    exit();
    }
    $username_ary = array();
    while (!$rs->EOF) {
    $username_ary[] = $rs->fields[username]
    echo $rs->fields[username] .
    ;//print_r($rs->fields)试试,$rs->fields[‘字段名’],返回的是这个字段里的值
    $rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
    }
    $username_ary = array_unique($username_ary);

    $rs->MoveFirst();//将指针指回第一条记录,无参数
    while (!$rs->EOF) {
    echo $rs->fields[password] .
    ;//print_r($rs->fields)试试,$rs->fields[‘字段名’],返回的是这个字段里的值
    $rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
    }
    $rs->Close();

    /*
    当本页程序,对数据库的操作完毕后,要$db->Close();

    */

    $db->Close();

    /*一个不错的方法 */
    if (isset($db)) {
    $db->Close();
    }
    ?>

  • iptables防火墙配置——CentOS

    在Linux中设置防火墙,以CentOS为例,打开iptables的配置文件:

    vi /etc/sysconfig/iptables  
     
    通过/etc/init.d/iptables status命令查询是否有打开80端口,如果没有可通过两种方式处理:

    1.修改vi /etc/sysconfig/iptables命令添加使防火墙开放80端口

    -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT  
     
    2.关闭/开启/重启防火墙

    /etc/init.d/iptables stop   #start 开启   #restart 重启  
     
    3.永久性关闭防火墙

    chkconfig –level 35 iptables off   /etc/init.d/iptables stop   iptables -P INPUT DROP  
     
    4.打开主动模式21端口

    iptables -A INPUT -p tcp –dport 21 -j ACCEPT  

    5.打开被动模式49152~65534之间的端口

    iptables -A INPUT -p tcp –dport 49152:65534 -j ACCEPT   iptables -A INPUT -i lo -j ACCEPT   iptables -A INPUT -m state –state ESTABLISHED -j ACCEPT  

    注意:

    一定要给自己留好后路,留VNC一个管理端口和SSh的管理端口

    需要注意的是,你必须根据自己服务器的情况来修改这个文件。

    全部修改完之后重启iptables:

    service iptables restart

    你可以验证一下是否规则都已经生效:

    iptables -L

  • VsFTP出现500 OOPS: cannot change directory的解决办法

    解决方法:
    在终端输入命令:
    setsebool ftpd_disable_trans 1
    service vsftpd restart
    就OK了!
     

    在安装完vsftp服务后登陆时可能遇到cannot change directory后面是登陆者的目录的错误。这是因为SE设置的关闭了ftp的原因。

    使用命令

    getsebool ftpd_disable_trans

    可以查看当前的状态如果不是on

    那么是输入命令

    setsebool ftpd_disable_trans 1

    当然也可以加入-P参数 以便不需要每次开机都输入这个命令

    setsebool -P ftpd_disable_trans 1

    service vsftpd restart

    同理 如果smb服务也遇到相同的问题 ,也可以这么做。

    setsebool -P samba_enable_home_dirs=1

     
    FTP登录时错误信息:
    500 OOPS: cannot change directory:/home/xxxxLogin failed.
    421 Service not available, remote server has closed connection

    原来是新装系统RHEL5 增强的系统安全SELinux在作怪,关掉SELinux对FTP Daemon的保护就OK了:
    # setsebool ftpd_disable_trans 1
    # service vsftpd restart

  • 不同的按钮提交到不同的页面去处理

    <script>// <![CDATA[
    function mod1()
    {
    document.form1.action=”modify.jsp”;
    document.form1.submit();
    }
    function mod2()
    {
    document.form1.action=”delete.jsp”;
    document.form1.submit();
    }
    // ]]></script>
    <form> <input onclick=”mod1()” type=”Button” value=”修 改 ” />
    <input onclick=”mod2()” type=”Button” value=”删 除 ” />
    </form>
  • svn同步备份到远程服务器,创建项目时都自动创建

    svn项目备份shell脚本
    本地服务器–A
    远程服务器–B
    项目名称—–$1

    vi svnserve.conf
    [general]
    ### 未授权用户无权限,授权用户可写
    anon-access = none
    auth-access = write
    ### 使用统一用户密码文件,密码是明文的
    password-db = /var/svn/conf/passwd
    ### 根据项目需要制定详细权限
    # authz-db = authz

    A服务器创建项目脚本
    vi createprojiect
    svnadmin create /var/svn/”$1″
    cp /var/svn/conf/svnserve.conf /var/svn/”$1″/conf/svnserve.conf

    B服务器创建项目脚本
    ######################demo为B服务器创建并配置好的项目
    vi makeBackup
    #!/bin/sh
    svnadmin create /var/svn/”$1″
    cp /var/svn/demo/conf/svnserve.conf /var/svn/”$1″/conf/svnserve.conf
    cp /var/svn/demo/hooks/pre-revprop-change /var/svn/”$1″/hooks/
    cp /var/svn/demo/hooks/start-commit /var/svn/”$1″/hooks/

    A服务器执行

    svnsync –sync-username B服务器svn用户名 –sync-password B服务器svn密码 –source-username A服务器svn用户名 –source-password B服务器svn密码 init svn://B服务器/”$1″ svn://A服务器/”$1″
    ——————————————————
    vi /var/svn/conf/sync2backup
    添加以下内容
    svnsync sync svn://backup.qqgexing.com/$1 >> /var/log/svn/sync.log

    —————————————————————————————————————————————————————————————-

    最终汇总到A服务器的脚本文件
    #!/bin/sh
    # 【文件说明】
    # 使用脚本简便创建svn项目并设置备份同步
    # 【用法】
    # ./creatProject arg1 [backup]
    # 第二个参数为backup的时候才会设置项目备份

    if [ "$1" = "" ]; then
    echo "必须输入项目名称"
    exit 0
    else
    echo "正在创建版本库...";
    fi

    # 创建svn版本库,使用通用权限配置
    svnadmin create /var/svn/"$1"
    cp /var/svn/conf/svnserve.conf /var/svn/"$1"/conf/svnserve.conf

    if [ "$2" = backup ]; then
    # 到B服务器同步项目
    ssh root@B服务器 "/var/svn/conf/makeBackup $1"

    # 版本库备份初始化
    svnsync --sync-username B服务器svn用户名 --sync-password B服务器svn密码 --source-username A服务器svn用户名 --source-password B服务器svn密码 init svn://B服务器/"$1" svn://A服务器/"$1"

    # 备份项目添加到备份定时脚本
    echo -e "\n# $1 \necho 'Project : $1' >> /var/log/svn/sync.log \nsvnsync sync svn://B服务器/$1 >> /var/log/svn/sync.log" >> /var/svn/conf/sync2backup
    else
    echo "注意:没有把项目添加到备份列表中"
    fi

    echo "版本库配置完成。使用通用的权限配置文件。"