Files cached as CSS or PHP?

时间:2016-03-02 作者:user1181378

我正在使用一个带有PHP扩展名的动态CSS文件。

wp_enqueue_style(\'css\', get_template_directory_uri().\'/inc/css.php\');
输出:

<link rel=\'stylesheet\' id=\'dynamic-css\'  href=\'PATH/inc/css.php?ver=4.4.2\' type=\'text/css\' media=\'all\' />
我还使用了一个缓存插件(WP Super cache)。

我的问题是,这个CSS文件是缓存为PHP还是CSS?

2 个回复
SO网友:Tom J Nowell

这在很大程度上取决于您的服务器配置,但:

将WP Super Cache缓存css。php输出

极不可能。如果您的文件只是从几个变量生成CSS,那么不会。

然而,如果它引导并加载WordPress,那么它“可能”缓存一些东西,但我怀疑它是否会像您预期的那样工作,或者是否会进行全页缓存。在这里,“可能”这个词充其量只是一种延伸

其他缓存插件会缓存它吗

切换到另一个缓存插件不会改变任何事情

服务器会缓存它吗?还是浏览器

这取决于发送的标题,现在我们已经超出了WordPress和这个堆栈交换的范围。答案完全取决于您的设置,如果不让这个问题对其他人毫无用处,或者不了解您的系统,就不可能回答这个问题

我现在做的安全吗

否。

如果您的文件引导WordPress,那么即使插件或主题被禁用,它也会起作用,成为潜在的安全漏洞。AJAX端点和表单处理程序更是如此。WordPress是一个CMS,所有请求都应该通过它来路由。已经提供了AJAX API,并且有重写规则和查询变量,您可以添加和检测这些规则和变量以输出CSS和其他内容。

然而,如果您css.php 在做了少量的数学运算等之后输出PHP,然后应该消除它,只需使用构建过程来生成css文件。您可以使用less或sass或其他一些系统来生成CSS,但它不需要分发到您的服务器

SO网友:iantsch

我不知道你在你的css.php 来处理php缓存,但我想不会太多。如果你想css.php 要缓存为CSS,可以使用snippet 我找到了。

如何创建简单高效的PHP缓存

Edit 2:

正如@TomJNowell的回答所述,这不是一种安全的方法:

如果您的文件引导WordPress,那么即使插件或主题被禁用,它也会起作用,成为潜在的安全漏洞。AJAX端点和表单处理程序更是如此。WordPress是一个CMS,所有请求都应该通过它来路由。已经提供了AJAX API,并且有重写规则和查询变量,您可以添加和检测这些规则和变量以输出CSS和其他内容。

css.php:

$url = $_SERVER["SCRIPT_NAME"];
$break = Explode(\'/\', $url);
$file = $break[count($break) - 1];
$cachefile = \'cached-\'.substr_replace($file ,"",-4).\'.css\';
$cachetime = 18000;

// Serve from the cache if it is younger than $cachetime
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
    echo "/* Cached copy, generated ".date(\'H:i\', filemtime($cachefile))." */\\n";
    include($cachefile);
    exit;
}
ob_start(); 

//Add your former css.php here

$cached = fopen($cachefile, \'w\');
fwrite($cached, ob_get_contents());
fclose($cached);
ob_end_flush();

Edit:

您的插件将所有模板输出(帖子、页面、档案等)缓存为HTML,但不包含链接数据,如JS或CSS。

相关推荐

Wp_cache_set不工作有什么原因吗?

wp\\u cache\\u设置不工作的原因是什么?我一直在转动车轮,试图弄明白为什么这些都不起作用。有什么建议吗?这些函数旨在帮助我将结果缓存到键/对象,然后利用键/对象显示信息。但是,它们不存储密钥/对象$related_post_ids = wp_cache_get( \'related_post_ids\' ); if ( false === $related_post_ids ) { //seting args and run query $the_query = new