利用PHP和FLASH生成验证码程序

php要求安装Ming库,现在的php版本都自带Ming扩展模块,只要在php.ini里面将extension=php_ming.dll前面的注释去掉就可以用了。如果你没有php_ming.dll或文件,可以去www.php.net下载一个最新的php安装包,里面包含有的。简单来说Ming就是一个php扩展库,提供给phper用php代码生成flash文件的一个东东,具体的使用方法大家上网搜搜。下面是我写的一个简单的Ming库使用例子,在注册和登录程序里面经常用到的验证码程序。

PHP文件
code.php

<?php 

session_start();

unset($_SESSION[code]); 

$code=substr(md5(rand()),10,4); 

$_SESSION[code]=$code

$font = new SWFFont'_sans' );          //设置文字显示的字体,这个在支持自定义字体方面还比较麻烦,现在使用系统字体吧。

$tf = new SWFTextField();                         //设置文本域

$tf->setFont$font );                                   //指定文本使用的字体

$tf->setColorrand(90,255),rand(90,255),rand(90,255) );         //文本的颜色

$tf->setHeight80 );                              //文本高度

$tf->addString$code);                        //添加文本内容

$m = new SWFMovie();                        //创建一个flash文件

$m->setbackground60,60,60 );         //设置背景颜色

$m->setDimension25080 );               //设置flash的大小

$f_tf $m->add$tf );                             //将文本域添加到影片中

$f_tf->moveTo( -1000);                   //将文本对象移到影片左边,-1000应该让大家看不到的了。

