ob_start + compress中断了服务文件输出

时间:2013-02-05 07:30:40

标签: php

我在这里处理MVC模式。

我有index.php作为基本文件,控制器位于/controllers/目录中。如果您转到/stream/xIEjeEJWqs,例如/controllers/streamcontroller.php将会被执行。

index.php这样开始,它会缩小即将发送到浏览器的输出:

<?php

function replace_tabs_newlines($content)
{
    require_once 'includes/min/lib/Minify/HTML.php';
    require_once 'includes/min/lib/Minify/CSS_MODIFIED.php';
    require_once 'includes/min/lib/JSMin.php';
    $content = Minify_HTML::minify($content, array(
        'cssMinifier' => array('Minify_CSS', 'minify'),
        'jsMinifier' => array('JSMin', 'minify')
    ));
    return $content;
}

ob_start('replace_tabs_newlines');
ob_implicit_flush(0);
...

所以这段代码会减少输出的内容,例如:

<html>
    <head>
        <title>
            Minifies..
        </title>

变为<html><head><title>Minifies..</title>

因此,问题是streamcontroller.php必须输出PNG,MP4等内容,而当它readfile() - sa内容时,浏览器无法识别由index.php压缩的内容。开始。

从streamcontroller.php中提取:

case "png":
  header('Content-type:image/png');
  header('Content-Length: ' . filesize($file));     
  readfile($file);
  exit;
break;

现在我的问题如下:

  1. 你会推荐什么,从MVC中取出streamcontroller.php?例如streamer.php旁边有index.php吗?

  2. index.php的{​​{1}}函数中添加检查功能以检查浏览器是否指向replace_tabs_newlines($content)并且不执行缩小工作?

  3. 也许有一种方法可以阻止streamcontroller.php的回调在输出某些内容时被激活?即:ob_start()中的readfile()之前?

  4. 我会欣赏在这种情况下被广泛接受的新想法。

1 个答案:

答案 0 :(得分:1)

如何在readfile

之前添加ob_end_clean