RE: [PHP-WIN] "Headers already sent" error message
| From: | Richard Black | Date: | Thu, 22 Aug 2002 16:44:34 +0000 |
| Subject: | RE: [PHP-WIN] "Headers already sent" error message | ||
| References: | 1 | Groups: | php.windows |
| Request: | Send a blank email to php-windows+get-15460@lists.php.net to get a copy of this message | ||
First impression...
From your code:
echo "$type, $filename";
header ("Content-Type: $type; Content-Disposition: attachment;
filename=$filename" );
The echo is sending output to the browser, and since it does this before
the header command the header doesn't work.
Try taking out that echo and see what happens.
HTH,
Richy
==========================================
Richard Black
Systems Programmer, DataVisibility Ltd - http://www.datavisibility.com
Tel: 0141 435 3504
Email: rblack@datavisibility.co.uk
-----Original Message-----
From: R.S. Herhuth [mailto:ronherhuth@pop.mindspring.com]
Sent: 22 August 2002 17:41
To: Richard Black
Cc: ronherhuth@mindspring.com; php-windows@lists.php.net
Subject: Re: [PHP-WIN] "Headers already sent" error message
Here is the code for the page:
<?
// BEGIN FUNCTIONS -------------------------------------------
// message types
$type = array("text", "multipart", "message", "application",
"audio",
"image", "video", "other");
// message encodings
$encoding = array("7bit", "8bit", "binary", "base64",
"quoted-printable", "other");
// parse message body
function read($structure)
{
global $type;
global $encoding;
// create an array to hold message sections
$ret = array();
// split structure into parts
$parts = $structure->parts;
/*
iterate through parts
and create an array whose every element
represents one part
each element is itself an associative array
with keys representing the
- part number
- part type
- encoding
- disposition
- size
- filename
*/
for($x=0; $x<sizeof($parts); $x++)
{
$ret[$x]["pid"] = ($x+1);
$this = $parts[$x];
if ($this->type == "") { $this->type = 0; }
$ret[$x]["type"] = $type[$this->type] . "/" .
strtolower($this->subtype);
// default to 7bit
if ($this->encoding == "") { $this->encoding = 0; }
$ret[$x]["encoding"] = $encoding[$this->encoding];
if(isset($this->bytes))
{
$ret[$x]["size"] = strtolower($this->bytes);
}
if(isset($this->disposition))
{
$ret[$x]["disposition"] =
strtolower($this->disposition);
if (strtolower($this->disposition) ==
"attachment")
{
$params = $this->dparameters;
foreach ($params as $p)
{
if($p->attribute == "filename")
{
$ret[$x]["name"] = $p->value;
break;
}
}
}
}else
{
$ret[$x]["disposition"] = "NULL";
}
}
return $ret;
}
// iterate through object returned by parse()
// create a new array holding information only on message attachments
function get_attachments($arr)
{
for($x=0; $x<sizeof($arr); $x++)
{
if($arr[$x]["disposition"] == "attachment")
{
$ret[] = $arr[$x];
}
}
return $ret;
}
// END FUNCTIONS
------------------------------------------------------------------
$title = "Download Attachment";
$id=$_GET['id'];
$pid=$_GET['pid'];
$mailserver="mail.myurl.com";
$username="user";
$password="pass";
$inbox = imap_open("{" . $mailserver
."/imap}INBOX",$username,$password);
// parse message structure
$structure = imap_fetchstructure($inbox, $id);
$sections = read($structure);
// look for specified part
for($x=0; $x<sizeof($sections); $x++)
{
if($sections[$x]["pid"] == $pid)
{
$type = $sections[$x]["type"];
$encoding = $sections[$x]["encoding"];
$filename = $sections[$x]["name"];
}
}
$attachment = imap_fetchbody($inbox, $id, $pid);
// send headers to browser to initiate file download
echo "$type, $filename";
header ("Content-Type: $type; Content-Disposition: attachment;
filename=$filename" );
if ($encoding == "base64")
{
// decode and send
echo imap_base64($attachment);
}
else
{
// add handlers for other encodings here
echo $attachment;
}
// clean up
imap_close($inbox);
?>
Richard Black wrote:
>
> Any output before the header() call will cause this message.
>
> I would guess that the logic checks are outputting something?
>
> HTH,
>
> Richy
>
> ==========================================
> Richard Black
> Systems Programmer, DataVisibility Ltd -
> http://www.datavisibility.com
> Tel: 0141 435 3504
> Email: rblack@datavisibility.co.uk
>
> -----Original Message-----
> From: R.S. Herhuth [mailto:ronherhuth@pop.mindspring.com]
> Sent: 22 August 2002 17:15
> To: php-windows@lists.php.net
> Subject: [PHP-WIN] "Headers already sent" error message
>
> I'm having a bit of trouble understanding why I'm getting a "Cannot
> add header information; Headers already sent" error message. I have
> several pages where I'm using the headers with no problems...but this
> single page I keep getting the error. The only real difference is
> that this page has a bunch of logic checks before it calls the header
> command.
>
> What is the cause of this error? what sort of things should I check
> for?
>
> I'm lost,
> Ron
>
> --
> PHP Windows Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
> --
> PHP Windows Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php