1

如何在对象嵌入期间将查询参数注入到作为对象输入处理的 PHP 脚本中?例如,Shockwave 播放器提供了一个由脚本生成的音乐播放列表,如代码示例中所示:

<object type="application/x-shockwave-flash" data="swf_player.swf?sort=track&skin_url=player/skin.xml&playlist_url=music/Playlist_Generator.php">

其中 swf_player.swf 识别查询参数“skin_url”和“playlist_url”,而 Playlist_Generator.php 识别参数“sort”。播放列表生成器脚本识别指定目录中的 .mp3 曲目并解构它们以获取 ID3 信息标签(艺术家、标题、曲目编号、专辑等)。然后它会发出一个播放列表,该列表主要由一个带有相关曲目信息的曲目列表组成,该曲目列表指向 .mp3 目录,swf_player 可以在该目录中找到这些曲目。

当直接在浏览器的地址栏上调用生成器时,Playlist_Generator.php 从查询字符串中提取排序参数,如

http://localhost/music/Playlist_Generator.php?sort=track

通过

$sort_type = $_REQUEST['sort'];
$sort_type = !empty($sort_type) ? $sort_type : 'title'; 

sort 参数表示用户对播放列表中曲目排序的偏好。直接脚本调用是播放列表生成器正在开发时使用的设置,因为它有助于丰富的调试信息。但是,一旦生成器与播放器“内联”使用,如上所述,查询参数对它不可用。在上面显示的嵌入样本中,播放列表生成器的 PHP 代码在查询扩展期间被处理,因此查询参数,特别是“排序”,对其不可用。

我应该非常感谢任何可能为 PHP 脚本设计了一种在“动态”处理时获取外部信息的方法的人。虽然上述问题已被描述为无法访问查询参数,但可能存在替代方案,脚本可以获取外部信息。欢迎所有问题,评论和特别建议!

在此先感谢所有做出贡献的人。

4

2 回答 2

0

XSPF_Playlist_Generator.php 的服务器端包含(SSI)创建了一个播放列表文件,可以很好地完成这项工作。(可能需要在服务器上启用 SSI。请参阅http://httpd.apache.org/docs/current/howto/ssi.html和其他 SSI 站点,其中搜索短语“服务器端包含”会引发配置和语法参考.) 注意使用 PHP 将从浏览器的地址行获得的查询参数 sort 的值插入到附加到 php 文件 url 的查询字符串中:

<!--#include virtual='music/XSPF_Playlist_Generator.php?sort=<?php echo $_GET['sort'];?>' -->

除了发出的 XSPF 播放列表之外,播放列表生成器还能够将播放列表写入文件。此功能已启用,然后播放列表文件读入 SWF 播放器,如下所示:

<object type="application/x-shockwave-flash" data="swf_player.swf?skin_url=player/skin.xml&playlist_url=music/XSPF_Playlist.xspf">

...创建(遗憾的是)一个两步过程。中间步骤似乎是必要的,因为我还没有发现将浏览器地址栏中的查询参数“排序”的值直接注入 php 文件的方法。对于那些好奇的人,播放器可以识别参数 playlist_url 的两种类型的值:一个 .php 文件,它“动态”生成一个播放列表(注入其中将是一步过程),以及一个(准)静态.xspf 文件可以在页面刷新时重新生成(繁琐的中间第二步)。

该解决方案已在 IE、Opera、Safari、Firefox 和 Chrome 上成功测试。请注意,Apache、nginx、lighttpd 和 IIS 是支持 SSI 语言的四大 Web 服务器。

感谢所有做出贡献的人。任何可能无法跟进并想要完整源代码的人,请将您的请求通过电子邮件发送给我:kanone@rogers.com。

于 2012-12-27T23:57:14.783 回答
0

我相信您的问题的答案是:

<?php
    $sort = isset($_GET["sort"]) ? $_GET["sort"] : "title"

?>
<object type="application/x-shockwave-flash" data="swf_player.swf?sort=<?php echo $sort ?>&skin_url=player/skin.xml&playlist_url=music/Playlist_Generator.php">

编辑:再三考虑,我怀疑这是您正在寻找的答案。你的意思是“生成器是内联使用的”?

于 2012-12-18T21:35:05.083 回答