使用PHP程序来保护你的flash作品

本文的保护是指防止用户将swf文件保存到本地,其实这种方法在很久之前就有人使用过了。主要的保护措施就是在php后台读取$_SERVER数组,如果是用IE里面的ActiveX控件来加载影片,将会有一个$_SERVER[“HTTP_X_FLASH_VERSION”]参数,如果是用其它下载软件来下载,则不会有这个参数,纳闷的是用Firefox的ActiveX竟然没有这个参数。
这样一来就可以通过这个参数来判断用户的获取方式是否合法了。如果检测到没有$_SERVER[“HTTP_X_FLASH_VERSION”]这个参数,就可以在后台切换另外一个swf来替换原来的。
另外一个就是缓存问题了,一般swf显示之后都还会显示在用户的缓存那里,这个问题也可以解决,那就是通过设置网页的头文件来实现,PHP代码:

Flash
嵌入的问题朋友们可能认为很简单,但是具体到一些问题上来讲,就不是那么简单了,比如:IE浏览器对FLASH的拦截虚框怎么去掉?在FF、OP、NS等其它浏览器是否兼容?代码是否符合W3C标准??等等

要声名一下,这种保护技术的能力是有限的,可以破解的方法还是有的。

下面我就转贴别人的一篇文件,共同学习一下

一、传统的方法

<object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″codebase=”” width=”550″ height=”400″ id=”Untitled-1″ align=”middle”> 
<param name=”allowScriptAccess” value=”sameDomain” /> 
<param name=”movie” value=”mymovie.swf” /> 
<param name=”quality” value=”high” /> 
<param name=”bgcolor” value=”#ffffff” /> 
<embed src=”mymovie.swf” quality=”high” bgcolor=”#ffffff” width=”550″    height=”400″name=”mymovie” align=”middle” allowScriptAccess=”sameDomain”    type=”application/x-shockwave-flash” pluginspage=”” /> 
</object>

这方法是使用 object 和 embed 标签来嵌入,细心的会发现,object
的很多参数和 embed
里面的很多属性是重复的,为什么这样做?为了浏览器兼容性,有的浏览器支持
object,有的支持 embed,这也是为什么要修改 Flash
的参数时两个地方都要改的原因。

这种方法是 Macromedia 一直以来的官方方法,最大限度的保证了 Flash
的功能,没有兼容性问题。但是它现在不那么好用了:
无法通过验证,由于为了兼容性而嵌入的 embed 标签是不符合 W3C
的规范的。当然,如果你不在乎什么规范不规范,另当别论。

微软由于种种原因,在 sp2 后限制了 IE 的 ActiveX
的使用模式,就是在页面中的 ActiveX
有一个虚框,需要用户点击一次才能正常交互。Flash是作为一个 ActiveX
嵌入到网页中的,所以它也会受牵连,只有通过 JS 嵌入 Flash
才能解决这个问题。

没有 Flash
版本检测,如果版本浏览器的flash插件版本不够,或者不能正常显示你的 swf
文件,或者会弹出一个 ActiveX
的确认安装的框——这个框对很多用户来说是很恐怖的。

二、用JS嵌入的方法

用JS嵌入就是各有各的嵌入方法了,有嵌得好的有嵌得不好的。有人用
document.write 直接写,这法子说实话不大好,感觉 hack
成分多了,有点为了验证而验证的意思,而且没有体现出什么 JS
的优势。我觉得一个好的 JS 嵌入脚本,在保证 Flash
应有功能的基础上,要发挥 JS
的优势应该要有版本检测,要能很好解决可访问性问题(也就是用户在无法浏览
Flash 内容或禁用 JS 的时候应该如何处理的问题),要易于重复使用。

我们这里要讲的是SWFObject这个解决方案:

“SWFObject”是利用Javascript
插入flash,好处多多,代码简洁,不会出现IE6下的“单击此处以激活控件”的提示,并且能通过W3C验证。不同于传统的“object”插入flash的方法。

SWFObject在新的2.x版本中,其最简单的调用竟只需一句话,并且不需要等待页面加载完成,这意味着你可以将这句话写在页面的任何地方。比以前的版本,要简便多了。下面来看几个简单常用的调用方法:

1、最简单,最基本,只要想插入flash都能用到的经典一句话。

<div id=”swfid”></div> 
<script type=”text/javascript” src=”swfobject.js”></script> 
<script type=”text/javascript”>
swfobject.embedSWF(“test.swf”, “swfid”, “300”, “120”, “9.0.0”, “expressInstall.swf”); 
</script>

注解:调用方法embedSWF——插入SWF文件,参数依次是@swf文件的地址;@用于装入swf文件的容器(如div)的id;@flash的宽度;@flash的高度(当然,这里的宽高都可以使用诸如100%这样的百分比来表示);@正常播放该flash所需的最低版本;@当版本低于要求时,执行该swf文件,这里利用这个flash跳转到官方下载最新版本的flash插件。(该参数可以省略)在同一个页面插入多个flash到不同位置时,只要重复上面的语句,使用不同的容器id就可以了。

2、给swf文件传递参数、变量、属性的调用方法

<script type=”text/javascript” src=”swfobject.js”></script> 
<script type=”text/javascript”> 
//1、使用Json初始化变量、参数、属性 
        var flashvars = {
            name1: “hello”,
            name2: “world”,
            name3: “foobar”
        };
        var params = {
            menu: “false”
        };
        var attributes = {
            id: “dynamicContent2”,
            name: “dynamicContent2”
        };
        swfobject.embedSWF(“test6_flashvars.swf”, “content2”, “300”, “120”, “6.0.0”,”expressInstall.swf”,
flashvars, params, attributes); 

//2、传统的初始化设置,效果一样 
        var flashvars = {};
        flashvars.name1 = “hello”;
        flashvars.name2 = “world”;
        flashvars.name3 = “foobar”;
        var params = {};
        params.menu = “false”;
        var attributes = {};
        attributes.id = “dynamicContent3”;
        attributes.name = “dynamicContent3”;
        swfobject.embedSWF(“test6_flashvars.swf”, “content3”, “300”, “120”, “6.0.0”,”expressInstall.swf”,
flashvars, params, attributes); 
//3、直接写在后面,就一句话,简洁剽悍,不拖泥带水 
        swfobject.embedSWF(“test6_flashvars.swf”, “content5”, “300”, “120”, “6.0.0”,”expressInstall.swf”,
{name1:”hello”,name2:”world”,name3:”foobar”}, {menu:”false”},
{id:”dynamicContent5″,name:”dynamicContent5″}); 
</script>
 

SWFObject google 开源项目 
SWFObject(2.2版)
下载地址:
SWFObject(2.0版)
下载地址:
SWFObject的官方Blog:
SWFObject 2.0 官方文档(中文) 

 

来至于  

嵌入的问题朋友们可能认为很简单,但是具体到一些问题上来讲,就不是那么简单了,比如:IE浏览器对FLASH的拦截虚框怎么去掉?在…

发表评论

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