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

Pep*_*les 8 html css php variables

情况

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


问题

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


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


config.php文件

$priColor = '#000';
Run Code Online (Sandbox Code Playgroud)

基stylesheet.php

/* CSS header defined */
/* config.php included */
body{
    background-color: <?= $priColor ?>;
}
Run Code Online (Sandbox Code Playgroud)

特定stylesheet.php

/* CSS header defined */
/* config.php included */
.site-specific-element{
    background-color: <?= $priColor ?>;
}
Run Code Online (Sandbox Code Playgroud)

精缩,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;
Run Code Online (Sandbox Code Playgroud)

的index.php

<link rel="stylesheet" href="minified-stylesheets.php">
Run Code Online (Sandbox Code Playgroud)

Ism*_*uel 1

您已经熟悉该ob_start()方法了。

但我会展示一个更好的替代方案(而且更快):

您的主文件:

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

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

minifyCSS($buffer);
echo $buffer;
Run Code Online (Sandbox Code Playgroud)

好吧,这里没什么。刚刚添加了一个include()...

但它不会按预期工作,除非你对每个文件都这样做:

  1. 创建一个包含所有内容的heredoc
  2. 把它返还

使用基本样式表作为示例:

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

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

minifyCSS($buffer);
echo $buffer;
Run Code Online (Sandbox Code Playgroud)

* 忽略损坏的语法高亮

你就完成了。

不再恶心了ob_start()!!!

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