2009-08-04 25 views
0

昨日、 "PHP移動後に送信されたヘッダー"というメッセージが表示されましたが、問題を修正してもまだ変更が加えられていません。PHPセッション - 警告

私は別の会社によって作られたコードに取り組んでいます!私は自分のサーバーからサイトを移動して私たちの上に置いていませんが、私の問題はセッションが新しいサーバー上のページで機能していないことです!ヘッダをすでに(出力が で開始送ら/ホーム/ com10002/public_htmlの - セッション キャッシュリミッタを送信できません:

警告::にsession_start()[function.sessionスタート]

私は警告を取得しています/bank/index.php:28)ライン上の /home/com10002/public_html/bank/includes/quickform.php 3

私のindex.phpで

include('includes/functions.php'); 

$activeTab = "navhome"; 
$sent = false; 

$title = (isset($_GET['title']))? mysql_real_escape_string($_GET['title']) : 'Home';  
$title = str_replace('-',' ', $title); 

if($title != '') { 

    $sql = "SELECT * 
      FROM contents 
      WHERE name LIKE '%$title%' 
      LIMIT 1"; 

    $result = @mysql_query($sql);  
    $row = mysql_fetch_assoc($result);  
} 

//Set page title 
$pagetitle = (isset($row['name']) && $title != 'Home')? ucwords($row['name']) : "Bank Charges"; 

HTML..HEAD..METAデータとタイトルTAGS..ECT

include('includes/header.php'); 

    <div class="textarea"> 
     <?php include('includes/rightcol.php'); ?> 
     <div id="contentvideo" style="display:none;"></div> 
     <h1><?=$row['h1'];?></h1> 
     <h2><?=$row['h2'];?></h2> 
     <?=$row['intro'];?> 

     <?php include('includes/quickform.php');?> 

     <?=$row['page_content'];?>   
    </div> 

    <?php include('includes/subnav.php'); ?>  

とquickform.php

if($_POST) { 
    session_start(); 
    $error = false; 
    $captcha = false; 
    $sent = false; 
etc....... 

にこれは自分のコードであり、現在そのサーバー上で正常に動作します!

1)session_start()を先頭に移動しました。index.php 2)両方のページにセッションを置いています。それは私の新しいバージョンでは、これは彼らがセッションを置く理由としてわからない私のコードイムではありませんのでサイトはwww.compensation-claims.org/bank

であるである

index.phpの中にいたときに、セッションの前に空白を削除 3) quickform.php

答えて

0

に迅速かつ汚い修正がphp.iniファイルを変更する(とApacheを再起動する)ことで、サーバー上output_bufferingをアクティブにするだろう、このような何か設定:

output_buffering=4096 

問題は、すでに1文字しか送信されていないとHTTPヘッダーを送信できないためです。このディレクティブを使用すると、4kのデータがバッファされる前に何も送信しないことを指定します。

これは通常、.phpファイルの先頭と末尾にある空白をバッファするのに十分であり、この種の問題を引き起こすのに十分です。

注:これはすばやく修正された修正ですが、アプリケーションの動作に役立つ場合があります。もちろん

、最善の解決策は、PHPスクリプトのを開始session_startへの呼び出しを移動するためのsession_start /またはを呼び出す前に送信された出力のいずれかの種類を削除することです。多くの場合に役立ちます
ことの一つは、あなたがそれの後に空白を持っていないので、それはもう(はい、それは完全に有効です)

存在しないとして、.phpファイルの最後に閉じ?>タグを削除することです

header.phpにおいて:

    EDIT所定のコードに第二の外観を有する後0

  • あなたは、いくつかの出力が既に、ブラウザに送信されたとして、あなたはsession_start
    • とのセッションを開始しているだけにして、いくつかの出力(DIV「テキストエリア」のようなHTMLコード、)
    • をやっていますsession_startはクッキーを作成することができず、失敗します。

ので、あなたが本当にできるだけ高いのsession_startを移動する必要がありますが、それを右index.phpの冒頭に、例えば、または、おそらく、どこでも得ることができます。functions.php ...

...しかし、一部のHTML出力の途中には絶対にありません!

この問題を、私が思う...
幸運、とにかく解決する必要があります(私が以前にoutput_bufferingについて言ったことは、おそらく、この(良くない)コードが前に働いていた理由です)!

+0

ありがとうございますが、私のホスティングはphp.iniファイルを編集できません。 – Ian

+0

ああ、あまりにも悪い:-(ob_startなどを使っているかもしれませんか?あるいは、不要なスペースを取り除くためにすべてのファイルを調べなければならないかもしれません:-( 脇の下として: .php 28行目?この行を見てみると、この特定の状況では、出力を引き起こすものです;-) まだ試してみるべきではありません:session_startを "high "あなたがすることができます:それは最初に行われたことの一つでなければなりません(そう、それは呼び出されたページの冒頭に置く) –

+0

そして私はより多くの情報を提供するために私の答えを編集しました。あなたの問題 :-) –

0

Windowsでのキャリッジリターンの処理方法が異なるため、UNIX文字のような音がブラウザに送信されています。ヘッダーを送信する前に送信された1つ以上の文字により、このエラーが発生します。代わりに、他のサーバが出力をキャプチャしてクライアントに送信する前に解析していたphp.iniディレクティブによって出力バッファリングを有効にしている可能性があります。これは、圧縮の理由で可能性があります。私は、php.iniの構成を比較し、gzip圧縮が移動前にApacheサーバーで有効になっているかどうかを確認することをお勧めします。

0

スクリプト内でini_set()関数を使用して、php.iniの設定値を設定することができます。

ini_set('output_buffering', 4096);