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