通过 UA 来识别浏览器和操作系统技术
通过 UA 来判断浏览器及版本信息和操作系统类型及版本信息,其实意义不大,也是不太准的。一般这种只适用于浏览器请求识别,如果是 APP 客户端一般也不会设置这样的字段,至少会换种方式或名字。如果要更加准确的判断这些信息,应该在客户端完成识别。
即使意义不大,还得尝试去做。
写这种代码,比较费时间,因为不仅仅是技术,而是需要大量的搜集工作。找了一些开源的软件包,大的吓人,有些竟然依赖网络请求,这样就很慢且不稳定。发现一个网上的接口,一看就是专业的。useragentstring.com,不过这个接口太慢了。
分享一下,找起来不容易啊,尤其的微软的 Windows。
preg_match('/(firefox|chrome|msie|safari|360|uc|maxthon|qq)[\s\/]+([\d\.]+)/i', $user_agent, $matches); if (isset($matches[1])) { $browser = $matches[1]; } if (isset($matches[2])) { $browser_version = $matches[2]; } $data['browser'] = $browser; $data['browserVer'] = $browser_version; $operate_system = ''; if (strpos($user_agent, 'Windows NT 6.1')) { $operate_system = 'Windows7'; } if (strpos($user_agent, 'Windows NT 5.1')) { $operate_system = 'Windows XP'; } if (strpos($user_agent, 'Windows NT 6.4')) { $operate_system = 'Windows 10'; } if (strpos($user_agent, 'Windows NT 6.3')) { $operate_system = 'Windows 8.1'; } if (strpos($user_agent, 'Windows NT 6.2')) { $operate_system = 'Windows 8'; } if (strpos($user_agent, 'Windows NT 6.0')) { $operate_system = 'Windows vista'; } if (strpos($user_agent, 'Mac OS X')) { $operate_system = 'Mac OS X'; } if (strpos($user_agent, 'iPhone')) { $operate_system = 'iPhone'; } if (strpos($user_agent, 'iPad')) { $operate_system = 'iPad'; } if (strpos($user_agent, 'Android')) { $operate_system = 'Android'; } if (strpos($user_agent, 'Linux')) { $operate_system = 'Linux'; }
如何让 VIM 不生成备份文件技术
vim 编辑器在编辑文件的时候经常会到处生成备份文件,并且备份文件的文件名没有什么匹配规律,以致一度被认为是一个很脏的编辑器。
方法一,关闭备份:
set nobackup
方法二,设置备份目录:
set backupdir=/tmp
MySQL 开启通用查询日志技术
有时候对一些东西不熟悉,就必须要对相关的东西熟悉,一起配合起来才能查出问题。
MySQL 开启通用日志的方法,临时开启:
sql> set global log_output=file; sql> set global general_log_file='/tmp/general.log'; sql> set global general_log=on;
关闭通用日志:
sql> set global general_log=off;
PHP Fatal error: Can't use function return value in write context技术
经常写代码的你,是否遇到过这样的错误: FastCGI sent in stderr: "PHP message: PHP Fatal error: Can't use function return value in write context in ...
这是与 php 版本有关的报错,不能使用函数返回值作为函数参数,5.5 之后就不会有。
if (empty(self::conn())) return false;
empty function can be used only for variables and if you pass anything else, it will throw a parse error:
法国穷人富人对总统大选看法新闻
在法国最穷的城镇和最富裕的地区有很多不同,包括这次总统大选和候选人。
Roubaix 鲁贝,在法国北部,没落的工业。在 2014 年被评为法国最穷的地区,有 45% 的居民生活在贫困线以下。
同样,在巴黎郊区的富人区塞纳河畔讷伊,被评为最富裕的地区,只有 7% 的人生活了贫困线以下。
这两个富裕程度相差很大的城镇居民,对即将到来的法国大选和他们要选举的候选人有着非常不同的看法。
在鲁贝,这个靠近比利时的城镇,曾经的法国纺织工业的中心。问题不是他们会选哪个候选人,而是是否他们会选举。从这一点就可以看出来,它的绰号为什么是“缺席之都”。
大多数被采访的人都对这个国家非常失望,他们感觉到选举即将到来的总统对他们的未来没有任何影响。