rick

技术交流
 
 

留言簿(28)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2007年6月 (2)
  • 2007年4月 (1)
  • 2006年7月 (8)

友情连接

  • 紫雨轩 .Net (rss)
  • 紫雨轩 C++ (rss)
  • 紫雨轩论坛 (rss)

搜索

  •  

积分与排名

  • 积分 - 9827
  • 排名 - 52

最新评论

  • 1. 12
  • 评论内容较长,点击标题查看
  • --12
  • 2. re: 在windows下安装php5
  • 评论内容较长,点击标题查看
  • --bondy
  • 3. re: 在windows下安装php5
  • 评论内容较长,点击标题查看
  • --nike shoes
  • 4. re: BBSFTP v2.8 FTP 流量插件 for Discuz 5.5更新
  • 好东东
  • --车托
  • 5. re: BBSFTP v2.8 FTP 流量插件 for Discuz 5.5更新

  • www.feiping365.cn
    www.hengfeng020.com
  • --www.hengfeng020.com

阅读排行榜

  • 1. 在windows下安装php5 (1835)
  • 2. 验证码技术及其实现(1448)
  • 3. 使用socket代替fopen直接读取的PHP函数(1354)
  • 4. 简单地缓存任何PHP程序输出的思路(989)
  • 5. php5.1时区(868)

评论排行榜

  • 1. 在windows下安装php5 (2)
  • 2. php5.1时区(2)
  • 3. 简单地缓存任何PHP程序输出的思路(2)
  • 4. 验证码技术及其实现(2)
  • 5. BBSFTP v2.8 FTP 流量插件 for Discuz 5.5更新(2)

Powered by: 博客园
模板提供:沪江博客
PHP博客 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

2007年6月9日

BBSFTP v2.8 FTP流量插件 for phpwind 5.3[20070609更新]
FTP 流量插件,实现 FTP帐号和论坛帐号一一对应。可以通过论坛币购买下载流量或者下载使用时间。

插件可同时支持 Serv-U FTP Server 和 Gene6 FTP Server。

2007-6-9更想:
1. 。“FTP服务器(域)管理” 中增加部分提示信息指导用户操作。
    增加“用户组权限管理”功能,方便对不同的用户组设置不同的ftp权限。
之前要对不同用户组设置不同的ftp权限,需要使用不同的ftp用户名前缀+用户组限制 来建立多个虚拟FTP域才能实现。现在可以直接在一个 ftp域里面设置了。




2.修正一处可能导致刷流量的bug。


Serv-U bbsftp v2.8 更新:
1.开放 mysql 优化功能的支持。
2.增加Ado权限不足时在日志中记录错误信息。
3.进行少了优化。
4.修正 mcafee 误报的问题。

bbsftp论坛端插件更新:
2007-6-7:
1.针对 phpwind5.3 的风格修改的插件模板文件。
插件模板使用论坛的风格,和论坛风格完全融合。



 

2.修正ftp帐号不使用论坛密码时随机密码错误的问题。

3.增加集成紫雨轩FTP搜索引擎,集成的FTP搜索引擎在 ftp服务中心首页显示。



4.增加 FTP服务中心起始页可设置。如:可以将流量购买页面设置为FTP中心的首页。



5. 修正公共帐号密码购买的短信通知。

6.“数据库服务器管理” 中增加 测试数据库 的功能,方便安装时检测数据库问题。



bbsftp插件相关文件下载地址:
http://redcheek.net/bbsftp

posted @ 2007-06-09 12:56 紫雨轩 PHP 阅读(833) | 评论 (2) | 编辑 收藏
 

2007年6月8日

BBSFTP v2.8 FTP 流量插件 for Discuz 5.5更新
Discuz 5.5论坛插件更新:
1。增加 FTP服务中心起始页可设置。如:可以将流量购买页面设置为FTP中心的首页。
2。增加FTP服务中心的公告设置,公告可在ftp服务中心首页显示。
3。增加集成紫雨轩FTP搜索引擎,集成的FTP搜索引擎在 ftp服务中心首页显示。
点击在新窗口查看全图
ftpse.jpg (29.16 KB)
2007-6-4 02:05

注:以上三项在 “FTP中心参数设置” 中。
点击在新窗口查看全图
set.jpg (59.56 KB)
2007-6-4 02:05


4。“数据库服务器管理” 中增加 测试数据库 的功能,方便安装时检测数据库问题。
点击在新窗口查看全图
dbadmin.jpg (35.84 KB)
2007-6-4 02:05

