Php 如何要求外部程序打开通过web浏览器提供服务的文件?检测是否安装了外部程序如何?

Php 如何要求外部程序打开通过web浏览器提供服务的文件?检测是否安装了外部程序如何?,php,html,cookies,content-type,Php,Html,Cookies,Content Type,我有一个由两部分组成的问题。第一,我想我有一个好答案 我希望强制调用一个外部程序来查看我公司正在开发的应用程序的配置文件。我想基本要点是将contenttype头设置为应用程序关联的类型,然后为文件内容提供服务。我在想它的结构是这样的: <?php Header( "Content-type: application/blahtype" ); ?> output of xml configuration file goes here... <a href="myapp:dat

我有一个由两部分组成的问题。第一,我想我有一个好答案

我希望强制调用一个外部程序来查看我公司正在开发的应用程序的配置文件。我想基本要点是将contenttype头设置为应用程序关联的类型,然后为文件内容提供服务。我在想它的结构是这样的:

<?php
Header( "Content-type: application/blahtype" );
?>
output of xml configuration file goes here...
<a href="myapp:data-goes-here-urlencoded">Link</a>
<Object id="iTunesDetector" height="1" classID="CLSID:D719897A-B07A-4C0C-AEA9-9B663A28DFCB" width="1"></Object>

xml配置文件的输出在这里。。。
这里还有其他的最佳实践吗?显然,用户将不得不允许外部应用程序在所有浏览器中普遍访问该文件,除非他们的浏览器中安装了一个插件来处理内容类型,如adobe pdf。这对我们公司目前来说是不可行的,所以我们愿意接受确认屏幕

我认为问题的第二部分有点复杂。我们如何检测用户是否安装了应用程序,如果没有,如何为他们提供不同的内容(注册页面或应用程序可执行文件本身)?我不想知道服务不同内容的物流,而只是检测过程。应用程序是否可以在机器上安装的浏览器缓存中安装生存期cookie?这不是一个完美的解决方案,因为用户当然可以清除缓存。我们还能如何做到这一点

这样做的程序示例有Amazon MP3 Downloader(事实上,我已经有过一两次这样的错误状态)和iTunes U。您可以在Stanfords CS193P页面上看到iTunes U示例:

非常感谢您的建议,
Josh

考虑使用浏览器扩展来处理类似的事情可能是个好主意。

对于问题的第一部分,只要您的应用程序正确注册以处理该MIME类型,那么,是的,浏览器应该[提示用户并启动您的应用程序](“MSDN:在Internet Explorer中处理MIME类型”)

另一种方法是[协议处理程序](“MSDN:将应用程序注册到URL协议”)。您不用为应用程序注册MIME类型,而是注册一个URL中的“协议”,以代替http://。如果您的协议名为
myapp
,则可以创建如下链接:

<?php
Header( "Content-type: application/blahtype" );
?>
output of xml configuration file goes here...
<a href="myapp:data-goes-here-urlencoded">Link</a>
<Object id="iTunesDetector" height="1" classID="CLSID:D719897A-B07A-4C0C-AEA9-9B663A28DFCB" width="1"></Object>

虽然您只能通过这种方式传递少量信息,但您可以传递GUID或标记,应用程序一旦启动,就可以使用该GUID或标记从服务器检索完整文档

编辑:对于问题的第2部分,iTunes使用了一个插件。查看用于重定向到iTunes的代码,您将看到如下内容:

<?php
Header( "Content-type: application/blahtype" );
?>
output of xml configuration file goes here...
<a href="myapp:data-goes-here-urlencoded">Link</a>
<Object id="iTunesDetector" height="1" classID="CLSID:D719897A-B07A-4C0C-AEA9-9B663A28DFCB" width="1"></Object>

它后面跟着一些JavaScript来检测插件是否已加载。如果是,则必须安装iTunes,并使用
itms:
协议启动iTunes(就像上面示例中的
myapp:
协议一样)


这里的问题是,您必须编写一个浏览器插件。

谢谢您的回答!我认为这两种应用程序启动解决方案似乎都是好的。现在的问题是,我该如何为人类已知的每一个浏览器提供各种各样的插件。。。当我向某人提供下载文件时,可能会有一个cookie后备,直到我们能够覆盖所有这些基础。