2012-04-27 6 views
1

次のコードでは、レイアウトファイルをバッファします。 ローカルサーバー上で正常に動作しますが、ライブサーバー上では、PHPが放棄されるまでバッファリングを維持します。この結果、プログレスバーが回転し、ページ内のjavascriptが遅れて実行されます。 ob_end_clean()のように見えますが、実際にバッファリングを終了しません。ob_end_cleanの後にphpバッファが停止しない

フラッシング後にスペースをエコーすると、バッファが停止し、すべて正常に機能します。しかしこの文脈では、スクリーンに何も印刷しません。

ob_start(); 
require($layoutfile); 
$return = ob_get_contents(); 
if(ob_end_clean()) echo " "; 
return $return; 

誰かがこれに遭遇しましたか?バッファの問題を持つ人のため

+0

あなたは 'ob_flush'を使ってみましたか? – kuba

+0

@Charlesはいはタイプミスです – waterschaats

+0

@kuba 'ob_flush'で '$ return'を削除しますvar – waterschaats

答えて

0

はあなたがどの層に見にecho ob_get_level()を試してみてください。この関数が0より多くを返す場合、あなたはまだバッファの中にいます。

は、次の手順を実行し、すべての層を閉じるAN問題を回避するには:

while (@ob_end_clean()) { 
    // do nothing 
} 

これは、すべてのレイヤーを削除します。

この後は、ob_flush()の代わりにflush()としても移動できます。

あなたはそれがあなたの他のサーバで動作すると述べました。 hereのようにgzip圧縮を有効にしましたか?私のために正常に動作します

0

コードは次のとおりです。助けることができる

<?php 

include "../connect/connectdb.php"; 

$txtIdCaso = $_GET['WWW_id_caso']; 

$sql = "SELECT * FROM caso_solicitud 
     WHERE id_caso = '".$txtIdCaso."'"; 


$result = mysqli_query($conn, $sql); 
$row = mysqli_fetch_array($result); 

header('Content-Description: File Transfer'); 
header('Content-type: "'.$row['tipo_archivo'].'"'); 
header('Content-Disposition: attachment; filename="'.$row['nombre_archivo'].'"'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header("Content-length: ".$row['longitud_archivo']); 

while (@ob_end_clean()) { 
// do nothing 
} 

die($row['doc_solicitud']); 
?> 

希望。私はいくつかのタイプのフォーマットをテストし、うまく動作します。

ご挨拶。

0

ob_end_cleanの後に出力があると思います。 die/exit/headerを使用すると、正常に動作します(HTMLには何も表示されません)。私はちょうど同様の問題に遭遇したが解決策を得た。 出力バッファリングはクライアント側への出力を処理し、関数は実行されるまですべてをクリーンアップします。

関連する問題