如何在将其内容与其他文件一起使用之前执行PHP文件?

时间:2015-06-03 10:13:37

标签: php html css variables

情况

我正在混合使用HTML&带有PHP变量的CSS,这样我只需一个配置文件即可管理很多设置。这一切都运行正常,但我现在正在尝试合并和缩小CSS。这会导致问题。

问题

变量不会回显到压缩表中,因为PHP脚本不会被执行。这是因为file_get_contents()将内容转换为字符串。

问题

是否可以先以某种方式执行文件,然后获取其内容?或者以另一种方式抓住他们的内容,这种方式仍然会被执行?

文件

的config.php

$priColor = '#000';

基stylesheet.php

/* CSS header defined */
/* config.php included */
body{
    background-color: <?= $priColor ?>;
}

特异性stylesheet.php

/* CSS header defined */
/* config.php included */
.site-specific-element{
    background-color: <?= $priColor ?>;
}

精缩-stylesheets.php

// Set files that must be minified
$cssFiles = array(
    "base-styleseet.php",
    "specific-stylesheet.php"
);

// Get those files
$buffer = "";
foreach ($cssFiles as $cssFile) {
    $buffer .= file_get_contents($cssFile);
}

// Minify and echo them
minifyCSS($buffer);
echo $buffer;

的index.php

<link rel="stylesheet" href="minified-stylesheets.php">

3 个答案:

答案 0 :(得分:4)

我认为您需要做的是将文件包含在PHP缓冲区中,然后缩小缓冲区

// Set files that must be minified
$cssFiles = array(
    "base-styleseet.php",
    “specific-stylesheet.php"
);

// Get those files
ob_start();
foreach ($cssFiles as $cssFile) {
    include($cssFile);
}

// Minify and echo them

$css = minifyCSS(ob_get_clean());
echo $css;

答案 1 :(得分:1)

file_get_contents()将逐字读取文件的内容并将内容放入字符串中。您需要使用的是include()。这将解析文件的内容。

答案 2 :(得分:1)

您已熟悉ob_start()方法。

但我会展示一个更好的选择(并且更快):

您的主文件:

$cssFiles = array(
    "base-styleseet.php",
    "specific-stylesheet.php"
);

$buffer = "";
foreach ($cssFiles as $cssFile) {
    $buffer .= include($cssFile);
}

minifyCSS($buffer);
echo $buffer;

嗯,这里没什么。刚刚添加include() ......

但除非你喜欢这样,否则它不会按预期工作:

  1. 创建包含所有内容的heredoc
  2. 退货
  3. 使用基本样式表作为示例:

    <?php
    
        //remember to escape the { chars        
        return <<<CSS
    /* CSS header defined */
    /* config.php included */
    body\{
        background-color: $priColor;
    
        /* with an array */
        background-image: url('{$images['print']}');
        /* or */
        background-image: url('$images[print]');
    \}
    CSS;
    

    *忽略破解的语法高亮

    你已经完成了。

    不再讨厌ob_start() !!!

    此外,CSS评论使用/* */语法,//将被评估为无效的CSS选择器。