我正在寻找一个PHP解决方案,该解决方案将允许我引用一个PHP文件,该文件将javascript作为包含在我的html页面标题中的脚本输出。我之所以要这样做,是因为我有一些动态生成的javascript,我希望浏览器缓存这些javascript。
我以前在ASP.NET中使用过.ashx处理程序来实现这一点,但我不确定如何在PHP中实现。
以下是我努力实现的目标的更详细的分解。
<!DOCTYPE html>
<html lang="en">
<script type="text/javascript" src="javascriptHandler.php"></script>
<head>
</head>
在上面的示例中,我希望javascriptHandler.php
在被请求后使用javascript文件进行响应。javascriptHandler.php
需要检查传入的请求标头,并确定该文件是否已经存在于客户端上,并返回适当的响应。
我正在寻找任何干净的解决方案,可以做上面描述的事情,或者任何链接,可以为我指明正确的方向。如果有更好的方法来包含和缓存动态生成的javascript,请在这里发布。
将JavaScript头放入PHP文件
保持HTML页面不变。将其称为.php
文件:
<script type="text/javascript" src="javascriptHandler.php"></script>
在javascriptHandler.php
文件中,将其添加到文件的最顶部:
<?php
header("Content-Type: application/javascript");
header("Cache-Control: max-age=604800, public");
?>
然后你可以把你的常规javascript放在下面。总之,它看起来像:
<?php
header("Content-Type: application/javascript");
header("Cache-Control: max-age=604800, public");
?>
function bob(){
alert('hello')
}
bob();
并且您的浏览器将把您的CCD_ 5文件视为JavaScript资源。将应用正常的缓存规则。
在web服务器上重写URL:
这将重写请求的.js
文件名,以读取您的.php
文件。
这被称为"内部"重写,因此web浏览器不会知道该文件实际上是.php
。它会相信这是它请求的.js
文件。
Apache
如果您使用的是Apache
Web服务器,则可以在与javascriptHandler.php
文件相同的目录中创建.htaccess
文件。
在.htaccess
中,放入以下内容:
RewriteEngine On # Turn on the rewriting engine
RewriteRule javascriptHandler.js$ javascriptHandler.php [PT]
Nginx
您也可以使用Nginx
web服务器执行此操作,但必须在服务器的/etc/nginx/sites-available/yoursite
配置文件中执行此操作。
我不会讨论如何在Nginx
上进行重写,因为它比Apache
复杂得多。但基本上是这样的:
server{rewrite javascriptHandler.js$ javascriptHandler.php last;}
只是提一下
在这些更改之后,您将像往常一样调用HTML页面中的文件以缓存它:
<script type="text/javascript" src="javascriptHandler.js"></script>
在您的Web服务器上,您将把文件保存为.php
。这将允许您使用PHP在文件中构建动态JavaScript。
/path/to/javascriptHandler.php