好的,所以我用谷歌搜索了几页并提出了以下解决方案:

将其添加到 .htaccess 中
#Active GZIP for php-files
php_flag zlib.output_compression On 
php_value zlib.output_compression_level 5

对于 .js 和 .css:

AddHandler application/x-httpd-php .css .js
php_value auto_prepend_file /Library/WebServer/Documents/blog/code/Helpers/ContentHeader.php

它将执行 .js 和 .css 作为 php 脚本。第二行包括以下页面:

<?php
    $pathInfo = pathinfo($_SERVER['PHP_SELF']);
    $extension = $pathInfo['extension'];

    if($extension == "css")
    {
        header("Content-type: text/css");
    }
    if($extension == "js")
    {
        header("Content-type: text/javascript");
    }
?>

这会将标头“text/css”发送到 .css 文件,将“text/javascript”发送到 javascript 文件。到目前为止,一切都很好。然而问题是我使用的几个缩小的 javascript 出现了某种 php 错误:

<br />
<b>Parse error</b>:  syntax error, unexpected ']' in <b>/Library/WebServer/Documents/blog/public/scripts/prettify/prettify.js</b> on line <b>18</b><br />

或者:

<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br />
<br />
<b>Parse error</b>:  syntax error, unexpected '?' in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br />

那么,有没有更好的方法来做到这一点呢?我能想到的唯一选择是手动进入 .javascript 文件并“纠正 php 不喜欢的错误”。但这不应该是一个更简单的解决方案吗?

有帮助吗?

解决方案

您收到此错误的原因是脚本包含<?。 例如,在prettify.js中是这样的:

/^[^<?]+/

你将它传递给PHP,这样就可以再次启动PHP引擎并看到意外的]

如果您需要更多控制权,我会使用@ jonstjohn的方法,或@ cletus's。

其他提示

我们使用 Apache Mod_Deflate 并使用此处显示的示例配置。在不破解PHP的情况下工作得很好。

我实际上是通过 PHP 脚本提供 JS 文件的。不是因为这个问题,而是因为我可以控制过期标头和缓存。通用模型为:

  • URL 类似于 /script/blah.1234567890.js;
  • 该 URL 是根据 blah.js 文件的 mtime 生成的;
  • 该 URL 通过 .htaccess 中的重写规则发送到 js.php 脚本;
  • 该脚本检查传入的 mtime。如果它比缓存版本的 mtime 新,它会从我的所有 JS 文件(整理成单个文件,然后使用 JSMin 缩小)生成一个新的缓存版本;
  • 如果 mtime 不比脚本新,则仅提供缓存版本;
  • 在所有情况下,内容都将在一年后过期。

URL 中的时间戳允许刷新脚本文件。

现在这与 gzip 有何关系?简单的。我的 js.php 脚本的顶部是:

ob_start("ob_gzhandler")

如果客户端支持 gzip 压缩(以及使用输出缓冲),它将打开 gzip 压缩。

它确实有效。

尝试将自己限制为仅使用一个 JS 和一个 CSS 文件。如有必要,将它们组合起来。我也对 CSS 文件做了同样的技巧(当然没有缩小)。

此解决方案的优点是它仅依赖于启用 mod_rewrite。不需要其他扩展(ob_gzhandler 是 PHP 的标准部分)。另外,需要一个脚本来组合文件(除非您将其作为构建过程的一部分来执行,但我发现这有点乏味)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top