Header()未执行(可能由于邮件功能)

时间:2013-01-21 20:31:31

标签: php

在我的website上,我使用了联系表单,这给我带来了很多麻烦。我已经花了一些时间实际使用exim4在64位Debian上运行mail() PHP函数,但我终于做到了,并发送了邮件。

现在我遇到了另一个问题,我无法弄清楚如何解决。首先是代码。

<?php
$your_email = 'blahblah@gmail.com';
session_start();
$errors        = '';
$name          = '';
$visitor_email = '';
$user_message  = '';

if (isset($_POST['submit'])) {
    $name          = $_POST['name'];
    $visitor_email = $_POST['email'];
    $user_message  = $_POST['message'];
    ///------------Do Validations-------------
    if (empty($name) || empty($visitor_email)) {
        $errors .= "\n Name and Email are required fields. ";
    }
    if (IsInjected($visitor_email)) {
        $errors .= "\n Bad email value!";
    }
    if (empty($_SESSION['6_letters_code']) || strcmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0) {
        //Note: the captcha code is compared case insensitively.
        //if you want case sensitive match, update the check above to
        // strcmp()
        $errors .= "\n The captcha code does not match!";
    }

    if (empty($errors)) {
        //send the email
        $to      = $your_email;
        $subject = "New form submission";
        $from    = $your_email;

        $body = "A user  $name submitted the contact form:\n" . "Name: $name\n" . "Email: $visitor_email \n" . "Message: \n " . "$user_message\n";

        $headers = "From: $from \r\n";
        $headers .= "Reply-To: $visitor_email \r\n";

        if (mail($to, $subject, $body, $headers)) {
            header('Location: http://www.lolstreamgallery.net/thank-you.html');
        } else {
            $errors .= "\n E-Mail coulnd be sent!";
        }
    }
}

问题是标头重定向不起作用。 mail()确实有效,因此应执行标头。当我在本地测试文件时,确实会发生重定向。

如果您想测试联系表单,可以执行here

Here是整个文件代码:

EDIT2:

我现在正在使用Ian Brindley的功能,它使重定向工作,但不是头功能。似乎在标题之前有一些输出。

1 个答案:

答案 0 :(得分:1)

乍一看,我在header()调用之前看不到任何输出。

如果没有更好的选择,这里是我刚才发现的一个功能,我现在几乎用于所有重定向。

function redirect($url){
    if (!headers_sent()){    
        header('Location: '.$url);
        exit;
    }
    else {  
        echo '<script type="text/javascript">';
        echo 'window.location.href="'.$url.'";';
        echo '</script>';
        echo '<noscript>';
        echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
        echo '</noscript>'; exit;
    }
}

我知道非服务器端重定向并不理想。