session_start() のようなヘッダー情報を変更する関数と、「ヘッダーを変更できません」または「セッション キャッシュ リミッターを送信できません」という警告を生成する header() 関数の制限と、その理由と解決策を認識しています。PHP の「Headers already sent」エラーを修正する方法
私が知りたいのは、これらのエラーが発生したときに、php タグまたは HTML 出力の START の前に空白がないのはなぜですか? 通常、エラーは、ヘッダー関数の呼び出しの前に発生する HTML 出力の大きなブロックの途中で発生します。
これらの場合、警告を受け取る前に、未加工の HTML 出力の後、ヘッダー関数が実際に機能します。しかし、ある時点で、何かを変更するか、何かを追加すると、警告が表示され始めます。これは通常、多くの HTML 出力の後のスポットを指します。
これは、私が出力しているHTMLが通常、ある時点まで自動的にバッファリングされている(ob_start()が問題を解決する)と思わせます。その後、何かが出力を引き起こします。
私の header.php ファイル:
<!DOCTYPE html>
<html lang="en">
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
<head>
<!-- style sheets and includes here -->
</head>
<?php
session_start();
//error_reporting(0);
// some PHP code here for user checking / cookies
?>
<body>
<!-- some additional html here -->
<?php include("resources/main-nav.php"); ?>
別のファイルで:
<?php
include('pathto/header.php')
//This line works for a while and then stops, producing
// the "Warning: cannot modify headers" line
// The warning that this call produces names a line around 100
// inside the "main-nav.php" file
header('Location: index.php');
?>
このエラーが発生する場合は、DOCTYPE タグの header.php の先頭で発生するはずですが、かなりの量の HTML があり、出力は main- で始まると示されています。 nav.php.
理由を知りたいです。
ありがとう!