Javascript 如何使IIS7将js文件解析为PHP文件?
最终,我试图在我的服务器上建立一种特别可靠的方法来检测某人的浏览器名称和版本(用于记录,而不是启用功能),有人指出。也就是说,他们使用的htaccess文件包含以下内容:Javascript 如何使IIS7将js文件解析为PHP文件?,javascript,php,.htaccess,iis,mime-types,Javascript,Php,.htaccess,Iis,Mime Types,最终,我试图在我的服务器上建立一种特别可靠的方法来检测某人的浏览器名称和版本(用于记录,而不是启用功能),有人指出。也就是说,他们使用的htaccess文件包含以下内容: AddType application/x-httpd-php .js 他们的自述文件说,这是为了让服务器也使用PHP解析某个js文件,如果未启用htaccess,则必须找到解决方法 我使用的是IIS 7,它使用web.config文件,但我在Internet上没有看到用于PHP的现成mime类型,因此这样做看起来不会奏效:
AddType application/x-httpd-php .js
他们的自述文件说,这是为了让服务器也使用PHP解析某个js文件,如果未启用htaccess,则必须找到解决方法
我使用的是IIS 7,它使用web.config文件,但我在Internet上没有看到用于PHP的现成mime类型,因此这样做看起来不会奏效:
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".js" mimeType="PHP mime type" />
</staticContent>
</system.webServer>
</configuration>
我尝试使用,这涉及到通过iisgui添加处理程序映射,但这似乎也无法实现。如何做到这一点?PHP的模拟类型包括:
- text/php
- text/x-php
- 应用程序/php
- application/x-php
- application/x-httpd-php
- application/x-httpd-php-source
your's Web.config XML代码在使用“application/php”时似乎运行良好,但您也可以使用IIS管理器创建mimetype映射(请参阅:)。我通过向IIS添加处理程序映射来实现这一点。我所做的只是使用
FastCgiModule
添加处理程序映射,将Request path
设置为detect.js
,并将可执行路径定向到php cgi.exe
在我的服务器上的位置。然后php解析detect.js很好,我在尝试使其工作时遇到的唯一问题是,在将detect.js
脚本添加/加载到给定的测试网页之前,创建WhichBrowser
对象的代码正在运行。为了解决这个问题,我只修改了给定的代码,如下所示:
<script>
(function(){var p=[],w=window,d=document,e=f=0;p.push('ua='+encodeURIComponent(navigator.userAgent));e|=w.ActiveXObject?1:0;e|=w.opera?2:0;e|=w.chrome?4:0;
e|='getBoxObjectFor' in d || 'mozInnerScreenX' in w?8:0;e|=('WebKitCSSMatrix' in w||'WebKitPoint' in w||'webkitStorageInfo' in w||'webkitURL' in w)?16:0;
e|=(e&16&&({}.toString).toString().indexOf("\n")===-1)?32:0;p.push('e='+e);f|='sandbox' in d.createElement('iframe')?1:0;f|='WebSocket' in w?2:0;
f|=w.Worker?4:0;f|=w.applicationCache?8:0;f|=w.history && history.pushState?16:0;f|=d.documentElement.webkitRequestFullScreen?32:0;f|='FileReader' in w?64:0;
p.push('f='+f);p.push('r='+Math.random().toString(36).substring(7));p.push('w='+screen.width);p.push('h='+screen.height);var s=d.createElement('script');
s.src='http://intranet.zachs/media/whichbrowser/detect.js?' + p.join('&');
s.onreadystatechange= function () {
if (this.readyState == 'complete') go();
}
s.onload= go;
s.type="text/javascript";
d.getElementsByTagName('head')[0].appendChild(s);
})();
s.onload
似乎不想启动。您使用的浏览器是什么?我在chrome和firefox中进行了测试,在我使用firefox时效果很好。我试图小心地添加处理程序映射和代码,但可能缺少一些内容。请尝试修改detect.js
并放置echo“Hello World!”
作为标题
调用后php部分代码的第一行,然后转到浏览器中的detect.js
页面,查看是否打印它。您还应该看到javascript代码在页面上得到响应。如果echo正常工作,那么您已经成功地在IIS中设置了处理程序,如果不正常,您将在页面上看到php代码。显然,IIS不太喜欢detect.js
中的函数调用,apache\u request\u headers()
。在的文档中说FastCGI现在支持它,所以也许我们在这里使用的是过时的东西?不过,一些替换代码修复了这个问题。从那以后,一切都很顺利。谢谢
Browsers = new WhichBrowser();
alert("Browser Info: " + Browsers);