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

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,请在​​此处发布。

Fac*_*dan 5

Web 服务器上的 URL 重写:

这将重写请求的.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)


Fac*_*dan 5

将JavaScript标头放入PHP文件

保持您的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资源。正常的缓存规则将适用。