【发布时间】:2011-04-13 20:52:29
【问题描述】:
我在一个网站上实现了一个联系表单,它利用 php 和 phpmailer 类通过我的主机 smtp 服务器发送邮件。
当我提交表单时,我收到以下错误消息:
警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送
这是我正在使用的完整代码页面...
<?php
session_start();
$name = trim($_POST['name']);
$email = $_POST['email'];
$comments = $_POST['comments'];
$captcha = $_POST['captcha'];
$site_owners_email = 'myemail.com';
$site_owners_name = 'my name';
if (strlen($name) < 2) {
$error['name'] = "Please enter your name";
}
if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
$error['email'] = "Please enter a valid email address";
}
if (strlen($comments) < 3) {
$error['comments'] = "Please leave a comment";
}
if (int($captcha) !== ($_SESSION['randomnr2'])) {
$error['captcha'] = "CAPTCHA error. Please try again";
}
if (!$error) {
require_once('phpMailer/class.phpmailer.php');
$mail = new PHPMailer();
$mail->From = $email;
$mail->FromName = $name;
$mail->Subject = "Contact Form";
$mail->AddAddress($site_owners_email, $site_owners_name);
$mail->Body = $comments;
// Mail Server Settings
$mail->Mailer = "smtp";
$mail->Host = "myhost.com";
$mail->Port = "25";
$mail->SMTPSecure = "tls";
$mail->SMTPAuth = true;
$mail->Username = "myname.com";
$mail->Password = "mypassword";
$mail->Send();
echo "<li class='success'> Thank you " . $name . ". We've received your email. We'll be in touch with you as soon as we possibly can! </li>";
} # end if no error
else {
$response = (isset($error['name'])) ? "<li>" . $error['name'] . "</li> \n" : null;
$response .= (isset($error['email'])) ? "<li>" . $error['email'] . "</li> \n" : null;
$response .= (isset($error['comments'])) ? "<li>" . $error['comments'] . "</li>" : null;
$response .= (isset($error['captcha'])) ? "<li>" . $error['captcha'] . "</li>" : null;
echo $response;
} # end if there was an error sending
?>
表单 是 工作,所以 php 在大多数情况下都很好。我通过表单发送消息,然后在收件箱中收到消息。
【问题讨论】:
-
发送输出时发送标题。任何时候你调用
echo,或者你的php文件中出现<?php ?>标签之外的任何时候,都会发送输出。注意<?php或?>之前的任何空格。确保在调用session_start之前没有任何输出 -
您正在使用 session_start() 在任何形式的输出到浏览器之后。
-
我之前也遇到过这个问题,请参考我的回答
-
@Joe 这是我正在使用的代码 .... '
-
哦,谢谢大家的快速回复:)