使用PHP扩展缩小CSS

使用PHP扩展缩小CSS,php,minify,Php,Minify,如何创建包含CSS内容的.php文件? 目前我得到一个400错误 通常我这样叫迷你 <link rel="stylesheet" type="text/css" href="{$workspace}/min/f=workspace/css/common.css" /> 编辑 答案是更改minify源代码,但我应该做什么更改 换句话说。。此调用应作为CSS工作和处理 <link rel="stylesheet" type="text/css"

如何创建包含CSS内容的
.php
文件?
目前我得到一个
400
错误

通常我这样叫迷你

<link rel="stylesheet" type="text/css" 
       href="{$workspace}/min/f=workspace/css/common.css" />

编辑

答案是更改minify源代码,但我应该做什么更改

换句话说。。此调用应作为CSS工作和处理

<link rel="stylesheet" type="text/css" 
      href="{$workspace}/min/f=workspace/css/common.php" />

也许有一个可选的声明

<link rel="stylesheet" type="text/css" 
href="{$workspace}/min/f=workspace/css/common.php&type=css" />

编辑


我在这里创建了这个项目@

不,因为minify严重依赖于文件扩展名(css、js、?),所以很难做到这一点。例如,它用于确定HTTP头发送给客户端的内容(应用程序/x-javascript、文本/css),要使用的minifier类,解析此文件是否安全等

但我几乎可以肯定,这种情况是可以避免的。你能描述一下你为什么要这样做吗

如果你坚持这样做,我可以提出一些肮脏的黑客使其工作,但它需要改变minify的源代码,所以我真的不知道这是否是一个好主意

Upd:

没有什么好方法可以改变这个源代码:它的结构非常糟糕。在minify v2.1.3中,您只需更改以下内容:

路径:lib/Minify/Controller/Base.php##Minify#u Controller_Base::_fileIsSafe()

-->

路径:lib/Minify/Controller/MinApp.php##Minify_Controller_MinApp::setupSources()

-->

路径:lib/Minify/##Minify_源代码::_构造()

-->


一切都会正常工作,但您必须在配置中仔细设置$min_serveOptions['minApp']['allowDirs'],因为任何用户都可以查看此目录中的任何php文件。

您的CSS+php脚本只有在从服务器请求并由php解析后才会输出CSS。Minify直接从服务器读取文件,跳过HTTP请求。因此,我看到两条道路:

  • 不太理想[?]:缩小下载CSS,如下所示:

    <link rel="stylesheet" type="text/css" href="{$workspace}/min/f=http://site.com/workspace/css/common.php" />
    
    使用,您可以自由地做任何事情,也可以用php脚本“处理”stlyesheet,然后动态缩小它:这非常简单,猜猜看,它只是一个文件

    另一种方法是,不要使用任何PHP脚本来处理css文件或在css文件中执行一些逻辑操作,相反,您可以先分离小的css文件,然后通过构建新的缓存文件加载任何需要的内容,或者合并并输出链接标记

    但是,如果您现在在common.php(输出css的php文件/脚本,是吗?)

    在同一文件的第67行,添加一个条件:

    最后,将getContent()函数替换为:

    • 您还需要将common.php更改为Minify spec,因此现在,您的common.php应该如下所示:
    您需要将所有样式表作为字符串,并将其分配到
    $content
    变量中


    是的,有一个,它工作得很好:

    API非常简单:


    运行时缩小后有什么特殊原因吗?为什么这样做会产生额外的服务器开销(即使你正在缓存它,它至少还是一个数据库查询或文件读取,这是不必要的..额外的服务器开销?它不会产生任何影响也许我误解了你想要实现的目标..你在PHP文件中有CSS内容,你想动态缩小,对吗?然后服务器开销隐式地与你的建议相关联解决方案。您将通过生成的PHP进程运行代码来缩小脚本。我还没有看到您无法使用YUI压缩器、minify等编写快速生成脚本以生成所需内容的情况。然后,您通过web服务器提供文件,而不必触碰您的PHP进程。当然,这只是我的问题。请始终查看ing easy win cycle sparing here'n there;)我更新了我的帖子,它应该可以工作,我怀疑它是否可以做得更好,因为源代码的结构不好,但我再次强烈建议您不要这样做。请您写出选项2好吗?我对类不太熟悉:(//理想情况下,我可以下载一个带有minify的zip……这肯定会为您赢得奖金。非常感谢!您能写出选项2吗?我对课程不太熟悉:(//理想情况下,我可以下载一个带有minify的zip。这肯定会为您赢得奖金。非常感谢!请检查编辑后的答案,注释框对代码不起作用。
    
    return in_array(strrev($revExt), array('js', 'css', 'html', 'txt', 'php'));
    
    preg_match('/^[^,]+\\.(css|js)(?:,[^,]+\\.\\1)*$/', $_GET['f'])
    
    preg_match('/^[^,]+\\.(css|js|php)(?:,[^,]+\\.\\1)*$/', $_GET['f'])
    
    case 'css'  : $this->contentType = 'text/css';
    
    case 'php': case 'css': $this->contentType = 'text/css';
    
    <link rel="stylesheet" type="text/css" href="{$workspace}/min/f=http://site.com/workspace/css/common.php" />
    
    <pre>
    <strong>LESS in</strong>
    <?= file_get_contents('workspace/less/common.less') ?>
    - - - - -
    <strong>CSS out</strong>
    <?
    require 'workspace/php/lessc.inc.php';
    $lc = new lessc();
    $contents = file_get_contents( 'workspace/less/common.less' );
    $css = $lc->parse( $contents );
    echo $css;
    ?>
    <strong>Minified</strong>
    <?php
    require 'workspace/min/lib/Minify/CSS/Compressor.php';
    echo Minify_CSS_Compressor::process($css);
    ?>
    </pre>
    
    <?php 
        $style = '';
        $bodyStyle =  'body {
                background-color: #000;
                margin: 40px;
                font: 13px/20px normal Helvetica, Arial, sans-serif;
                color: #fff;
                }';
        // I assumed you are about proccesing something here..
        // ...
        // Then you merged all style into one string, and output it as css file
        $style = $bodyStyle + $otherStyle + $whateverStyle;
        header('Content-Type: text/css');
        echo $style;
    ?>
    
    /**
     * @var bool
     */
    public $isPHP = FALSE;
    
    case 'php'  : $this->isPHP = TRUE;
                  $this->contentType = 'text/css';
                  break;
    
    public function getContent()
    {
        if($this->isPHP)
        {
            include($this->filepath);
        }
        else 
        {
            $content = (null !== $this->filepath)
                    ? file_get_contents($this->filepath)
                    : ((null !== $this->_content)
                        ? $this->_content
                        : call_user_func($this->_getContentFunc, $this->_id)
                    );
        }
    
        // remove UTF-8 BOM if present
        return (pack("CCC",0xef,0xbb,0xbf) === substr($content, 0, 3))
            ? substr($content, 3)
            : $content;
    }
    
    <?php 
        //$style = '';
        $bodyStyle =  'body {
                background-color: #000;
                margin: 40px;
                font: 13px/20px normal Helvetica, Arial, sans-serif;
                color: #fff;
                }';
        // I assumed you are about proccesing something here..
        // ...
        // Then you merged all style into one string, and output it as css file
        // $style = $bodyStyle + $otherStyle + $whateverStyle;
        // header('Content-Type: text/css');
        // echo $style;
        $content = $bodyStyle + $otherStyle + $whateverStyle;
    ?>
    
    <?php
    echo cssmin("body { .... } .rule {  } .rule2 { color: #fff; }");