5。“FTP服务器(域)管理” 中增加部分提示信息指导用户操作。
     增加“用户组权限管理”功能,方便对不同的用户组设置不同的ftp权限。
点击在新窗口查看全图
ftpadmin.jpg (49.96 KB)
2007-6-4 02:05

     “用户组权限管理” 中提供了 用户组 GID 的参考。方便用户在设置用户组限制时使用GID。
     点击在新窗口查看全图
gps.jpg (39.53 KB)
2007-6-4 02:05


之前要对不同用户组设置不同的ftp权限,需要使用不同的ftp用户名前缀+用户组限制 来建立多个虚拟FTP域才能实现。现在可以直接在一个 ftp域里面设置了。

6。修正 ftp上传文件管理、下载文件管理中单位显示错误,修正上传量奖励下载量时的单位错误。

7。修正 ftp购买购买的一个小数bug。

8。插件模板针对 discuz5.5的模板风格做了一些调整。

20070605 更新:
9. 修正一处可能导致刷流量的bug。

20070606 更新:
ServU插件 bbsftp v2.8 更新:
1.开放 mysql 优化功能的支持。
2.增加Ado权限不足时在日志中记录错误信息。
3.进行少了优化。
4.修正了mcafee下的误报问题。
升级方式:直接替换 bbsftp.dll 文件即可。


技术交流论坛:
http://www.redcheek.net/bbs

bbsftp相关插件文件下载地址:
http://www.redcheek.net/bbsftp
重新下载 Discuz 5.5 的论坛插件。其它版本论坛插件未更新。

升级安装:
只要重新上传文件覆盖。
备份FTP中心参数 设置信息,卸载插件,然后重新导入插件,
再重新配置 FTP中心参数 设置信息。
posted @ 2007-06-08 00:49 紫雨轩 PHP 阅读(855) | 评论 (2) | 编辑 收藏
 

2007年4月8日

bbsftp FTP流量插件 for Discuz 5.5
全新安装:

1.后台导入插件 discuz55_plugin_bbsftp.txt
2.将 bbsftp 目录 上传到论坛的 plugins 目录中。上传bbsftp.htm到
论坛的templates\default中。
3.如果你没有修改过 论坛 admin 目录中的 header.inc.php和menu.inc.php
直接上传这个两个文件覆盖。
如果有改动参考 headermenu修改说明.txt 手动修改。

5. 使用 db_update.txt 的脚本,在后台更新论坛数据库。
注:出于安全考虑, Discuz! 后台默认情况下禁止 SQL 语句直接执行, 只能使用常用 SQL 当中的内容,
如果您想自己随意书写 SQL 升级语句, 需要将 config.inc.php 当中的 $admincp['runquery'] 设置修改为 1。

6。进后台设置FTP中心的参数。
参考:http://www.redcheek.net/bbs/read.php?tid=4081

从DZ5升级安装:
只要重新上传文件覆盖即可。

下载:http://www.redcheek.net/bbsftp
posted @ 2007-04-08 21:44 紫雨轩 PHP 阅读(238) | 评论 (0) | 编辑 收藏
 

2006年7月31日

