分析浏览器脚本

    //Analysis browser

    function getBrowser($agent){
        if(strpos($agent,'MSIE')!==false || strpos($agent,'rv:11.0')) //ie11判断
            return "ie";
        else if(strpos($agent,'Firefox')!==false)
            return "firefox";
        else if(strpos($agent,'Chrome')!==false)
            return "chrome";
        else if(strpos($agent,'Opera')!==false)
            return 'opera';
        else if((strpos($agent,'Chrome')==false)&&strpos($agent,'Safari')!==false)
            return 'safari';
        else if((strpos($agent,'AppleWebKit')!==false))
            return 'safari';
        else
            return 'unknown';
    }

    function getBrowserVer($agent){
        if (preg_match('/MSIE\s(\d+)\..*/i', $agent, $regs))
            return $regs[1];
        elseif (preg_match('/FireFox\/(\d+)\..*/i', $agent, $regs))
            return $regs[1];
        elseif (preg_match('/Opera[\s|\/](\d+)\..*/i', $agent, $regs))
            return $regs[1];
        elseif (preg_match('/Chrome\/(\d+)\..*/i', $agent, $regs))
            return $regs[1];
        elseif ((strpos($agent,'Chrome')==false)&&preg_match('/Safari\/(\d+)\..*$/i', $agent, $regs))
            return $regs[1];
        elseif (preg_match('/AppleWebKit\/(\d+)\..*/i', $agent, $regs))
            return $regs[1];
        elseif (preg_match('/Trident\/(\d+)\..*/i', $agent, $regs))
            return $regs[1];
        else
            return 'unknow';
    }

    function get_ie_model($agent){
        if(strpos($agent,'compatible')!==false){
            return 'compatible';
        }else{
            return '';
        }
    }

    function getos($agent){
        if(strpos($agent,'Macintosh')!==false){
            return 'Mac';
        }
        else if(strpos($agent,'Android')!==false){
            return 'Android';
        }
        else if(strpos($agent,'Windows')!==false){
            return 'Windows';
        }
        else if(strpos($agent,'iPad')!==false){
            return 'iPad';
        }
        else if(strpos($agent,'iPhone')!==false){
            return 'iPhone';
        }
        else {
            return 'unknow';
        }
    }

    function transfer_browser_info(){
        ini_set('max_execution_time', '0');

        //get customer lkup arr
        $customer_list = $this->db->query("select customer_id, customer_name from evo_central_config.customer")->result_array();
        $customer_lkup = array();
        foreach($customer_list as $row){
            $customer_lkup[$row['customer_id']] = $row['customer_name'];
        }

        $sql = "select count(*) as cnt, login_name, user_agent from evo_central.user_login_trail where login_time > '2015-01-01 00:00:00' and login_password = 'OK' and login_name != '' group by login_name, user_agent" ;
        $result = $this->db->query($sql)->result_array();

        foreach($result as $row)
//        $query = $this->db->query($sql);
//        while ($row = $query->unbuffered_row())
        {
            $login_name = $row['login_name'];
            $agent = $row['user_agent'];

            #user_id,user_name,customer_id,customer_name,os,browser,version,model
            $user_info = $this->db->query("select * from evo_central_config.customer_user_online where login_name = '$login_name'")->row_array();

            $insert_arr = array();
            if(!empty($user_info)){
                $insert_arr['cnt']           = $row['cnt'];
                $insert_arr['user_id']       = $user_info['user_id'];
                $insert_arr['user_name']     = $user_info['user_name'];
                $insert_arr['customer_id']   = $user_info['customer_id'];
                $insert_arr['customer_name'] = !empty($customer_lkup[$insert_arr['customer_id']]) ? $customer_lkup[$insert_arr['customer_id']] : '' ;
                $insert_arr['os']            = $this->getos($agent);
                $insert_arr['browser']       = $this->getBrowser($agent);
                $insert_arr['version']       = $this->getBrowserVer($agent);
                $insert_arr['model']         = $this->get_ie_model($agent);
                $insert_arr['agent']         = $agent;

                $this->db->insert('evo_central.test',$insert_arr);
            }

        }
    }

PHP脚本的最大执行时间问题

php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,倘若你有一个需要颇多时间才能完成的工作,例如要发送很多电子邮件给大量收件者,或者要进行繁重的数据分析工作,服务器会在 30 秒后强行中止正在执行的程序,如何解决这个问题呢。

另一个办法是在 PHP 程序中加入 ini_set('max_execution_time', '0'),数值 0 表示没有执行时间的限制,你的程序需要跑多久便跑多久。若果你的程序仍在测试阶段,推荐你把时限设置一个实数,以免程序的错误把服务器当掉。

 <?php
 //max_execution_time=100;
 ini_set("max_execution_time", 1);  //用此function才能真正在运行时设置
 for($i=1; $i< 100000; $i++) 
 { 
  echo "No. {$i}\n"; 
  echo '<br />';
  flush(); 
 }
?>

在这里简单记录下~

CI处理大结果集

unbuffered_row() 方法

老版本不支持3.0以上才有

