Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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文件的内容用于其他文件之前执行该文件? 处境_Php_Html_Css_Variables - Fatal编程技术网

如何在将PHP文件的内容用于其他文件之前执行该文件? 处境

如何在将PHP文件的内容用于其他文件之前执行该文件? 处境,php,html,css,variables,Php,Html,Css,Variables,我将HTML和CSS与PHP变量混合在一起,这样我就可以用一个配置文件管理很多设置。这一切都很好,但我正在尝试合并和缩小CSS现在。这就产生了一个问题 问题 因为PHP脚本不会被执行,所以变量不会回显到压缩表中。这是因为file_get_contents()将内容转换为字符串 问题: 是否可以先执行文件,然后获取其内容?或者以另一种方式抓取它们的内容,这样它们仍然会被执行 文件夹 config.php base-stylesheet.php index.php 将逐字读取文件内容并将内容放

我将HTML和CSS与PHP变量混合在一起,这样我就可以用一个配置文件管理很多设置。这一切都很好,但我正在尝试合并和缩小CSS现在。这就产生了一个问题


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


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


文件夹 config.php

base-stylesheet.php

index.php


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

我认为您需要做的是将文件包含到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;

您已经熟悉了
ob\u start()
方法

但我将展示一个更好(更快)的选择:

您的主文件:

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

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

minifyCSS($buffer);
echo $buffer;
嗯,这里没什么。刚刚在那里添加了一个
include()

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

  • 创建一个包含所有内容的
  • 还它
  • 以基本样式表为例:


    $priColor=#000
    #
    之后被注释掉?在我使用引号的实际文件中没有,在本例中忘记了引号。现在编辑。CSS/PHP混合使用单个文件。但不是在合并和压缩它们的时候。好的。。。谢谢你的澄清
    :S
    为什么不将数组与您希望的任何设置关联起来,并将其包含在内。我在编辑注释时有一点延迟。它有足够的内容成为一个有用的答案。所以,我用内容回答了这个问题。但是这样我就不能再缩小内容了,是吗?因为它已经被解析。或者在保存操作中解析它们(例如,在您的CMS中,样式被更新)。然后将解析后的内容存储在像
    base.timestamp.css
    这样的文件中。这样你就不必在加载页面之前总是解析CSS,这会加快加载速度。回答得很好。Ben对Stypon答案的评论也是如此,但只有一次,所以不是每个用户都需要等待文件生成。性能更好!哇,我要跳进去了!但假设它起作用,我明白为什么它更快了。Tx.@PepijnGieles不客气。我建议你在没有亲自尝试的情况下,不要轻易给出公认的答案。EaseTechnology的答案对你有用,你也试过了。如果这对你的处境更有利,你可以接受它(如果你愿意)。@pepijngiels令人讨厌,因为你用它来绕开语言的工作方式,但不是很好。这与使用
    include
    来获取http内容的网页报废相同。此外,如果使用gzip编码发送,可能会出现问题(由服务器自动发送,或由
    .htaccess
    设置)。为此,它将创建一个输出缓冲区,其中的内容将
    回送到浏览器。现在,想象一下,当我们开始处理输出缓冲区时会发生什么…@pepijngiels同样,如果include由于某种原因失败(例如,您拼错了一个文件),您将缩小错误消息的输出。现在,您将在CSS中看到一个非常奇怪的输出,您不知道这是什么。你现在做什么?或者想象一个变量拼错了,或者你忘了设置它。您将无法轻松调试带有缩小CSS内容的代码,该内容还试图缩小其中的一些HTML。您可以禁用错误消息,但这样您就不知道是否出了问题。@pepijngiels不客气。我真希望我教过你一些东西。作为一个额外提示:当你包含一个文件时,你可以返回任何东西。您可以返回字符串、数字、数组、对象。。。任何东西这经常用于配置。例如:
    
    
    /* CSS header defined */
    /* config.php included */
    .site-specific-element{
        background-color: <?= $priColor ?>;
    }
    
    // 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;
    
    <link rel="stylesheet" href="minified-stylesheets.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;
    
    $cssFiles = array(
        "base-styleseet.php",
        "specific-stylesheet.php"
    );
    
    $buffer = "";
    foreach ($cssFiles as $cssFile) {
        $buffer .= include($cssFile);
    }
    
    minifyCSS($buffer);
    echo $buffer;