验证码技术及其实现
目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。
PHP实现:
  我们这里展示了如何编写PHP程序实现验证码功能:
  
        代码一: 
  
          <?php
          /*
          *  Filename:  authpage.php
          *  Author:  hutuworm
          *  Date:  2003-04-28
          *  @Copyleft  hutuworm.org
          */
  
          srand((double)microtime()*1000000);
  
          //验证用户输入是否和验证码一致
            if(isset($HTTP_POST_VARS['authinput'])) 
            {
                if(strcmp($HTTP_POST_VARS['authnum'],$HTTP_POST_VARS['authinput'])==0)
  
                    echo "验证成功!";
                else
                    echo "验证失败!";
            }
          
          //生成新的四位整数验证码
            while(($authnum=rand()%10000)<1000); 
          ?>
            <form action=authpage.php method=post>
            <table>
                请输入验证码:<input type=text name=authinput style="width:
        80px"><br>
                <input type=submit name="验证" value="提交验证码">
                <input type=hidden name=authnum value=<? echo $authnum; ?>>
                <img src=authimg.php?authnum=<? echo $authnum; ?>>
            </table>
            </form>
  
        代码二:
  
        <?php
          /*
          *  Filename:  authimg.php
          *  Author:  hutuworm
          *  Date:  2003-04-28
          *  @Copyleft  hutuworm.org
          */
  
          //生成验证码图片
            Header("Content-type: image/PNG"); 
            srand((double)microtime()*1000000);
            $im = imagecreate(58,28);
            $black = ImageColorAllocate($im, 0,0,0);
            $white = ImageColorAllocate($im, 255,255,255);
            $gray = ImageColorAllocate($im, 200,200,200);
            imagefill($im,68,30,$gray);
  
          //将四位整数验证码绘入图片
            imagestring($im, 5, 10, 8, $HTTP_GET_VARS['authnum'], $black);
  
            for($i=0;$i<50;$i++)  //加入干扰象素
            {
                imagesetpixel($im, rand()%70 , rand()%30 , $black);
            }
  
            ImagePNG($im);
            ImageDestroy($im);
        ?>
  
  
  
        本文程序在Apache 2.0.45 + PHP 4.3.1环境下运行通过。
  
        上文只是对验证码功能的一个简单实现,并没有考虑商用安全性问题。如果要增强安全性,将此功能投入商业应用,则可以通过以下几个步骤实现:
  
        1. 启用Session。
        2. authnum在authimg.php中生成,并计算md5sum,存入session。
        3.
  authpage.php将authinput计算md5sum后,与session中的authnum(md5sum)对比得出验证结果。
  
  
        本站注:作者使用了简单的代码实现了很酷的功能。不过在添加干扰像素时的效果不是太好,大家可以看一下雨声论坛登录时的效验码(http://ror.cn/perl/ut/user_login.cgi),偶把第二段代码稍改了一下,生成了与其类似的效果。
  
        修改后的代码如下:
  
        <?php
        /*
        *  Filename: authimg.php
        *  Author:  hutuworm
        *  Date:   2003-04-28
        *  @Copyleft hutuworm.org
        */
        //生成验证码图片
        Header("Content-type: image/PNG"); 
        srand((double)microtime()*1000000);
        $im = imagecreate(62,20);
        $black = ImageColorAllocate($im, 0,0,0);
        $white = ImageColorAllocate($im, 255,255,255);
        $gray = ImageColorAllocate($im, 200,200,200);
        imagefill($im,68,30,$gray);
        while(($authnum=rand()%100000)<10000);
        //将四位整数验证码绘入图片
        imagestring($im, 5, 10, 3, $authnum, $black);
        for($i=0;$i<200;$i++)  //加入干扰象素
        {
          $randcolor =
        ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
          imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
        }
        ImagePNG($im);
        ImageDestroy($im);
        ?>
        显示结果如下图:
  [在新窗口中浏览该图片]

  有兴趣的朋友可以自己试一下。

看一下上面这段代码:
  第一次看PHP代码,呵呵。奇怪的学习经历。
  
  
  代码一: 
    
            <?php
            /*
            *  Filename:  authpage.php
            *  Author:  hutuworm
            *  Date:  2003-04-28
            *  @Copyleft  hutuworm.org
            */
  
  //以系统时间为种子得到随机数
  //srand -- 播下随机数发生器种子
  //microtime -- 返回当前 UNIX 时间戳和微秒数
  
            srand((double)microtime()*1000000);
    
            //验证用户输入是否和验证码一致
              if(isset($HTTP_POST_VARS['authinput'])) 
              {
  //authnum的值是不应该发送到客户端的,这里应该是为了构建一个简单的例子先吧
  //authnum 保存在 session 里应该是个可行的办法
  
                  if(strcmp($HTTP_POST_VARS['authnum'],$HTTP_POST_VARS['authinput'])==0)
    
                      echo "验证成功!";
                  else
                      echo "验证失败!";
              }
            
            //生成新的四位整数验证码
              while(($authnum=rand()%10000)<1000); 
            ?>
              <form action=authpage.php method=post>
              <table>
                  请输入验证码:<input type=text name=authinput style="width:
          80px"><br>
                  <input type=submit name="验证" value="提交验证码">
                  <input type=hidden name=authnum value=<? echo $authnum; ?>>
                  <img src=authimg.php?authnum=<? echo $authnum; ?>>
              </table>
              </form>
    
          代码二:
  
    
          <?php
            /*
            *  Filename:  authimg.php
            *  Author:  hutuworm
            *  Date:  2003-04-28
            *  @Copyleft  hutuworm.org
            */
  
  //下面几行代码肯定会让写ASP的GGDD们羡慕不已。
    
            //生成验证码图片
  
  //指定头信息
    
              Header("Content-type: image/PNG"); 
              srand((double)microtime()*1000000);
  
  //返回一个图像标识符,代表了一幅大小为58 X 28的空白图像。
                $im = imagecreate(58,28);
              $black = ImageColorAllocate($im, 0,0,0);
              $white = ImageColorAllocate($im, 255,255,255);
              $gray = ImageColorAllocate($im, 200,200,200);
              imagefill($im,68,30,$gray);
  
  
  //强悍!!
  
   
            //将四位整数验证码绘入图片
  
  //方便起见,使可以通过authimg.php?authnum=XXXX的方式得到图片。实际应用中这种做法肯定是不足取的。
            
     imagestring($im, 5, 10, 8, $HTTP_GET_VARS['authnum'], $black);
    
              for($i=0;$i<50;$i++)  //加入干扰象素
              {
                  imagesetpixel($im, rand()%70 , rand()%30 , $black);
              }
    
              ImagePNG($im);
  //imagepng -- 以 PNG 格式将图像输出到浏览器或文件
              ImageDestroy($im);
          ?>
    
    
    
          本文程序在Apache 2.0.45 + PHP 4.3.1环境下运行通过。
    
          上文只是对验证码功能的一个简单实现,并没有考虑商用安全性问题。如果要增强安全性,将此功能投入商业应用,则可以通过以下几个步骤实现:
    
          1. 启用Session。
          2. authnum在authimg.php中生成,并计算md5sum,存入session。
          3. authpage.php将authinput计算md5sum后,与session中的authnum(md5sum)对比得出验证结果。
    
    
          本站注:作者使用了简单的代码实现了很酷的功能。不过在添加干扰像素时的效果不是太好,大家可以看一下雨声论坛登录时的效验码(http://ror.cn/perl/ut/user_login.cgi),偶把第二段代码稍改了一下,生成了与其类似的效果。
    
          修改后的代码如下:
    
          <?php
          /*
          *  Filename: authimg.php
          *  Author:  hutuworm
          *  Date:   2003-04-28
          *  @Copyleft hutuworm.org
          */
          //生成验证码图片
          Header("Content-type: image/PNG"); 
          srand((double)microtime()*1000000);
          $im = imagecreate(62,20);
          $black = ImageColorAllocate($im, 0,0,0);
          $white = ImageColorAllocate($im, 255,255,255);
          $gray = ImageColorAllocate($im, 200,200,200);
          imagefill($im,68,30,$gray);
          while(($authnum=rand()%100000)<10000);
          //将四位整数验证码绘入图片
          imagestring($im, 5, 10, 3, $authnum, $black);
          for($i=0;$i<200;$i++)  //加入干扰象素
          {
            $randcolor =
          ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
            imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
          }
          ImagePNG($im);
          ImageDestroy($im);
          ?>
验证码技术核心内容是动态生成图片。ASP做到这一点,最简单也是最普遍的就是用到XBM。我们先了解一下XBM的相关知识。
  
  
  [转]用XBM创建动态客户端图像
  
  作者: BUILDER.COM
  Wednesday, April 9 2003 11:23 AM
  X-Bitmap(XBM)是一种古老但通用的图像文件格式,它与现在的许多Web浏览器都兼容。X-Windows图形界面(UNIX和Linux常用的GUI)的C代码库xlib中有一个组件专门描述了它的规范。我将解释XBM格式的工作原理,然后向你展示一种更有趣的使用它的方法:在客户端创建动态图像。文章中的代码可以在此下载。
  
  XBM基础
  
  XBM格式本来是为存储单色的系统位图而设计的,比如图标和鼠标指针。XBM图形的实质上是使用16进制数组来表示二进制图像的C源代码文件。(16进制数组表示的二进制图像)
  
  这里你也许会问:这种文件格式与Web浏览器有什么关系?在上世纪九十年代早期,美国超级计算应用中心(NCSA)在伊利诺斯大学开发第一个被广泛使用的Web浏览器,名为Mosaic。这个浏览器的图形支持来自很多开放源码代码库,其中就包括xlib。因此,导致今天的许多浏览器能够处理XBM图形。
  
  Mosaic项目后来成为了Netscape浏览器的开发基础。微软也借用了一部分Mosaic代码来创建Internet Explorer。微软继而在网络信息服务器(IIS)中将XBM作为一个MIME类型注册而提供本地支持,并且在现有所有版本的Internet Explorer中将其作为一种可支持的图像。(浏览器的广泛支持)
  
  从一个程序员的角度来看,JPEG或GIF与XBM有着极大的不同。这两种文件格式都在位级别上操作并使用了压缩算法。它们可以支持很大的颜色深度范围。创建这些动态Web图形的唯一方法是使用服务器端的脚本,比如<a href=http://stein.cshl.org/WWW/software/GD/GD.pm和CGI/Perl脚本的结合,或者通过System.Drawing名字空间访问ASP.NET中的图形设计接口类库(GDI+)。(升级到ASP.NET有很多个理由。)
  
  XBM创建起来很有程序性。每个位都被一一指定,而结果图形被限制为两色(黑色和白色)。(局限性之一:让人不爽)X-Bitmap并不是必须服务器端脚本,可以在客户端用JavaScript实时创建它们。(增加了不少灵活性)
  
  X-Bitmap的实用程序包括动态生成的图、页面计数器、老式图形图标、以及统计图表。(就是通过位控制太麻烦了,有良好的包装就好了。另外:生成图片的大小,算法的强度,是否都达到了可用的要求?)给我印象最深的XMB应用是一个叫Wolfenstein 5k的游戏,它是一个纹理映射的第一视角射击游戏,用JavaScript编写,只有5KB大小。(不错啊,稍后爽一下)
通过使用IMG标识可以很容易地将XBM文件嵌入到一个Web页面中。其语法如下:
  
  <img src=”xbmsmill.xbm”>
  
  ----------------------------------------------------------------------
  注意
  
  这种格式不对Mac或相应的浏览器有效,比如Mozilla的早期版本。
  
  
  ----------------------------------------------------------------------
  典型的XBM源代码与列表A中显示的比较相像。
  
  #define语句以像素点为单位设置了图像的宽度和高度。你也可以使用x_hot和y_hot命令来定义图像中的一个热点。我已经创建了一个X-Bitmap来描绘这个过程。为了设计它,我先将图像映射为二进制值,如果你仔细的看,在这里你会看到一张笑脸。
  
  我所创建的二进制图像宽16个数字高7个数字,在我们的源代码的XBM头中定义了相同大小的宽/高像素值。图像本身被存储在一个静态数组中,它包含一列二进制编码的十六进制(BCH)值——换句话说,每四位分成一组。
  
  计算出笑脸的十六进制值得最简单的方法是一次检验图像的一行,将二进制值分成四位一组的分段,将每个分段映射成二进制/十六进制表中对应的十六进制数。下面是第一行:
  
  0001100001100000
  
  下面两行分别表示四位的分段和其在表A中对应的十六进制数
  
  二进制: 0001  1000  0110  0000
  
  十六进制:  8   1   6   0
  
  表A
  
  XBM二/十六进制转换表
  
  二进制 十六进制
  
  0000 0
  
  1000 1
  
  0100 2
  
  1100 3
  
  0010 4
  
  1010 5
  
  0110 6
  
  1110 7
  
  0001 8
  
  1001 9
  
  0101 A
  
  1101 B
  
  0011 C
  
  1011 D
  
  0111 E
  
  1111 F
  
  
  请注意这些并不是标准的二/十六进制转换。它们是反向计算的(从左到右)而不是从右到左。把它颠倒是因为浏览器会从左到右来读图形,我们的代码必须与其一致。
  
  最后要把这些十六进制值转换成XBM的右格式。必须在每个十六进制值前加“0x”。这是标准C++表示十六进制的方法。然后将这些值从右到左输出(每个十六进制对表示八位二进制位)。请看列表B中的例子。
  
  因此,我们可以说:
  
  0001100001100000=0x18,0x06
  
  这些符合XBM的值可以很容易地插入到图像数组中:
  
  static unsigned char xbmsmile_bits[]=
  
  现在我们来看看格式本身,现在是时候来学习在客户端浏览器中动态创建X-Bitmap了。
图片用点阵的形式表示,比如2:
  
  00111100 0011为3 1100为C 即0x3c
  01100110 0110为6 0110为6 0x66
  01100000 ....... 0x表示十六进制数。
  01100000 依此类推
  00110000 这是用二进制数得到的点阵,其中的1为显示一黑点,0不显示
  00011000 是一个反着看的2
  00001100 其余数字可自已排列点阵再二进制化为十六进制数
  00000110 缺点是只有黑白两种颜色
  00000110 显示出来是白底黑字,要显示黑底白字的话,对其取反就行了
  01111110
  
  下面是我"画"的0-9的数字
  
  num.asp
  
  <%
  Dim a(10,10)
  
  a(0,1) = "0x3c" '数字0
  a(0,2) = "0x66"
  a(0,3) = "0xc3"
  a(0,4) = "0xc3"
  a(0,5) = "0xc3"
  a(0,6) = "0xc3"
  a(0,7) = "0xc3"
  a(0,8) = "0xc3"
  a(0,9) = "0x66"
  a(0,10)= "0x3c"
  
  a(1,1) = "0x18" '数字1
  a(1,2) = "0x1c"
  a(1,3) = "0x18"
  a(1,4) = "0x18"
  a(1,5) = "0x18"
  a(1,6) = "0x18"
  a(1,7) = "0x18"
  a(1,8) = "0x18"
  a(1,9) = "0x18"
  a(0,10)= "0x7e"
  
  
  a(2,1) = "0x3c" '数字2
  a(2,2) = "0x66"
  a(2,3) = "0x60"
  a(2,4) = "0x60"
  a(2,5) = "0x30"
  a(2,6) = "0x18"
  a(2,7) = "0x0c"
  a(2,8) = "0x06"
  a(2,9) = "0x06"
  a(2,10)= "0x7e"
  
  a(3,1) = "0x3c" '数字3
  a(3,2) = "0x66"
  a(3,3) = "0xc0"
  a(3,4) = "0x60"
  a(3,5) = "0x1c"
  a(3,6) = "0x60"
  a(3,7) = "0xc0"
  a(3,8) = "0xc0"
  a(3,9) = "0x66"
  a(3,10)= "0x38"
  
  a(4,1) = "0x38" '数字4
  a(4,2) = "0x3c"
  a(4,3) = "0x36"
  a(4,4) = "0x33"
  a(4,5) = "0x33"
  a(4,6) = "0x33"
  a(4,7) = "0xff"
  a(4,8) = "0x30"
  a(4,9) = "0x30"
  a(4,10)= "0xfe"
  
  a(5,1) = "0xfe" '数字5
  a(5,2) = "0xfe"
  a(5,3) = "0x06"
  a(5,4) = "0x06"
  a(5,5) = "0x3e"
  a(5,6) = "0x60"
  a(5,7) = "0xc0"
  a(5,8) = "0xc3"
  a(5,9) = "0x66"
  a(5,10)= "0x3c"
  
  a(6,1) = "0x60" '数字6
  a(6,2) = "0x30"
  a(6,3) = "0x18"
  a(6,4) = "0x0c"
  a(6,5) = "0x3e"
  a(6,6) = "0x63"
  a(6,7) = "0xc3"
  a(6,8) = "0xc3"
  a(6,9) = "0x66"
  a(6,10) ="0x3c"
  
  a(7,1) = "0xff" '数字7
  a(7,2) = "0xc0"
  a(7,3) = "0x60"
  a(7,4) = "0x30"
  a(7,5) = "0x18"
  a(7,6) = "0x18"
  a(7,7) = "0x18"
  a(7,8) = "0x18"
  a(7,9) = "0x18"
  a(7,10)= "0x18"
  
  a(8,1) = "0x3c" '数字8
  a(8,2) = "0x66"
  a(8,3) = "0xc3"
  a(8,4) = "0x66"
  a(8,5) = "0x3c"
  a(8,6) = "0x66"
  a(8,7) = "0xc3"
  a(8,8) = "0xc3"
  a(8,9) = "0x66"
  a(8,10)= "0x3c"
  
  a(9,1) = "0x3c" '数字9
  a(9,2) = "0x66"
  a(9,3) = "0xc3"
  a(9,4) = "0xc3"
  a(9,5) = "0x66"
  a(9,6) = "0x3c"
  a(9,7) = "0x18"
  a(9,8) = "0x0c"
  a(9,9) = "0x06"
  a(9,10)= "0x03"
  
  %>
  
  显示的方法是:
  
  1.先传出一个MIME:
  Response.ContentType = "image/x-xbitmap"
  2.再传出一个c++的源程序,如显示2:
  #define counter_width 8
  #define counter_height 10
  static unsigned char counter_bits[] = {
  0x3c,0x66,0x60,0x60,0x30,0x18,0x0c,0x06,0x06,0x7e
  };
  这样在浏览器上就显示出来一个8*10像素的2了
  
  要显示两个或以上的数字的时候,须改动宽度的值(必须是图像点阵宽度的整数倍),在count_bits[]数组的值排序如下:
  比如显示 12
  a(1,1), a(2,1), a(1,2), a(2,2)... a(1,10), a(2,10)
  下面是具体计数器的例子:
  
  count.asp
  
  <!--#include file="num.asp"-->
  <%
  Dim Image
  Dim Width, Height
  Dim num
  Dim digtal
  Dim Length
  Dim sort
  Length = 10 '自定计数器长度
  
  Redim sort( Length )
  
  
  num = 62275 '计数器的值
  digital = ""
  For I = 1 To Length -Len( num ) '补0
  digital = digital & "0"
  Next
  For I = 1 To Len( num )
  digital = digital & Mid( num, I, 1 )
  Next
  For I = 1 To Len( digital )
  sort(I) = Mid( digital, I, 1 )
  Next
  Width = 8 * Len( digital ) '图像的宽度
  Height = 10 '图像的高度,在本例中为固定值
  
  
  Response.ContentType="image/x-xbitmap"
  
  hc=chr(13) & chr(10)
  
  Image = "#define counter_width " & Width & hc
  Image = Image & "#define counter_height " & Height & hc
  Image = Image & "static unsigned char counter_bits[]={" & hc
  
  For I = 1 To Height
  For J = 1 To Length
  Image = Image & a(sort(J),I) & ","
  Next
  Next
  
  Image = Left( Image, Len( Image ) - 1 ) '去掉最后一个逗号
  Image = Image & "};" & hc
  
  Response.Write Image
  
  %>
把
  #define counter_width 8
  #define counter_height 10
  static unsigned char counter_bits[] = {
    0x3c,0x66,0x60,0x60,0x30,0x18,0x0c,0x06,0x06,0x7e
    };
  保存为 xbm 文件就可以得到一张显示为 2 的图片
  
  
  #define counter_width 80
  #define counter_height 10
  static unsigned char counter_bits[]={
  0x3c,0x3c,0x3c,0x3c,0x3c,0x60,0x3c,0x3c,0xff,0xfe,0x66,0x66,0x66,0x66,0x66,0x30,0x66,0x66,0xc0,0xfe,0xc3,0xc3,0xc3,0xc3,0xc3,0x18,0x60,0x60,0x60,0x06,0xc3,0xc3,0xc3,0xc3,0xc3,0x0c,0x60,0x60,0x30,0x06,0xc3,0xc3,0xc3,0xc3,0xc3,0x3e,0x30,0x30,0x18,0x3e,0xc3,0xc3,0xc3,0xc3,0xc3,0x63,0x18,0x18,0x18,0x60,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x0c,0x0c,0x18,0xc0,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x06,0x06,0x18,0xc3,0x66,0x66,0x66,0x66,0x66,0x66,0x06,0x06,0x18,0x66,0x7e,0x7e,0x7e,0x7e,0x7e,0x3c,0x7e,0x7e,0x18,0x3c};
  保存为 xbm文件则显示为 0000062275 。
posted @ 2006-07-31 00:55 紫雨轩 PHP 阅读(1448) | 评论 (2) | 编辑 收藏
 
简单地缓存任何PHP程序输出的思路
if  ( time ()  -   filemtime ( ' index.cache ' )  >   2   *   60 )     // 如果缓存文件为两分钟前更新,则重新生成缓存 
  @ ob_start ( ' output ' );         // 使用output函数捕捉正常输出并缓存 
else                // 否则直接输出缓存页面 
{ 
  @
ob_start ( ' ob_gzhandler ' ); 
  
readfile ( ' index.cache ' ); 
  
exit ; 
} 


function  output( $buffer ) 
{ 
  
$scriptname   =   $_SERVER [ ' SCRIPT_FILENAME ' ]; 
  
if  ( $scriptname   ==   '' )  $scriptname   =   $_SERVER [ ' PATH_TRANSLATED ' ]; 
  @
chdir ( dirname ( $scriptname )); 

  
if  ( $fp   =  @ fopen ( ' index.cache ' ,   ' w ' )) 
  { 
    @
flock ( $fp ,  LOCK_EX); 
    @
fwrite ( $fp ,   $buffer ); 
    @
fclose ( $fp ); 
  } 

  
if  ( function_exists ( ' gzencode ' )  &&   ereg ( ' gzip ' ,   $_SERVER [ ' HTTP_ACCEPT_ENCODING ' ])) 
  { 
    
header ( " Content-Encoding: gzip " ); 
    
return  @ gzencode ( $buffer ,   9 ,  FORCE_GZIP); 
  } 
  
else  
    
return   $buffer ; 
} 
posted @ 2006-07-31 00:45 紫雨轩 PHP 阅读(989) | 评论 (2) | 编辑 收藏
 
使用socket代替fopen直接读取的PHP函数
可以伪装成本站来源和XP SP2的客户端,从而躲过一些站点的检查
function get($url) 
{ 
$url = eregi_replace('^http://', '', $url); 
$temp = explode('/', $url); 
$host = array_shift($temp); 
$path = '/'.implode('/', $temp); 
$temp = explode(':', $host); 
$host = $temp[0]; 
$port = isset($temp[1]) ? $temp[1] : 80; 

$fp = @fsockopen($host, $port, &$errno, &$errstr, 30); 
if ($fp) 
{ 
@
fputs($fp, "GET $path HTTP/1.1\r\n"); 
@
fputs($fp, "Host: $host\r\n"); 
@
fputs($fp, "Accept: */*\r\n"); 
@
fputs($fp, "Referer: http://$host/\r\n"); 
@
fputs($fp, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n"); 
@
fputs($fp, "Connection: Close\r\n\r\n"); 
} 

$Content = ''; 
while ($str = @fread($fp, 4096)) 
$Content .= $str; 
@
fclose($fp); 

return $Content; 
} 
posted @ 2006-07-31 00:44 紫雨轩 PHP 阅读(1354) | 评论 (1) | 编辑 收藏
 
php5.1时区
php.ini设置文件里有这么一项:

;date.timezone =

把上面的式子更改成

date.timezone ="Hongkong"
就可以了.
当然有更方便控制的方法,如:

if(function_exists('date_default_timezone_set')) {
date_default_timezone_set('Hongkong');//该函数为PHP5.1内置,这里设置为香港时间。
}
?>
posted @ 2006-07-31 00:41 紫雨轩 PHP 阅读(868) | 评论 (2) | 编辑 收藏
 

2006年7月20日

BBSFTP 2.1 FTP流量插件 for 魔力论坛 Molyx 2.5
FTP的购买方式 分为 
1。包流量购买方式,(就是以前的主力ftp流量购买和联盟ftp流量购买)。
2。公共账号密码购买方式。(以前的主力FTP公共账号密码购买)。
3。包时间购买方式,(该方式和包流量购买方式的设置、购买基本一样)。
1,3 的ftp可以设置 用户组限制,发贴数限制,威望限制,现金限制。
1,3 的ftp用户 其下载速度和下载线程数,和论坛用户等级关联。
关联规则可以在插件后台进行设置。

论坛端插件有安装程序和安装说明文档,参考安装即可。

ServU端插件的安装:
bbsftp 2.0 提供了servu端插件的安装程序,直接执行安装即可。


下载地址:http://www.redcheek.net/bbsftp/
posted @ 2006-07-20 20:38 紫雨轩 PHP 阅读(280) | 评论 (0) | 编辑 收藏
 
BBSFTP 2.1 FTP流量插件 for vBulletin 3.5.x & 3.6
FTP的购买方式 分为 
1。包流量购买方式,(就是以前的主力ftp流量购买和联盟ftp流量购买)。
2。公共账号密码购买方式。(以前的主力FTP公共账号密码购买)。
3。包时间购买方式,(该方式和包流量购买方式的设置、购买基本一样)。
1,3 的ftp可以设置 用户组限制,发贴数限制,威望限制,现金限制。
1,3 的ftp用户 其下载速度和下载线程数,和论坛用户等级关联。
关联规则可以在插件后台进行设置。

论坛端插件有图文并茂的安装说明文档,参考安装即可。

ServU端插件的安装:
bbsftp 2.1 提供了servu端插件的安装程序,直接执行安装即可。

下载地址:http://www.redcheek.net/bbsftp
 
posted @ 2006-07-20 20:37 紫雨轩 PHP 阅读(347) | 评论 (0) | 编辑 收藏
 
FTP Web浏览※搜索引擎 V1.1 php 版
2006.5.28 V1.1
1.管理程序服务程序更新。优化了索引更新程序。
2.修正了个人版管理程序的bug。
3.修正了FTP容量统计不正确的bug。
4.PHP版web程序更新。修正中文文件名的连接用下载工具下载时乱码的bug。
5.修正了Web界面文件大小,FTP容量大小显示bug。

http://www.redcheek.net/bbsftp

于Web的 Ftp 文件搜索 和 ftp 内容浏览,支持多个FTP
posted @ 2006-07-20 20:35 紫雨轩 PHP 阅读(362) | 评论 (0) | 编辑 收藏
 
仅列出标题  下一页