2010-09-24 7 views
1

Pourquoi/quand faut-il utiliser CRLF à la fin de header en PHP? Voici un exemple (il est exact pas nécessairement):CRLF ( r n) dans la fonction header() de PHP

header("method: POST\r\n"); 
header('Host: '.get_option('transact_url')."\r\n"); 
header('Content-type: application/x-www-form-urlencoded'); 
header('Content-length: '.strlen($transaction)."\r\n"); 
header($transaction."\r\n\r\n"); 
header("Connection: close\r\n\r\n"); 
header("Location: ".$key_client_url."\r\n"); 
+1

C'est CRLF pas CLRF. Cela signifie Carriage-Return Line-Feed. – BoltClock

Répondre

5

Vous ne devriez jamais faire des sauts de ligne manuelle à l'intérieur de header(). L'implémentation actuelle supprime les sauts de ligne pour que vous soyez en sécurité, mais cela pourrait changer à l'avenir (bien qu'il n'y ait aucune raison de le changer).

+0

Donc, ce que vous dites est que je peux omettre d'utiliser tout le CLRF dans header() ET que, en utilisant "\ r \ n \ r \ n", il va casser mon code d'en-tête. Droite? D'ACCORD. Obtenu que. Mais pourquoi est-ce que je vois des codes (je pense sous Linux) en utilisant "\ r \ n" à chaque instruction d'en-tête? – nush

+0

Je n'ai jamais vu un tel code. Pouvez-vous montrer un projet qui fait cela? – halfdan

+2

@nush il dit pas "vous * pouvez * omettre" mais "vous ** ne devriez jamais ** l'utiliser". Vous voyez ces codes parce que certains programmeurs n'ont pas assez de connaissances. Une telle explication simple. –

0

J'ai mon compte tout est mélangé, donc je poste, bien que ce commentaire pour halfdan. N'hésitez pas à le corriger, si quelqu'un peut le faire.

link

j'ai vu que dans le lien et personne mentionné au sujet de ce que vous venez de me dire, donc je pensais qu'il a quelque chose à voir avec fins de ligne Linux. Certes, c'était la seule fois où j'ai vu "\ r \ n" dans header().

+2

Eh bien, ce poste est juste une merde complète (lien). "header (" méthode: POST ");" n'existe même pas (d'autres n'existent pas non plus). – halfdan

+2

Il vaut la peine de souligner que le code que vous avez copié à partir de ce lien fait lui-même partie d'un "comment faire je le fais?" questionion; ce n'était pas une des réponses; c'était la question. Et les réponses qu'il a reçues lui disent que ça ne marchera pas comme ça. – Spudley

3

Si c'est PHP, ce code est un non-sens. Fonction

header() est utilisé pour envoyer réponse têtes, alors que certains de ces en-têtes sont demande les.
Vous pouvez voir ce code parce que celui qui l'a écrit n'a aucune idée.

0

Halfdan est correct. Voici l'explication.

La ligne de requête et les en-têtes doivent tous se terminer par CRLF (c'est-à-dire un retour chariot suivi d'un saut de ligne). La ligne vide ne doit contenir que des espaces blancs et aucun autre espace.

Request  = Request-Line    ; Section 5.1 
        *((general-header  ; Section 4.5 
        | request-header   ; Section 5.3 
        | entity-header) CRLF) ; Section 7.1 
        CRLF 
        [ message-body ]   ; Section 4.3 

source: w3c.org - Hypertext Transfer Protocol -- HTTP/1.1

Questions connexes