0

正常に機能しているサイトがありますが、メイン ページ (index_3.php) を更新しただけで、エラー ログに 2 つの警告が表示されます。

[08-Oct-2013 11:36:09] PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /home2/mysite/public_html/mysubsite/index_3.php:7) in /home2/mysite/public_html/mysubsite/functions.php on line 12

[08-Oct-2013 11:36:09] PHP Warning:  session_regenerate_id() [<a href='function.session-regenerate-id'>function.session-regenerate-id</a>]: Cannot regenerate session id - headers already sent in /home2/mysite/public_html/mysubsite/functions.php on line 13

セッションが始まる前に何かがページ データを送信していることを理解するのに十分な調査を行いましたが、原因を突き止めることができないようです。functions.php は、このチュートリアル サイトの「Create PHP Functions」の下にあるものです。 http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL

また、index_3.php に読み込まれるのは、テーブルを配置するだけの get_opwire.php です。get_opwire.php の冒頭は次のようになります。

<?php
include 'db_connect.php';
include 'functions.php';
sec_session_start();

sec_session_start();functions.php にあるカスタム セッション開始です。

sec_session の順序を一番上に並べ替えようとしたり、それらをテーブルの周りに移動しようとすると、壊れます。Index_3.php は単なるメイン ページであり、送信フォームと get_opwire.php 用のインクルードを含むほとんどの html です。

誰かが私に問題を指摘するのを助けることができますか?

編集: index_3.php (1 行目から )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"/>
 <meta name="Generator" content="Xara HTML filter v.6.0.1.335"/>
 <meta name="XAR Files" content="index_htm_files/xr_files.txt"/>
 <title>index_3</title>
 <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
 <link rel="stylesheet" type="text/css" href="index_htm_files/xr_main.css"/>
 <link rel="stylesheet" type="text/css" href="index_htm_files/xr_text.css"/>
 <link rel="stylesheet" type="text/css" href="index_htm_files/custom_styles.css"/>
 <script type="text/javascript" src="index_htm_files/roe.js"></script>
 <!--[if IE]><script type="text/javascript" src="index_htm_files/prs.js"></script><![endif]--><!--[if !IE]>--><script type="text/javascript" src="index_htm_files/prs3.js"></script><!--<![endif]-->
 <script type="text/javascript">var xr_nextpage=""; var xr_transition=0; var xr_transitiontime=0;var xr_prevpage="index_2.htm"; var xr_btransition=0; var xr_btransitiontime=500;</script>
 <style type="text/css">.xr_pbd {position: absolute; border:none; left: 50%; margin-left: -380px;}</style>
</head>

編集 2: index_3.php 内のどこか

<html>
<body>
<div style="width:  480px;  height:  175px;  overflow:  auto;">
<?php include 'get_opwire.php'; ?>
</div>
</body>
</html> 
4

2 に答える 2

1

?>含まれているすべての php ファイルから終了タグを削除してみてください。

于 2013-10-09T01:17:58.230 に答える
0

セッション開始とセッション再生成 ID の前のどこかに何かがページに何かを置いています。ページに何もエコーまたは印刷していないことが確実な場合は、ファイルの 1 つの上部にある空白スペースである可能性があります。

編集1

一部のテキスト エディタ/ワード プロセッサは、エンコードが原因で上部に余分な非表示文字を含むファイルを保存します。プレーン テキスト エディターまたはコーディングに推奨されるテキスト エディター (Notepad++ など) で、ファイルのテキストをコピーして新しいファイルに貼り付けてみてください。

編集2

それで、それらは最も可能性の高い解決策でした....それは言います

output started at /home2/mysite/public_html/mysubsite/index_3.php:7

これは、出力が始まる index_3.php の 7 行目であることを意味します。おそらくそこにスペースがあるか、何らかのエラーが発生して出力が送信される可能性があります。

その目に見えない出力が本当に見つからない場合は、ob_startなどでバッファリングを使用して、すべての出力をキャッチできます。セッション開始前に ob_start を置き、後で ob_end_flush を使用してページを表示します。しかし、それは、知らないうちに出力を送信しているという事実に対する本当の修正ではありません。

編集 3:「出力なし」には、すべての HTML が含まれます。

PHP ブラケット <?php ?> 内にないファイルに何かがある場合は、それがカウントされます。index_3.php ファイルは HTML で始まります。それがアウトプットです。最初に get_opwire.php を実行する必要があります。

編集4

get_opwire.php にページ開始要素とテーブル出力の両方が含まれている方法に関しては、表示コードを機能コードから分離することをお勧めする理由の例です。次の 3 つのオプションがあります。

  1. 別々のファイルを用意してください。インクルードする page_start.php のようなファイルと、index_3.php の最上部にインクルードする session_start と、テーブルの場所にインクルードするテーブルを表示する display_table.php のようなファイルがあります。
  2. テーブルを関数に変換します。テーブル出力を関数内にラップし、get_opwire.php を index_3.php の最上部に含めてから、テーブルが必要な場所で関数を呼び出します。
  3. 出力バッファリングを使用します。出力バッファリングは、出力されたものをキャッチして、後で使用できるようにします。次のようになります。

index_3.php の上部:

 ob_start();
 include get_opwire.php;
 $table = ob_get_contents();
 ob_end_clean();

テーブルの場所:

 echo $table; 
于 2013-10-08T17:58:08.627 に答える