1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | //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 表示没有执行时间的限制,你的程序需要跑多久便跑多久。若果你的程序仍在测试阶段,推荐你把时限设置一个实数,以免程序的错误把服务器当掉。
1 2 3 4 5 6 7 8 9 10 | <?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() 方法一样返回单独一行结果,但是它不会预读取所有的结果数据到内存中。 如果你的查询结果不止一行,它将返回当前一行,并通过内部实现的指针来移动到下一行。
1 2 3 4 5 6 7 8 | $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规范指出,如果一个字符串以“0”开头(而不是“0x”或“0X”开头),parseInt()可能把它解释为一个八进制数或者十进制数。由于这一行为不确定,在IE6,7,8和较低版本的火狐、Opera、Safari、Chrome中,会以八进制方式进行转换,所以造就了这个奇葩的结果。parseInt() 方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由 parseInt() 方法的第二个参数指定的,所以要解析十六进制的值,需如下调用 parseInt() 方法:
小结:parseInt 函数的完整形式是:parseInt(string, radix),第二个参数是所谓的基数,设置string的格式,常用的有2、8、10、16,表示string是多少进制的数。强烈建议在使用parseInt()解析字符串时指定基数,多数情况下接受用户的输入很有可能得到“050”类似值,为避免不必要的逻辑错误,所以务必要指定基数。例如: parseInt(“050″, 10); //这里指定被解析数字的基数是十进制。避免了各种浏览器解析不一致的问题。
js lpad
1 2 3 4 5 6 7 8 9 10 | function lpad(len,initstr,padstr) { var result= "" ; for ( var i=1;i<=len-initstr.toString().length;i++) { result += padstr; } result += initstr; return result; } |
开始在固定位置 达到一定高度后随屏幕滚动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <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> |
更新了FileZilla 连接不上ftp了 解决办法
1. Go to FTP
2. Click on Site Manager under the File menu or press CTRL+S.
3. And select "only use plain FTP (insecure) from the "Encryption" drop down.
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:方法没实现引起的异常
示例:
13、 如果你不确定数据类型是字典还是列表时,可以用 14、StandardError 标准异常。
除StopIteration, GeneratorExit, KeyboardInterrupt 和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来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”\u***”的格式, 还会在一定程度上增加传输的数据量.
而在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode.
1 | echo json_encode( "中文" , JSON_UNESCAPED_UNICODE); |