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

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

我正在 PHP 中寻找一个解决方案,它将允许我引用一个 PHP 文件,该文件输出 javascript 作为脚本包含在我的 header html 页。我想要这样做的原因是因为我有一些动态生成的 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 需要检查传入的请求 headers 并确定文件是否已存在于客户端和 return 适当的响应。

我正在寻找能够执行上述操作的任何干净的解决方案,或者任何能为我指明正确方向的链接。如果有更好的方法来包含和缓存动态生成的 javascript 请在此处 post。

URL 在网络服务器上重写:

这将重写请求的 .js 文件名以读取您的 .php 文件。

这被称为 'Internal' 重写,因此网络浏览器不会知道该文件实际上是 .php。它会认为这是它请求的 .js 文件。

Apache

如果您使用的是 Apache 网络服务器,您可以在与 javascriptHandler.php 文件相同的目录中创建一个 .htaccess 文件。

.htaccess 中,放入以下内容:

RewriteEngine On    # Turn on the rewriting engine
RewriteRule    javascriptHandler.js$  javascriptHandler.php [PT]

Nginx

您也可以使用 Nginx 网络服务器执行此操作,但您必须在服务器的 /etc/nginx/sites-available/yoursite 配置文件中执行此操作。

我不会讨论 如何 重写 Nginx,因为它比 Apache 复杂得多。但基本上是这样的:

server{rewrite javascriptHandler.js$  javascriptHandler.php last;}

顺便提一下

进行这些更改后,您将像往常一样调用 HTML 页面中的文件以缓存它:

<script type="text/javascript" src="javascriptHandler.js"></script>

在您的网络服务器上,您将文件另存为 .php。这将允许您使用 PHP 在文件中构建动态 JavaScript。

/path/to/javascriptHandler.php

将JavaScriptHeaders放入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();

您的浏览器会将您的 javascriptHandler.php 文件视为 JavaScript 资源。正常的缓存规则将适用。