简体   繁体   中英

php header location attribute not working

I have a header location problem despite following all the advice I can find online. The mailer script sends the email(s) but I get a 'headers already sent' error relating to Line 29 which is {header("Location: $thanksURL");} and no redirect to the confirmation page. If I replace the header location code with an instruction to print a confirmatory message instead, it works, so there must be something about the header location code that the server doesn't like.

Here is the code:

<?php
ob_start(); 
$to = "msheath@btinternet.com" ; 
$from = $_REQUEST['email'] ; 
$name = $_REQUEST['name'] ; 
$headers = "From: $from"; 
$subject = "Request for Library Document"; 
$thanksURL = "http://www.postalhistory.org.uk/newsite/php/thankyou.php"; //confirmation page
$fields = array(); 
$fields{"name"} = "Name"; 
$fields{"address"} = "Address"; 
$fields{"email"} = "Email"; 
$fields{"tel"} = "Telephone No"; 
$fields{"author1"} = "First Author"; 
$fields{"title1"} = "First Title"; 
$fields{"author2"} = "Second Author"; 
$fields{"title2"} = "Second Title"; 
$body = "I would like to borrow the undermentioned book(s) from the PHS Library:\n\n"; foreach($fields as $a => $b){    $body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); } 
$headers2 = "From: The Librarian, Postal History Society"; 
$subject2 = "Thank you for contacting the Postal History Society"; 
$autoreply = "Thank you for your request. Somebody will get back to you as soon as possible, usually within 48 hours.";
if($from == '') {print "You have not entered an email, please go back and try again";} 
else { 
if($name == '') {print "You have not entered a name, please go back and try again";} 
else { 
$send = mail($to, $subject, $body, $headers); 
$send2 = mail($from, $subject2, $autoreply, $headers2); 
if($send) 
{header("Location: $thanksURL");} 
else 
{print "We encountered an error sending your mail, please notify webmaster@YourCompany.com"; } 
}
}
ob_end_flush()
?>

Go to http://www.postalhistory.org.uk/newsite/php/library.php to try it out for yourself.

Can anyone suggest what is wrong?

Mike

'headers already sent' means you've already sent something to the browser. This could be a whitespace somewhere. It could also be that your file is encoded in UTF-8 with BOM which means you've sent the BOM to the browser

Warning: Cannot modify header information - headers already sent by (output started at /home/users/uks52804/html/postalhistory.org.uk/newsite/php/contact.php:1) in /home/users/uks52804/html/postalhistory.org.uk/newsite/php/contact.php on line 29

This means that you have output prior to your ob_start() call. ob_start should be the first instruction of the page that is including that code.

I faced the same problem a while back and found that i was echoing something before setting the headers. I removed the echo statement and also cleared some whitespaces that removed the problem

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM