1

ここでは、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()がコンテンツである場合、ブラウザーは最初に圧縮されたコンテンツを認識できないことindex.phpです。

streamcontroller.php から抽出:

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

今、私の質問は次のとおりです。

  1. streamcontroller.phpMVCから取り出して、何をお勧めしますか? たとえばstreamer.php隣にindex.phpいる?

  2. index.phpの関数にチェック機能を追加しreplace_tabs_newlines($content)て、ブラウザが指しているかどうかを確認streamcontroller.phpし、縮小ジョブを実行しないようにしますか?

  3. ob_start()何かを出力しようとしているときに のコールバックが実行されるのを止める方法はあるのでしょうか? すなわち:前readfile()streamcontroller.php

  4. このような状況で非常に受け入れられる新しいアイデアに感謝します。

4

1 に答える 1

1

ob_end_cleanの前にを追加するのはどうですかreadfile

于 2013-02-05T07:36:30.210 に答える