PHP技术问询:如何实现单页面加载多个SWF游戏文件?
单个Flash游戏播放页的实现方案
嘿,这个需求很实用!用单页加载所有Flash游戏完全可行,我给你两种常见的实现思路,顺便帮你分析下你写的Session代码问题~
一、推荐方案:URL参数传递游戏标识(轻量直接)
这种方法最简单,不需要依赖会话,用户分享链接或者刷新页面都能正常对应到游戏,步骤如下:
1. 目录页设置带参数的链接
在你的游戏目录页里,给每个游戏的链接加上game参数,指定对应的swf文件名:
<!-- 目录页示例代码 --> <a href="game-player.php?game=doom.swf">Doom 游戏</a> <a href="game-player.php?game=pong.swf">Pong 游戏</a>
2. 播放页动态加载对应游戏
在game-player.php中,先获取URL参数,一定要做安全校验(防止恶意用户传入非法路径加载其他文件),然后动态生成Flash加载标签:
<?php // 定义允许加载的游戏列表,避免非法请求 $allowedGames = ['doom.swf', 'pong.swf']; // 获取URL中的game参数,默认空字符串 $selectedGame = $_GET['game'] ?? ''; // 校验游戏是否在允许列表内 if (!in_array($selectedGame, $allowedGames)) { echo "抱歉,这个游戏不存在或未授权!"; exit; } ?> <!-- HTML部分:加载Flash游戏 --> <div class="game-container"> <embed src="你的游戏文件目录/<?php echo $selectedGame; ?>" width="800" height="600" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" > </div>
二、你的Session方案:可行但没必要(分析+修正)
先直接说结论:你写的原代码语法上有效,但逻辑不对——你只是提前给Session设置了两个键值对,但没有在用户点击游戏时传递「当前要加载的游戏」这个信息,所以播放页根本不知道要加载哪个游戏。
如果一定要用Session实现,得调整逻辑:
1. 目录页链接跳转到中间页存Session
<!-- 目录页链接 --> <a href="set-game-session.php?game=doom.swf">Doom 游戏</a> <a href="set-game-session.php?game=pong.swf">Pong 游戏</a>
2. 中间页存入Session并跳转
新建set-game-session.php,用来接收游戏参数并存入Session,再跳转到播放页:
<?php session_start(); $allowedGames = ['doom.swf', 'pong.swf']; $selectedGame = $_GET['game'] ?? ''; if (in_array($selectedGame, $allowedGames)) { $_SESSION['current_game'] = $selectedGame; } // 跳转到播放页 header("Location: game-player.php"); exit; ?>
3. 播放页读取Session加载游戏
<?php session_start(); $allowedGames = ['doom.swf', 'pong.swf']; // 从Session中获取当前游戏 $selectedGame = $_SESSION['current_game'] ?? ''; if (!in_array($selectedGame, $allowedGames)) { echo "请先选择一个游戏!"; exit; } ?> <!-- 同样的Flash加载代码 --> <embed src="你的游戏文件目录/<?php echo $selectedGame; ?>" width="800" height="600" type="application/x-shockwave-flash" >
为什么不推荐用Session?因为它依赖用户的会话状态:如果用户开多个标签页切换游戏,Session会被覆盖;用户分享链接给同学,对方打开的是Session里存储的上一个游戏,而不是当前分享的那个。URL参数就没有这些问题,更适合你的场景。
最后回答你的两个小问题
- 原代码是否有效?:语法上没有错误,但逻辑无法实现你要的「点击游戏后加载对应swf」的需求,因为没有在点击时传递当前游戏的标识。
- 点击后是否需在目标页输出变量?:是的!不管用URL参数还是Session,都需要在播放页读取这个变量,然后把它插入到Flash标签的
src属性里,才能动态加载对应的游戏文件。
内容的提问来源于stack exchange,提问作者Xidous
相关产品推荐
相关产品推荐

