易截截图软件、单文件、免安装、纯绿色、仅160KB

在PHP中通过系统信号量加锁方式获取递增序列ID

 前一阵子,设计LAJP时需要在PHP中生成唯一ID,看似小菜一碟却着实让我为难了,在Java中一个同步方法即可搞定的事,但在PHP中却没有好的解决思路。
在网上搜了搜,有两个办法但都不太好:一个是简单的以进程ID+时间戳,或进程ID+随机数来产生近似的唯一ID,虽简单但对于追求“完美”的我不愿这样凑合,再说Apache2以后进程会维持相当长得时间,生成的ID发生碰撞的几率还是比较大的;第二个思路是通过Mysql的自增字段,这个就更不能考虑了,效率低不说,我的设计里压根就没数据库。
递增ID的获取是个过程:
   1. 从全局某个存储中读取ID
   2. 给ID加1
   3. 将ID重新存入全局存储
在多进程或线程的程序中需要将上述3步作为单步的原子操作,才能保证ID的唯一。
Java中很好解决,这是因为Java程序大多以多线程方式运行,每个线程都能共享Java进程中的变量,并能方便的加线程锁控制线程的运转同步。在PHP中ID全局存储没问题,可以放在session中,大不了放在文件中,但进程间同步就是问题了。
实际上进程调度、管理是操作系统内核必须实现的功能,今天介绍的信号量(也称为信号灯)就是在Unix/Linux上解决进程同步的一项技术。
信号灯原是用在铁路上的管理机制,我们今天看到的铁路大多是双线并行,但有的路段受山势、地形影响只有单条铁轨,必须保证同一时间只能有一列火车运行通过这些路段。早先铁路上就是用信号灯来管理的:没有火车经过时,信号等处于闲置状态,一旦有火车进入此路段,信号灯即变为在用状态,其他的火车经过时就需要等待,等待先前的火车驶出路段信号等变为闲置后,才能进入此路段,一旦又有火车进入,信号灯又变为繁忙......,以此来保障铁路运行的安全畅通。
Unix系统就像铁路管理局控制信号灯一样管理控制信号量的状态,因此也可以这样说信号量是由内核管理的,信号量不仅能控制进程间的同步,同样可以控制线程间的同步。
信号量属于系统进程间通讯技术(IPC),今天我们只从PHP角度介绍信号量的使用,有关IPC的技术细节可参考Stevens的权威著作《UNIX网络编程第二卷 进程间通信》。
先看最终的代码:
001    <?php
002
003    // ---------------------------------------------------
004    // 递增序列号ID(1~1000000000)
005    //
006    // ID存储在共享内存中(shared memo


相关文档:

lighttpd + mysql + php(fast cgi)安装与配置

准备:
lighttpd-1.4.15.tar.gz
php-4.4.2.tar.gz
mysql-5.0.20a.tar.gz
开始:
1 编译安装lighttpd
 # tar zxvf lighttpd-1.4.15.tar.gz
 # cd lighttpd-1.4.15
 #  ls
 # ./configure --prefix=/usr/local/lighttpd    //此部无法编译时提示安装prce-devel
 #&nbs ......

xp+iis5.1+php的配置方法

因为只有iis6.0才带有web扩展。而iis6.0是默认安装在win2003的。winxp是不能安装iis6.0的。那我们就用iis5.1吧。
环境:WINXP+IIS5.1
开始之前请先确定你的IIS安装是否成功,能否通过http://localhost

访问
一、先到PHP官方网下载个php-5.2.5-Win32.zip
,点击这里链接到官
网下载地址
二、下载好之后,直接全部 ......

20个非常有用的PHP类库

本文提供了20个非常有用的PHP类库的名称和下载地址。这20个PHP类库包含了图标库,RSS解析,缩略图生成,支付,OpenID,数据库抽 象,PDF生成器等一系列功能。
下面是一些非常有用的PHP类库,相信一定可以为你的WEB开发提供更好和更为快速的方法。
图表库
下面的类库可以让你很简的创建复杂的图表和图片。当然,它们需要G ......

纯java PHP引擎——Quercus

由于公司项目的需要,最经在研究Quercus一个纯java的php引擎。项目这两个需要做的就是将该引擎裁剪,做一个相对安全的版本,提供给ISV使用,同时,在引擎中提供默认的接口供调用。所以先研究了一下,在Quercus引擎的支持下,PHP如何与java集成。
以下是学习到的几点:
1、如果使用 Resin-IoC/WebBeans来组织应用的服 ......

php抓取alexa网页内容 提取站点统计信息

任务:根据输入的域名 统计以下三个数据,第一:全球排名;第二:用户量(月平均值);第三:
人均页面访问量(月平均值)。
思路:使用get_file_contents提取出网页内容,再根据正则表达式进行内容的筛选。
核心函数如下:
<?php
/*
 the function of getting aleax data
 @param string partten  ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号