for( $i 0$i 31$i++ ) {               

$m->nextframe();                                       //影片播放下一帧 

if ($i>25)

$f_tf->moveTo( ($i-10)*($i-10), );         //将文本对象加速向右移动,飞出右边框

else if($i>5)

$f_tf->moveTo( ($i-5)*4);                        //慢点移动,好让大家看清文本内容

else

$f_tf->moveTo( -($i-15)*($i-15), );         //迅速从左边飞到中间

header('Content-type: application/x-shockwave-flash');    //设置输出格式

$m->output();                                                                          //将影片输出

?>

将这个文本保存后,执行运行就可以看到flash效果了。
为了偷懒可以利用flash发布时候生成的AC_RunActiveContent.js文件,我们随便改改就可以写出一个验证码显示和刷新的脚本了
将AC_RunActiveContent.js中的document.write改成返回字符串,
就是将AC_Generateobj函数里面的document.write(str)改为return str;
再将AC_FL_RunContent函数改为返回的。
同时将AC_getArgs函数里面的
这行代码 //args[i+1] = AC_AddExtension(args[i+1], ext);注释掉。
改完后,我们就可以这样用了


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh_cn" lang="zh_cn">

<head>

<meta http-equiv="Content-Type" />

<title>code</title>

<script src="AC_RunActiveContent.js" language="javascript"></script>


</head>

<body bgcolor="#ffffff">

<!--影片中使用的 URL-->

<!--影片中使用的文本-->

<!-- saved from url=(0013)about:internet -->

<script src="AC_RunActiveContent.js" language="javascript"></script>

<script language="javascript" >

function strSwf()

{

    i = Math.random();

    return AC_FL_RunContent(

          'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0',

          'width', '120',

          'height', '30',

          'src', 'code.php?'+i,

          'quality', 'high',

          'pluginspage', 'http://www.macromedia.com/go/getflashplayer',

          'align', 'middle',

          'play', 'true',

          'loop', 'true',

          'scale', 'showall',

          'wmode', 'window',

          'devicefont', 'false',

          'id', 'numcheck',

          'name', 'numcheck',

          'menu', 'true',

          'allowFullScreen', 'false',

          'allowScriptAccess','sameDomain',

          'movie', 'code.php?'+i,

          'salign', ''

          ); //end AC code

    }

</script>

<table width=500 height=30 border=1 align=center>

<tr>

<td align='right' height=30>请输入验证码<input type='text' name='checkcode' value='' size=6></td>

<td align='left'>    <span  id='showflash'><script>document.write(strSwf())</script></span>  <input type='button' name='reflash' value='刷新验证码'  onclick='showflash.innerHTML=strSwf();'> </td>

</tr>

</table>

</body>

</html>

[ 本帖最后由 sentrychen 于 2007-9-30 03:35 编辑 ]

sentrychen (2007-9-30 03:32:37)
修改后的AC_RunActiveContent.js文件

//v1.7

// Flash Player Version Detection

// Detect Client Browser type

// Copyright 2005-2007 Adobe Systems Incorporated.    All rights reserved.

var isIE    = (navigator.appVersion.indexOf("MSIE") != -1) ? true false;

var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true false;

var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true false;

function ControlVersion()

{

var version;

var axo;

var e;

// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

try {

    // version will be set for 7.X or greater players

    axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");

    version axo.GetVariable("$version");

} catch (e) {

}

if (!version)

{

    try {

         // version will be set for 6.X players only

         axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");

         

         // installed player is some revision of 6.0

         // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,

         // so we have to be careful. 

         

         // default to the first public version

         version "WIN 6,0,21,0";

         // throws if AllowScripAccess does not exist (introduced in 6.0r47)    

         axo.AllowScriptAccess "always";

         // safe to call for 6.0r47 or greater

         version axo.GetVariable("$version");

    } catch (e) {

    }

}

if (!version)

{

    try {

         // version will be set for 4.X or 5.X player

         axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");

         version axo.GetVariable("$version");

    } catch (e) {

    }

}

if (!version)

{

    try {

         // version will be set for 3.X player

         axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");

         version "WIN 3,0,18,0";

    } catch (e) {

    }

}

if (!version)

{

    try {

         // version will be set for 2.X player

         axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");

         version "WIN 2,0,0,11";

    } catch (e) {

         version = -1;

    }

}

return version;

}

// JavaScript helper required to detect Flash Player PlugIn version information

function GetSwfVer(){

// NS/Opera version >= 3 check for Flash plugin in plugin array

var flashVer = -1;

if (navigator.plugins != null && navigator.plugins.length 0) {

    if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {

         var swVer2 navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" "";

         var flashDescription navigator.plugins["Shockwave Flash" swVer2].description;

         var descArray flashDescription.split(" ");

         var tempArrayMajor descArray[2].split(".");         

         var versionMajor tempArrayMajor[0];

         var versionMinor tempArrayMajor[1];

         var versionRevision descArray[3];

         if (versionRevision == "") {

          versionRevision descArray[4];

         }

         if (versionRevision[0] == "d") {

          versionRevision versionRevision.substring(1);

         } else if (versionRevision[0] == "r") {

          versionRevision versionRevision.substring(1);

          if (versionRevision.indexOf("d") > 0) {

         versionRevision versionRevision.substring(0versionRevision.indexOf("d"));

          }

         }

         var flashVer versionMajor "." versionMinor "." versionRevision;

    }

}

// MSN/WebTV 2.6 supports Flash 4

else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1flashVer 4;

// WebTV 2.5 supports Flash 3

else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1flashVer 3;

// older WebTV supports Flash 2

else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1flashVer 2;

else if ( isIE && isWin && !isOpera ) {

    flashVer ControlVersion();

return flashVer;

}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available

function DetectFlashVer(reqMajorVerreqMinorVerreqRevision)

{

versionStr GetSwfVer();

if (versionStr == -) {

    return false;

} else if (versionStr != 0) {

    if(isIE && isWin && !isOpera) {

         // Given "WIN 2,0,0,11"

         tempArray                   versionStr.split(" ");    // ["WIN", "2,0,0,11"]

         tempString              tempArray[1];         // "2,0,0,11"

         versionArray              tempString.split(","); // ['2', '0', '0', '11']

    } else {

         versionArray              versionStr.split(".");

    }

    var versionMajor              versionArray[0];

    var versionMinor              versionArray[1];

    var versionRevision         versionArray[2];

                   // is the major.revision >= requested major.revision AND the minor version >= requested minor

    if (versionMajor parseFloat(reqMajorVer)) {

         return true;

    } else if (versionMajor == parseFloat(reqMajorVer)) {

         if (versionMinor parseFloat(reqMinorVer))

          return true;

         else if (versionMinor == parseFloat(reqMinorVer)) {

          if (versionRevision >= parseFloat(reqRevision))

         return true;

         }

    }

    return false;

}

}

function AC_AddExtension(srcext)

{

    if (src.indexOf('?') != -1)

          return src.replace(/\?/, ext+'?'); 

    else

          return src ext;

}

function AC_Generateobj(objAttrsparamsembedAttrs

    var str '';

    if (isIE && isWin && !isOpera)

    {

          str += '<object ';

          for (var i in objAttrs)

          {

              str += '="' objAttrs '" ';

          }

          str += '>';

          for (var i in params)

          {

              str += '<param name="' '" value="' params '" /> ';

          }

          str += '</object>';

    }

    else

    {

          str += '<embed ';

          for (var i in embedAttrs)

          {

              str += '="' embedAttrs '" ';

          }

          str += '> </embed>';

    }

    //document.write(str);

    return str;

}

function AC_FL_RunContent(){

    var ret 

          AC_GetArgs

          (    arguments".swf""movie""clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"

         "application/x-shockwave-flash"

          );

//AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);

    return AC_Generateobj(ret.objAttrsret.paramsret.embedAttrs);

}

function AC_SW_RunContent(){

    var ret 

          AC_GetArgs

          (    arguments".dcr""src""clsid:166B1BCA-3F9C-11CF-8075-444553540000"

         null

          );

    AC_Generateobj(ret.objAttrsret.paramsret.embedAttrs);

}

function AC_GetArgs(argsextsrcParamNameclassidmimeType){

    var ret = new Object();

    ret.embedAttrs = new Object();

    ret.params = new Object();

    ret.objAttrs = new Object();

    for (var i=0args.lengthi=i+2){

          var currArg args.toLowerCase();          

          switch (currArg){ 

              case "classid":

              break;

              case "pluginspage":

              ret.embedAttrs[args] = args[i+1];

              break;

              case "src":

              case "movie"

              //args[i+1] = AC_AddExtension(args[i+1], ext);

              ret.embedAttrs["src"] = args[i+1];

              ret.params[srcParamName] = args[i+1];

              break;

              case "onafterupdate":

              case "onbeforeupdate":

              case "onblur":

              case "oncellchange":

              case "onclick":

              case "ondblclick":

              case "ondrag":

              case "ondragend":

              case "ondragenter":

              case "ondragleave":

              case "ondragover":

              case "ondrop":

              case "onfinish":

              case "onfocus":

              case "onhelp":

              case "onmousedown":

              case "onmouseup":

              case "onmouseover":

              case "onmousemove":

              case "onmouseout":

              case "onkeypress":

              case "onkeydown":

              case "onkeyup":

              case "onload":

              case "onlosecapture":

              case "onpropertychange":

              case "onreadystatechange":

              case "onrowsdelete":

              case "onrowenter":

              case "onrowexit":

              case "onrowsinserted":

              case "onstart":

              case "onscroll":

              case "onbeforeeditfocus":

              case "onactivate":

              case "onbeforedeactivate":

              case "ondeactivate":

              case "type":

              case "codebase":

              case "id":

              ret.objAttrs[args] = args[i+1];

              break;

              case "width":

              case "height":

              case "align":

              case "vspace"

              case "hspace":

              case "class":

              case "title":

              case "accesskey":

              case "name":

              case "tabindex":

              ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1];

              break;

              default:

              ret.embedAttrs[args] = ret.params[args] = args[i+1];

          }

    }

    ret.objAttrs["classid"] = classid;

    if (mimeTyperet.embedAttrs["type"] = mimeType;

    return ret;

}



发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>