Что может привести к тому, что заголовки уже отправлены, и как мне их отследить? - PullRequest
3 голосов
/ 02 марта 2010

Во-первых, я ни в коем случае не новичок в PHP или в отправке заголовков. Однако я получаю следующую ошибку:

Warning: Cannot modify header information - headers already sent in /var/www/oraviewer/download/scripts/start.inc on line 30

Warning: Cannot modify header information - headers already sent by (output started at /var/www/oraviewer/download/scripts/start.inc:30) in /var/www/oraviewer/download/scripts/start.inc on line 31

Warning: Cannot modify header information - headers already sent by (output started at /var/www/oraviewer/download/scripts/start.inc:30) in /var/www/oraviewer/download/scripts/start.inc on line 32

3 ошибки, потому что я пытаюсь отправить 3 заголовка.

Я просмотрел все включенные файлы, проверил их на предмет возможной отправки заголовков, новых строк, текста и т. Д. И ничего.

Я привыкла к такого рода ошибкам, сообщая вам, откуда пришел первый отпечаток (см. 2 ошибки, чтобы понять, что я имею в виду), но первая ничего мне не говорит.

Насколько мне известно, ни один из этих файлов не изменился с тех пор, как они работали в последний раз, и, используя резервную копию, они работают нормально. К сожалению, если я заменю их файлами резервных копий, проблема не исчезнет. Я бы выложил файлы, но их около полдюжины, что составляет пару сотен строк.

Итак, мой главный вопрос: что может быть причиной этого, и как я могу отследить, откуда это происходит?

РЕДАКТИРОВАТЬ: 3 строки на 30-32, которые являются конкретные печатные заголовки

header('Content-Type: application/octet-stream');
header('Content="text/plain;charset=ISO-8859-1"');
header('Content-Disposition: attachment; filename="'.$fileName.'"');

Если я закомментирую один, ошибки начинаются со следующего, поэтому я знаю, что это что-то перед этим.

Код перед файлом start.inc в файле getExtract.php:

<?php
include_once "start.inc";

Файл start.inc:

<?php
$extract = $_GET['extract'];
$debug = $_GET['debug'];
include "../../lib/conf.inc";
include $mainsitedir."/lib/db_connect.inc";
include $mainsitedir."/lib/utils.inc";
include "../queries/get_output_file_name.php";

$db_link = connect_db();
$query = "SELECT * FROM extract_wxo_list WHERE extract_id='{$_GET['extract']}'";
$file = db_get_row(db_query($db_link, $query));
$fileName = $file['OUTPUT_FILE_NAME'];

if (!empty($_GET['versiondate'])) {
    $sql = "SELECT * FROM version_history WHERE version_start_date = '{$_GET['versiondate']}'";

    $vquery = db_query( $db_link, $sql );
    if ($vrow = db_get_row($vquery)) {
        $splitName = preg_split("/[.]/", $fileName, 2);
        $fileName = $splitName[0].'_'.str_replace(".", "", $vrow['VERSION']).'.'.$splitName[1];
    }
}

if ( $_GET['debug'] ) {
    echo "$fileName<br /><pre>";
} else {
    header('Content-Type: application/octet-stream');
    header('Content="text/plain;charset=ISO-8859-1"');
    header('Content-Disposition: attachment; filename="'.$fileName.'"');
}
date_default_timezone_set('UTC');
?>

4 включения в верхней части совпадают с другими файлами. Они также используют заголовки аналогичным, но менее общим способом, поэтому я могу исключить их как причину.

Ответы [ 2 ]

1 голос
/ 02 марта 2010

Проверьте, не покинули ли вы пробелы до <?php Или попробуйте использовать ob_start (); и ob_end_flush ();

<?php
ob_start(); //Starts output puffer
echo "texttest";
if($bala==1) {
header("location:http://www.testdomain.org");
}
ob_end_flush(); //ends output puffer
?>
0 голосов
/ 02 марта 2010

Посмотрите на /var/www/oraviewer/download/scripts/start.inc строку 30. Скорее всего, это эхо, печать, сброс или сброс чего-либо в браузер.

...