2016-05-03 6 views
0

が、私はのような基本的なHTMLテンプレートを印刷し、中央のindex.phpを持って送信され。ユーザーとしてログインすると、すべての妥当性チェックの後、私はheader()経由でリダイレクトする必要があります。しかし、いくつかのHTMLがすでに印刷されているので、私はできません。 OK、問題ありません。私はindex.phpをob_start()で始まり、ob_end_flush()で囲みました。それの終わりに。私はob_start()ob_end_flush()を使用していても、まだヘッダにすでにエラーが送信されています。どうして?注:私は中心に$smarty->display()によって表示されるいくつかのテンプレートのSMARTYテンプレートengingeを使用しています。ヘッダがすでにでものob_start使用している場合()

誰でもここにこのようなことが起こるのですか?

ありがとうございます!

EDIT:実際のコード:

<?php 
session_start(); 
ob_start(); 
/** 
* Main index.php, root template 
*/ 

?> 

    <!DOCTYPE HTML> 

    <?php 
    error_reporting(E_ALL); 
    ini_set("display_errors", 0); 
    ini_set("log_errors", 1); 
    ini_set("error_log", "logs/ERROR_LOG.txt"); 

EDIT 2:

は、サイトのナビゲーションが含まれていnav.phpで2つの変化に問題を絞り込むことがあります。私は単純に(最後のコミットと実際のコード以降)を加え

if($user->hasPermissionFor("specialsite")) { 
    ?> 

    <li><a href="...">MyLink</a></li> 

    <?php 
} 

$smarty->display("GENERAL_LANGUAGE_PICKER.tpl"); 

GENERAL_LANGUAGE_PICKER.tpl言語を選択するいくつかの言語PNG画像を示す、単純なHTMLテンプレートでナビゲーションはの束であります。特にない。このコードを使用すると、header()の問題のためにログイン/ログアウト時にサイトが破損します。私はこのコードを使用しない場合、すべて正常に動作します。なぜならば、とob_start()およびob_end_flush()を組み合わせて使用​​すると、これは壊れますか?私は意味:私は単にそれを動作させることはできません :私はob_start()ob_end_flush()ものを囲む全体の内部の特定の部位で$smarty->display() LOTを使用していると私は...

EDIT 3を中断されません。これは、再び単にプロジェクトからコピーしたコードです:

<body> 

<nav class="navbar navbar-inverse navbar-fixed-top" id="tourstep-two"> 
    <?php 
    // Generate nav for this file, here i call nav.php in which i have 2x 
    // $smarty->display() which will break the code 
    include_once("php/intern/nav.php"); 
    ?> 
</nav> 

<header style="background: url(images/layout/banner.png) no-repeat" class="banner"> 
    <img class="img-responsive img-center" 
     src="images/layout/logo.png" 
     alt="Logo"> 
</header> 

<section id="tourstep-six"> 
    <div class="container"> 
     <div class="col-lg-12"> 

     <?php 
     // Here i am in the main content area. When using this $smarty->display everything is FINE and it does work 
     $smarty->display("templates/GENERAL_SUCCESS.tpl"); 

[OK]を、私は$ smarty->ディスプレイ()を呼び出すしたい2つの部分がありますので。 nav.phpの内部でナビゲーションをレンダリングし、メインコンテンツ領域の先頭に一度移動します。主なコンテンツ分野ではIT WORKSでこれを行うとエラーは発生しません。一度私はnav.phpの中でこれを試してみると、それはちょうど壊れ、HTMLはバッファに書き込まれず、書かれて、私のheader()コールが壊れるでしょう。なぜ私は考えていない。私がnav.php内の$ smarty-> display()呼び出しをレンダリングしているHTMLに置き換えれば、動作します。ただし、呼び出しではバッファに書き込まれません。ここでスマートにやっているのはなぜですか?また、nav.phpの中に書かせてもらえませんか?どんな助けにも感謝しています...

+0

出力バッファリングを開始する場所にコードを表示してください。空白行でさえも、その前には絶対に何も来なければならないことに注意してください。 – Chris

+0

'session_start()'の前に 'ob_start()'を呼び出そうとしましたか? 'session_start()'は、クッキーヘッダーを送るでしょう。 – Chris

+0

@Chris:はい、あります。何も変わらない。私はしかし、ちょうどSmartyについて具体的な何かに問題を絞り込んだ。メインポストを更新します。 – BoA456

答えて

1

同じ問題を抱えている人は誰ですか:いいえ、私は自分のせいではありませんでした。修正されたものを更新すると、ここにその説明があります:https://github.com/smarty-php/smarty/issues/187 将来的に人が挑戦しているのを見ると、downvotingを止めてください。問題はどこかにあるようです。

関連する問題