Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于通过php提供css的php头_Php_Css_Caching - Fatal编程技术网

用于通过php提供css的php头

用于通过php提供css的php头,php,css,caching,Php,Css,Caching,事情是这样的。 我正在提供一些压缩的CSS内容 (`str_replace(array("\r", "\n", "\t", '\s\s+'), '', cssGoesHere)`) 通过我的页面中的PHP文件: 问题是:如何使浏览器缓存返回的css,但在内容更改时更新缓存 PHP文件没有被修改,因此添加如下内容 <?php echo filemtime('/css/loader.css.php'); ?> 无法选择href属性。这可以通过标题解决吗?如果可以,如何解决?因

事情是这样的。 我正在提供一些压缩的CSS内容

(`str_replace(array("\r", "\n", "\t", '\s\s+'), '', cssGoesHere)`) 
通过我的页面中的PHP文件:

问题是:如何使浏览器缓存返回的css,但在内容更改时更新缓存

PHP文件没有被修改,因此添加如下内容

<?php echo filemtime('/css/loader.css.php'); ?>

无法选择
href
属性。这可以通过标题解决吗?如果可以,如何解决?因为如果我像上面写的那样提供服务,那么浏览器将缓存结果并继续重用缓存(当然,前提是浏览器已启用/能够这样做),但我需要它知道内容何时更改

编辑:我已经用我的代码做了一个github项目(尽管自从我写这篇文章以来,为了更大的灵活性,我做了很多修改)。以下是链接:

如果您有任何建议,请将其写入我的电子邮件或smth。

这可以通过标头缓存控制来解决,但事实证明这不是很有效。因为某些浏览器会覆盖或修改您的强制设置

我看不出你从哪里得到CSS数据,如果它是一个CSS文件,你可以得到CSS文件的filemtime作为版本指示器,或者只是在某个地方提供一个版本字符串,每次CSS文件更改时都必须更改该字符串

顺便说一句,
str\u replace(数组(“\r”、“\n”、“\t”、“\s\s+”)
,并不能有效地删除所有换行符。您应该使用

$foo = nl2br($string, FALSE);
$bar = str_replace(array('<br>', '\s\s+'), '', cssGoesHere)
$foo=nl2br($string,FALSE);
$bar=str_replace(数组(“
”,“\s\s+”),“”,cssgoesher)
相反


HTH:)

这可以通过头缓存控制来解决,但事实证明这不是很有效。因为某些浏览器会覆盖或修改您的强制设置

我看不出你从哪里得到CSS数据,如果它是一个CSS文件,你可以得到CSS文件的filemtime作为版本指示器,或者只是在某个地方提供一个版本字符串,每次CSS文件更改时都必须更改该字符串

顺便说一句,
str\u replace(数组(“\r”、“\n”、“\t”、“\s\s+”)
,并不能有效地删除所有换行符。您应该使用

$foo = nl2br($string, FALSE);
$bar = str_replace(array('<br>', '\s\s+'), '', cssGoesHere)
$foo=nl2br($string,FALSE);
$bar=str_replace(数组(“
”,“\s\s+”),“”,cssgoesher)
相反


HTH:)

在更改时可靠加载文件的唯一方法是您声明的方法。否则,页面将缓存该文件,并在其认为必要时保留该文件。如果不请求并下载至少一个标题,它就无法检查页面是否已更改,如果已经更改了,那么最好只下载页面的其余部分,因为带宽将是最小的

如果您真的无法将修改后的日期附加到HTML中,那么最好的选择是通过PHP设置缓存头

header("Cache-Control: max-age=time-in-seconds");

不过,这并不总是有效的,因为服务器设置和浏览器设置可以覆盖这一点,特别是在Internet Explorer等具有攻击性的缓存浏览器中。

在更改时可靠加载文件的唯一方法是您声明的方法。否则,页面将缓存该文件,并在其认为必要时保留该文件。如果不请求并下载至少一个标题,它就无法检查页面是否已更改,如果已经更改了,那么最好只下载页面的其余部分,因为带宽将是最小的

如果您真的无法将修改后的日期附加到HTML中,那么最好的选择是通过PHP设置缓存头

header("Cache-Control: max-age=time-in-seconds");

不过,这并不总是有效的,因为服务器设置和浏览器设置可以覆盖这一点,特别是在Internet Explorer等具有攻击性的缓存浏览器中。

例如,我建议将缓存内容生成的时间保留在某个位置 保存CSS数据的style.php最后一次修改是在2012年6月21日
缓存内容最后一次生成是在2012年6月20日,通过对strotime()整数中的日期进行比较,您可以看到缓存内容必须从新内容中再次生成。

我建议将缓存内容生成的时间保留在某个位置,例如 保存CSS数据的style.php最后一次修改是在2012年6月21日
缓存内容最后一次生成是在2012年6月20日,通过对strotime()整数中的日期进行比较,您可以看到缓存内容必须从新内容中再次生成。

在css php页面中使用此选项:

header('Content-type: text/css');
header("Cache-Control: no-cache, must-revalidate");

您可以在css php页面中看到更多使用此选项的信息:

header('Content-type: text/css');
header("Cache-Control: no-cache, must-revalidate");

您可以看到更多内容

您可以向CSS链接href添加版本号,并使用mod rewrite将其路由回原始CSS文件

比如说。假设您从版本1开始(注意文件名的版本附录):


浏览器将缓存此文件。下次更新CSS文件时,如果您不希望浏览器使用缓存文件,只需按如下方式更改版本号:

<link rel="stylesheet" type="text/css" href="/css/loader-v002.css.php" />

然后,在mod rewrite中,将对文件
loader-v{x}.css.php
的任何请求路由到
loader.css.php


我不确定这是否“自动化”足以满足您的需要,因为它确实需要手动更改版本号。但是,不同的文件名将确保浏览器将其视为实际的“新”文件并重新下载。

您可以向CSS链接href添加版本号,并使用mod rewrite将其路由回原始CSS文件

比如说。假设您从版本1开始(注意文件名的版本附录):


浏览器将缓存此文件。下次更新CSS文件时,如果您不希望浏览器使用缓存文件,只需按如下方式更改版本号:

<link rel="stylesheet" type="text/css" href="/css/loader-v002.css.php" />

然后,在mod rewrite中,将对文件
loader-v{x}.css.php
的任何请求路由到
loader.css.php

我不确定这是否“自动化”足以满足您的需要,因为它确实需要手动更改版本号。然而