PHP http_response_code(); rapport de l'en-tête();
J'ai fait un formulaire de contact basé sur ce tutoriel:
http://blog.teamtreehouse.com/create-ajax-contact-form
Je suis en utilisant la Version de PHP 5.3.10-1ubuntu3.4 sur mon serveur, et j'ai eu du mal avec http_response_code();
qui est ce que l'exemple de tutoriel sur le lien ci-dessus utilise. J'ai lu http_response_code();
ne fonctionne qu'avec PHP 5.4. Donc à la place j'ai été rétrocédés à l'aide de header();
.
J'ai mon formulaire fonctionne très bien et qu'il affiche un message de succès quand je soumettre, plutôt que des messages d'erreurs lorsque j'ai été en utilisant http_response_code();
mais mon PHP n'est pas grande et je suis désireux de savoir si ce que j'ai fait est acceptable ou si je devrais faire cela d'une façon différente? Merci de corriger mon code si.
Voici le contenu de mon mailer.php de fichiers, où vous pouvez voir que j'ai commenté http_response_code();
et je suis en utilisant 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 = "[email protected]";
//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.";
}
Votre code de courrier a beaucoup de problèmes, je vous suggère d'utiliser une bibliothèque, comme PHPMailer, puisque vous tagged la question, mais ne l'utilisez pas!
pas vrai. À l'aide de 400 comme une réponse à malformés/non valide les données en json/api post, est assez banal, et est en outre pris en charge par cette populaire thread sur stackoverflow
OriginalL'auteur Glen | 2014-08-14
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à répondre à cette sur ma propre question similaire en passant par le code source PHP de savoir exactement ce qui se passe.
Les deux méthodes sont essentiellement fonctionnellement équivalent.
http_response_code
est essentiellement une manière de sténographie de l'écriture d'un statut http en-tête, avec, en bonus, le PHP étant un adapté Raison De La Phrase à fournir par l'appariement de votre code de réponse à l'une des valeurs d'une énumération il entretient dans php-src/main/http_status_codes.h.Notez que cela signifie que votre code de réponse doit correspondre à un code de réponse que PHP connaît. Vous ne pouvez pas créer vos propres codes de réponse à l'aide de cette méthode, cependant, vous pouvez à l'aide de la
header
méthode. Notez également quehttp_response_code
est disponible uniquement en PHP 5.4.0 et plus.En résumé - Les différences entre
http_response_code
etheader
pour la définition des codes de réponse:À l'aide de
http_response_code
sera la cause de PHP pour le match et appliquer une Expression de Motif à partir d'une liste de la Raison, des Phrases qui sont codées en dur dans le code source PHP.Parce que du point 1 ci-dessus, si vous utilisez
http_response_code
vous devez définir un code PHP en sait quelque chose. Vous ne pouvez pas créer votre propre code personnalisé, cependant, vous pouvez définir un code personnalisé (et la Raison de la Phrase) si vous utilisez leheader
fonction.http_response_code
est disponible uniquement en PHP 5.4.0, et plushttp_response_code(403);
est utilisé quelque part dans un script, il devrait être suivi parexit
? Ou ne la poursuite de l'exécution interrompu implicitement parhttp_response_code(403);
?Il n'a pas terminer l'exécution. Donc, si vous voulez quitter après le réglage de la réponse de code que vous devrez explicitement à la sortie.
OriginalL'auteur sg-
Solution facile:
vous pouvez l'utiliser comme:
ou
else
devrait déjà saisir à partir d'une liste de$reason
des valeurs codées en dur ou à partir d'un fichier de langue avec des constantes.OriginalL'auteur biesior
Pour répondre à votre question principale, la plus grande réponse que j'ai pu voir à l'utilisation d'en-têtes vs http_response_code(), c'est que http_response_code() est pris en charge uniquement sur PHP 5.4 et plus, les anciennes versions échouerait à l'aide de cette fonction.
En utilisant les en-têtes que vous êtes dans votre exemple vous assurer que vous êtes code fonctionne sur des versions plus anciennes.
OriginalL'auteur matwonk