当前位置: 首页 > 知识库问答 >
问题:

PHP http_response_code();对标头();

薛浩言
2023-03-14

我根据本教程制作了一个联系表单:http://blog.teamtreehouse.com/create-ajax-contact-form

我在我的服务器上使用的是PHP5.3.10-1Ubuntu3.4版本,但我遇到了http_response_code();的问题,这正是上面链接中的示例教程所使用的。我读过http_response_code();仅适用于PHP5.4。因此,我转而使用header();

我的表单工作得很好,提交时显示成功消息,而不是使用http_response_code();时出现错误,但我的PHP不是那么好,我想知道我所做的是可以接受的,还是应该换一种方式?如果是,请更正我的代码。

下面是我的mailer.php文件的内容,您可以看到我已经注释掉了http_response_code();并且正在使用header();

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Get the form fields and remove whitespace.
    $name = strip_tags(trim($_POST["name"]));
    $name = str_replace(array("\r","\n"),array(" "," "),$name);
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
    $phone = trim($_POST["phone"]);
    $company = trim($_POST["company"]);
    $minbudget = trim($_POST["minbudget"]);
    $maxbudget = trim($_POST["maxbudget"]);
    $message = trim($_POST["message"]);
    $deadline = trim($_POST["deadline"]);
    $referred = trim($_POST["referred"]);

    // Check that data was sent to the mailer.
    if ( empty($name) OR empty($phone) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
        // Set a 400 (bad request) response code and exit.
        //http_response_code(400);
        header("HTTP/1.1 400 Bad Request");
        echo "Error (400). That's not good, refresh and try again otherwise please email me and let me know you are having trouble submitting this form.";
        exit;
    }

    // Set the recipient email address.
    // FIXME: Update this to your desired email address.
    $recipient = "myemail@domain.com";

    // Set the email subject.
    $subject = "Website enquiry from $name";

    // Build the email content.
    $email_content = "Name: $name\n";
    $email_content .= "Email: $email\n\n";
    $email_content .= "Phone: $phone\n";
    $email_content .= "Company: $company\n\n";

    $email_content .= "Budget: $minbudget $maxbudget\n";
    $email_content .= "Deadline: $deadline\n";
    //$email_content .= "Max Budget: $maxbudget\n";

    $email_content .= "\n$message\n\n";        

    $email_content .= "Referred: $referred\n";

    // Build the email headers.
    $email_headers = "From: $name <$email>";

    // Send the email.
    if (mail($recipient, $subject, $email_content, $email_headers)) {
        // Set a 200 (okay) response code.
        //http_response_code(200);
        header("HTTP/1.1 200 OK");
        echo "Thank You! I'll be in touch soon.";
    } else {
        // Set a 500 (internal server error) response code.
        //http_response_code(500);
        header("HTTP/1.0 500 Internal Server Error");
        echo "Error (500). That's not good, refresh and try again otherwise please email me and let me know you are having trouble submitting this form.";
    }

} else {
    // Not a POST request, set a 403 (forbidden) response code.
    //http_response_code(403);
    header("HTTP/1.1 403 Forbidden");
    echo "Error (403). That's not good, refresh and try again otherwise please email me and let me know you are having trouble submitting this form.";
}

共有1个答案

鲁英卫
2023-03-14

我通过查看PHP源代码来确定具体发生了什么,就我自己的类似问题回答了这个问题。

这两种方法在功能上基本上是等价的。http_response_code基本上是编写http状态头的一种简写方式,附加的好处是PHP将通过将您的响应代码与它在php-src/main/http_status_codes.h中维护的枚举中的一个值进行匹配,从而得出一个合适的原因短语来提供。

请注意,这意味着您的响应代码必须与PHP知道的响应代码匹配。您不能使用此方法创建自己的响应代码,但是可以使用header方法。还请注意,http_response_code仅在PHP 5.4.0及更高版本中可用。

简而言之-http_response_codeheader之间用于设置响应代码的区别:

>

  • 使用http_response_code将使PHP匹配并应用硬编码到PHP源代码中的原因短语列表中的原因短语。

    由于上面的第1点,如果使用http_response_code,则必须设置PHP知道的代码。您不能设置自己的自定义代码,但是,如果使用header函数,您可以设置自定义代码(和原因短语)。

  •  类似资料:
    • 问题内容: 我想在我的JTable派生类的标题中设置标签的垂直对齐方式。 我知道 我的标题比字体高得多,我想将文本 放在 垂直中心的 下方 。 如何做到这一点而又不至于压倒一切? 谢谢 问题答案: 一种方法是设置,默认情况下返回,例如

    • 在JavaScript的世界里,一切都是对象。 但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串: typeof 123; // 'number' typeof NaN; // 'number' typeof 'str'; // 'string' typeof true; // 'boolean' typeof undefined

    • 你可以同时在同一个图表上显示多个实例的指标,以比对和分析数据。图表上的每一条线或面积表示已选择实例的性能。选择左侧窗格中的实例以将其指标添加到图表。以同样的方式从图表中删除指标。

    • 我正在尝试突出显示由鼠标悬停的瓷砖。这是我的代码: 编辑: 光标对象不在鼠标下面,我如何修复和对齐它?

    • 问题内容: 你能给我一些有关对象头中确切存储的信息吗?我知道,这可能取决于JVM,但也许至少对于HotSpot?我正在寻找专门针对第一行的确切描述。 我已经阅读了一些信息,这些信息无法用我找到的信息进行正面验证。也许你有指向全部内容的OpenJDK Wiki的链接? 问题答案: 对象头由一个标记词和一个klass指针组成。 所述标记字具有(字大小在32位体系结构中,在64位体系结构)和 在克拉斯指

    • 问题内容: 基本上,我有一个JTable包含具有右对齐单元格但左对齐标题的列,这看起来确实很糟糕。我想在不更改标题的“外观”的情况下,将这些列的标题右对齐。 谢谢 问题答案: 这是修改表格的的另一种方法。对于此用法,这不是严格必要的,但可以最大程度地减少对UI委托外观的影响。 典型用法: 自定义标题渲染器: