我只是想知道是否可以嵌入一些PHP脚本进入图像文件。
#1 楼
任何此类功能都取决于所使用的播放器或查看器。我知道没有一种图像格式需要查看器进行任何形式的交互,但是某些视频格式确实使用(或更确切地说确实使用了)。除了0xea提到的Quicktime,Windows Media / ASF格式允许嵌入脚本命令,其中之一是打开URL:
http://support.microsoft.com/kb/828026
内容所有者创建音频或视频流时,该内容所有者可以添加嵌入在流中的脚本命令(例如URL脚本命令和自定义
脚本命令)。播放流时,脚本命令可以在嵌入式播放器程序中触发事件,也可以启动Web浏览器,然后连接到特定的网页。此行为是设计使然。
但是,此行为:
依靠支持它的播放器(例如,我不认为VLC或mplayer支持)
可以被用户禁用
所以,我不会依赖它。
EDIT
图片,我刚刚意识到SVG正在使用XML。 XML文件可能包含对外部URL的引用,例如DTD或架构。此外,SVG本身支持引用同一文档中的其他元素,有时也支持外部元素:
http://www.w3.org/TR/SVG/struct.html#Head
我刚刚尝试过,然后打开以下SVG结果将其提取到Opera中的远程服务器上,而不是IE:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="8cm" height="3cm" xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>Local URI references within ancestor's 'defs' element.</desc>
<defs>
<linearGradient id="Gradient01">
<stop offset="20%" stop-color="#39F" />
</linearGradient>
</defs>
<!-- reference to a local definition -->
<rect x="1cm" y="1cm" width="6cm" height="1cm"
fill="url(#Gradient01)" />
<!-- this element triggers a fetch of the specified URL in Opera -->
<rect x="1cm" y="1cm" width="6cm" height="1cm"
fill="url(http://example.com/test1)" />
</svg>
它是针对特定观看者的,但是您可能有更多的机会来使用它。
#2 楼
您要求的是非常接近远程执行代码,这通常是安全性。有些格式允许类似的内容。
据我所知,MOV文件格式允许您在其中插入URL或别名以用于电影的其他版本。我认为它通常用于流媒体目的,以便播放器可以请求更高或更低质量的电影和类似内容。
我不知道很多细节,但是您可以签出MOV文件格式。包含网址的原子是DREF。苹果应该有更多信息。请查看QuickTime文件格式规范以获取详细信息。例如,这里的示例文件(来自mplayer示例数据库,事实证明对所有媒体文件来说都是非常宝贵的资源),实际上仅包含对另一个文件的引用,该文件位于http://stream.qtv.apple.com/events/jan/cat_power/cat_power_ref_28.mov。服务器肯定可以通过这种方式确定客户端的IP地址。