Headers already sent

rw712 - April 26, 2006 - 01:09
Project:Aggregator2
Version:4.6.x-1.x-dev
Component:Code
Category:bug report
Priority:critical
Assigned:Unassigned
Status:needs review
Description

This occurs in the aggregator2 modules when doing a refresh in common.inc:265 - header('Location: '. $url); I believe the problem is due to having a $base_url set but it is not processed correctly in bootstrap.inc:148. The strlen($parts['path']) never checked to make sure $parts['path'] is set. The fix is quite simple:

$base_root = substr($base_url, 0, strlen($base_url) - (isset($parts['path']) ? strlen($parts['path']) : 0));

AttachmentSize
bootstrap_18.patch569 bytes

#1

adixon - June 15, 2006 - 14:15
Project:Drupal» Aggregator2
Version:4.7.0-rc3» HEAD
Component:base system» Code

this fix is already in bootstrap.inc as:

    $parts = parse_url($base_url);
    if (!isset($parts['path'])) {
      $parts['path'] = '';
    }
    $base_path = $parts['path'] . '/';

on the other hand, aggregator2 is still crapping out on a refresh sometimes, I suspect it's in the aggregator2 code somewhere (perhaps getting the feed information via http outputs a header somehow?).

Conclusion - i'm changing this to an aggregator2 module bug.

#2

adixon - June 15, 2006 - 15:25
Status:active» needs review

Okay, turns out the refresh bug is in fact in aggregator2, i've attached a patch that fixes it.

Commentary:

It's not so critical because normally the refresh is handled by the cron, and the refresh is actually working, it just fails at the end with the drupal_goto() call. The problem is in the calls to flush() immediately before various sleep commands included in the feed parsing. I don't know why those flush commands are there, but they are generating headers that show up when I check with a header_sent (they seem to be empty headers). I tried putting ob_start() and ob_end_clean() around the flushes but that didn't work (because it was outputing headers, not content), but then i converted the flushes to ob_clean() and that solved it. I suspecting those flushes were there in error (you use the flush() trick if you're trying to use sleep as a way of animating output, i'm guessing they just got put in by copying from some sleep() function example).

AttachmentSize
agg2flush.patch.txt 690 bytes

#3

Bacteria Man - June 15, 2006 - 18:46

adixon,

Thanks for researching and resolving this issue. It has been hounding me for awhile.

My previous attempts in diagnosing the problem revealed that ob_get_length() was zero immediately before executing

drupal_goto('admin/aggregator2');

at the end of content_import_admin_refresh_feed(), yet the "headers already sent" message persisted.

I am beginning to suspect that this is a PHP 5 issue because I don't remember this occurring with PHP 4.x.

In any event thanks again.

#4

jimmychuang - August 7, 2006 - 11:00

Could you attach the correct files let me to replace the error one?

I have no idea about coding.

#5

dimitryous - September 1, 2006 - 13:39
Title:Fix for headers already sent» Headers already sent
Version:HEAD» 4.6.x-1.x-dev
Priority:normal» critical

warning: Cannot modify header information - headers already sent by (output started at /Library/WebServer/Documents/drupal-4.6.9/includes/database.mysql.inc:27) in /Library/WebServer/Documents/drupal-4.6.9/includes/common.inc on line 99.

MacOS 10.3.9
php 4.3.11
MySQL - 4.1.20-max
Apache 1.3.33
drupal-4.6.9

Cannot login after first user created:
warning: Cannot modify header information - headers already sent by (output started at /Library/WebServer/Documents/drupal-4.6.9/includes/database.mysql.inc:27) in /Library/WebServer/Documents/drupal-4.6.9/includes/common.inc on line 99.
warning: session_regenerate_id() [function.session-regenerate-id.html]: Cannot send session cookie - headers already sent by (output started at /Library/WebServer/Documents/drupal-4.6.9/includes/database.mysql.inc:27) in /Library/WebServer/Documents/drupal-4.6.9/modules/user.module on line 817.
warning: Cannot modify header information - headers already sent by (output started at /Library/WebServer/Documents/drupal-4.6.9/includes/database.mysql.inc:27) in /Library/WebServer/Documents/drupal-4.6.9/includes/common.inc on line 192.

Blank page ...

Do I have a chance to get all the stuff working ok if I UPGRADE?

 
 

Drupal is a registered trademark of Dries Buytaert.