row() 方法一样返回单独一行结果,但是它不会预读取所有的结果数据到内存中。 如果你的查询结果不止一行,它将返回当前一行,并通过内部实现的指针来移动到下一行。

$query = $this->db->query("YOUR QUERY");

while ($row = $query->unbuffered_row())
{
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

在IE6,7,8 parseInt()前导为”0″ 转换值不准确

parseInt()有两种模式,通常我们使用普通模式,ECMAScript规范指出,如果一个字符串以&ldquo;0&rdquo;开头(而不是&ldquo;0x&rdquo;或&ldquo;0X&rdquo;开头),parseInt()可能把它解释为一个八进制数或者十进制数。由于这一行为不确定,在IE6,7,8和较低版本的火狐、Opera、Safari、Chrome中,会以八进制方式进行转换,所以造就了这个奇葩的结果。parseInt() 方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由 parseInt() 方法的第二个参数指定的,所以要解析十六进制的值,需如下调用 parseInt() 方法:

 

 

小结:parseInt 函数的完整形式是:parseInt(string, radix),第二个参数是所谓的基数,设置string的格式,常用的有2、8、10、16,表示string是多少进制的数。强烈建议在使用parseInt()解析字符串时指定基数,多数情况下接受用户的输入很有可能得到&ldquo;050&rdquo;类似值,为避免不必要的逻辑错误,所以务必要指定基数。例如: parseInt(&ldquo;050&Prime;, 10); //这里指定被解析数字的基数是十进制。避免了各种浏览器解析不一致的问题。

js lpad

        function lpad(len,initstr,padstr)
        {
            var result="";
            for(var i=1;i<=len-initstr.toString().length;i++)
            {
                result += padstr;
            }
            result += initstr;
            return result;
        }

开始在固定位置 达到一定高度后随屏幕滚动

<style type="text/css">

.div1 {
    height:2000px;
}


.div2 {
    width:200px;
    height:200px;
    background-color:#3399FF;
    margin-top:100px;
}
.div2_1{
    position:fixed;
    width:200px;
    height:200px;
    z-index:999;
    background-color:#3399FF;
    top:0px;
    _position:absolute;
    _bottom:auto;
    _top:[removed]eval(document.documentElement.scrollTop));
}
</style>

<script type="text/javascript">
window.onscroll=function(){ 
    var t=document.documentElement.scrollTop||document.body.scrollTop;  
    var div2=document.getElementById("div2"); 
    if(t>= 100){ 
        div2.className = "div2_1";
    }else{
        div2.className = "div2";
    } 
}
</script>


<div class="div1">
    <div id="div2" class="div2"></div>
</div>

python 错误类型

1、NameError:尝试访问一个未申明的变量

NameError: name 'v' is not defined

>>> v = 1/0



3、SyntaxError:语法错误


SyntaxError: invalid syntax (<pyshell#14>, line 1)

>>> List = [2]

Traceback (most recent call last):

    List[3]



5、KeyError:字典关键字不存在

>>> Dic['3']

  File "<pyshell#20>", line 1, in <module>

KeyError: '3'

>>> f = open('abc')



7、AttributeError:访问未知对象属性


 def Work():

>>> w = Worker()

Traceback (most recent call last):

    w.a

Traceback (most recent call last):

    int('d')



9、TypeError:类型错误


>>> iVal = 22

Traceback (most recent call last):

    obj = iStr + iVal;



10、AssertionError:断言错误


Traceback (most recent call last):

    assert 1 != 1

http://blog.csdn.net/fcoolx/article/details/4202872

11、 NotImplementedError:方法没实现引起的异常

    示例:

class Base(object):
    def __init__(self):
        pass

    def action(self):
        raise NotImplementedError

 

13、         如果你不确定数据类型是字典还是列表时,可以用 14、StandardError 标准异常。

 

    除StopIterationGeneratorExitKeyboardInterrupt 和SystemExit外,其他异常都是StandarError的子类。

python 笔记

1. %s, %d, %f用法

在python中,print语句和字符操作符结合使用,可实现字符串替换功能。

%s—表示由一个字符串来替换

%d—表示由一个整型来替换

%f—表示由一个浮点型来替换

eg:

>>> print "%s is number %d!" % ("Python",1)

Python is number 1!

 

2.raw_input()内建函数

raw_input–从标准输入读取一个字符串,并自动删除串尾的换行字符。

a)可将读取的数据赋值给一个变量,作再次使用

>>> user=raw_input("enter your name:")

enter your name:jane

>>> print "your login is:", user

your login is: jane

 

b)也可使用int()函数将输入的字符串转换为整型

>>> num=raw_input("Now enter a number:")

Now enter a number:1023

>>> print "doubling your number: %d" %(int(num)*2)

doubling your number: 2046

>>> print "doubling your number: %d" %(num *2)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: %d format: a number is required, not str

json_encode 处理中文

我们知道, 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似&rdquo;\u***&rdquo;的格式, 还会在一定程度上增加传输的数据量.

而在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode.

echo json_encode("中文", JSON_UNESCAPED_UNICODE);