再次深入研究苹果消息推送服务(APNS) 完善PHP版服务器端公共类

前段时间开发的一套APNS推送平台效率很差,通过再次深入研究苹果的消息推送服务,总结了不少经验。同时也参考了网上一些技术blog的博文,重新完善了此前写过的一个PHP类,代码如下:

阳光部落原创,更多内容请访问http://www.sunbloger.com/

Linux Bash发现重大安全漏洞

北京时间9月25日消息,Linux用户今天又得到了一个“惊喜”!Red Hat安全团队在 Linux 中广泛使用的Bash shell中发现了一个隐晦而危险的安全漏洞。该漏洞被称为“Bash Bug”或“Shellshock”。

当用户正常访问,该漏洞允许攻击者的代码像在Shell中一样执行,这就为各种各样的攻击打开了方便之门。而且,更糟糕的是,该漏洞已经在Linux中存在很长时间了,所以修补某个Linux机器很容易,但是要全部修补,几乎不可能实现。

Red Hat和Fedora已经发布了针对该漏洞的修补程序。该漏洞也会影响OS X,不过苹果公司尚未发布正式的修补程序。

这个Bash漏洞可能比Heartbleed更危险。

— — Robert Graham (@ErrataRob) 2014 年 9 月 24 日

Red Hat的Robert David Graham比较了该漏洞和Heartbleed,发现前者分布更广泛,有可能对系统安全带来长期影响。Graham在一篇博客文章中写道:“有大量的软件以某种方式与Shell交互,我们没有办法列举出受该漏洞影响的所有软件。”据The Verge报道,Berkeley ICSI的研究员Nicholas Weaver也同意这个说法:“它很隐晦、很可怕,并且会伴随我们多年。”

网络安全公司Rapid7工程部经理Tod Beardsley警告称,Bash漏洞的严重级别为“10”,这意味着它对用户电脑的威胁最大。Bash漏洞的利用复杂度级别为“低”,意味着黑客可以相对轻松地利用它发动攻击。

另外,网络安全公司Trail of Bits的CEO Dan Guido表示,“Heartbleed”漏洞能够允许黑客监控用户电脑,但不会取得控制权。而利用Bash漏洞的方法也更简单——只需要剪切和粘贴一行代码即可。

据称,谷歌安全研究员Tavis Ormandy在Twitter上表示,Linux系统提供商推出的补丁似乎“并不完整”,这引发了几位安全专家的担忧。(责编/单明珠)

本文转载自Linux中国,原文出自The Verge,部分内容有删改。

在Linux中用Shell脚本完成SVN版本库的建立

每次建立一个新的SVN版本库总感觉很繁琐,所以写了段脚本来把这个过程自动化,详细代码如下:

阳光部落原创,更多内容请访问http://www.sunbloger.com/

MySQL获取自增主键ID的四种方法

1. SELECT MAX(id) FROM tablename

2. LAST_INSERT_ID() 函数

LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

在多用户交替插入数据的情况下MAX(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update 操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录, LAST_INSERT_ID返回一个列表。

3. SELECT @@IDENTITY;

@@identity 是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。

比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。

4. SHOW TABLE STATUS;

得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值就是当前该表的最大自增ID。

上述内容来自互联网

用Python提取网页中的超链接

最近正在学习Python,打算用作爬虫开发。既然要做爬虫,首先就要抓取网页,并且从网页中提取出超链接地址。

下面是最简单的实现方法,先将目标网页抓回来,然后通过正则匹配a标签中的href属性来获得超链接,代码如下:

阳光部落原创,更多内容请访问http://www.sunbloger.com/

在Linux/CentOS中编译安装Python

心血来潮,想学习一下Python,听说用来做爬虫还不错。先从运行环境开始入手,CentOS中已经内置了Python,但版本似乎比较老,通过python -V命令看到版本是2.4.3。目前Python 2.x的最新版本号是2.7.8,那么就开始动手升级一下。

首先,下载源码包,命令如下:

这里需要特别注意一下,因为下载网址是https开头的,所以要给wget命令加上--no-check-certificate参数。

下载好源码包后,解压:

解压出Python-2.7.8这个目录后,我们开始对源码进行编译:

编译安装完成后,要替换掉系统自带的Python,但CentOS的yum依赖于Python工作,为了保证yum的正常运行,我们要在替换前,先将自带的Python更名备份,方法如下:

上面两行命令执行完后,可以分别用“python -V”和“/usr/bin/python-2.4.3 -V”来验证部署是否成功,正确的结果应该是2.7.8和2.4.3。

最后,要修改yum,让其运行指向旧的版本:

将第一行中的“#!/usr/bin/python”修改为“#!/usr/bin/python-2.4.3”,保存即可。

 

阳光部落原创,更多内容请访问http://www.sunbloger.com/

PHPCMS V9无法正常通过QQ登录的解决方案

这个故障的原因是PHPCMS V9的QQ登录功能代码中,使用了file_get_contents函数来获取腾讯的https网址,这类网址是通过ssl加密传输的。虽然,我们可以通过为PHP安装openssl扩展,让file_get_contents函数可以获取到内容,但获取到的内容还是加密的,无法正常的解密。

我的解决思路是自己编写一个通过curl读取数据的方法,替换掉PHPCMS原有的方法,具体如下: Continue Reading

搭建rsync同步机制 解决测试和生产环境的文件同步问题

rsync是类unix系统下的数据镜像备份工具——remote sync。是一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。

通过搭建rsync服务端和客户端,可轻松解决开发中遇到的测试环境与生产环境的文件同步问题,且同步过程完全自动化,避免了人工上传文件容易出现的错传或漏传现象。

下面我们一起来看一下设置的过程。

生产环境主机(rsync服务端)设置

1.配置rsyncd.conf文件 Continue Reading

解决Nginx环境下PHP的flush失效问题

我在一次调试PHP逐行输出时候,发现ob_flush和flush两个都失效了,通过phpinfo基本能判断php.ini的设置是正常的。

再去看Nginx,发现Nginx中,有如下的设置:

fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;

问题基本找到了,Nginx会缓冲PHP输出的信息,当达到128k时才会将缓冲区的数据发送给客户端,那么我们首先需要将这个缓冲区调小,比如:

fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;

并且,必须禁用gzip

gzip off;

然后,在php中,在ob_flush和flush前,输出一段达到4k的内容,例如:

echo str_repeat(' ', 1024*4);

到此,PHP就可以正常通过ob_flush和flush逐行输出需要的内容了。

自动加载jQuery的Javascript代码示例

当我们在Javascript里需要用到jQuery但又无法判断是否加载过时,可以通过下面的方法来自动判断并加载jQuery,代码如下:

阳光部落原创,更多内容请访问http://www.sunbloger.com/