如何从PHP文件输出javascript文件,该文件可以从脚本包含标记中引用


How to output a javascript file from a PHP file that can be referenced from a script include tag

我正在寻找一个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