Η header() χρησιμοποιείται για να σταλθούν ακατέργαστοι HTTP headers. Δείτε το HTTP/1.1 specification για περισσότερες πληροφορίες πάνω στους HTTP headers.
Η προαιρετική παράμετρος replace δείχνει αν ο header πρέπει να αντικαταστήσει έναν προηγούμενο παρόμοιο header, ή να προσθέσει έναν δεύτερο header του ίδιου τύπου. Η προκαθορισμένη ενέργεια είναι η αντικατάσταση του, αλλά αν περάσετε ως δεύτερη παράμετρο το FALSE μπορείτε να στείλετε πολλαπλούς headers του ίδιου τύπου. Για παράδειγμα:
Η δεύτερη προαορετική παράμετρος είναι η http_response_code η οποία ενεργοποιεί την HTTP response code στην συγκεκριμένη τιμή. (Αυτή η παράμετρος είναι διαθέσιμη από την PHP 4.3.0 και μετά.)
Υπάρχουν δύο ιδιαίτερες κλήσεις για headers. Η πρώτη είναι ένας header που αρχίζει με το string "HTTP/" το οποίο θα χρησιμοποιηθεί για να βρεθεί το HTTP status code που πρέπει να σταλεί. Για παράδειγμα, αν έχετε παραμετροποιήσει τον Apache να χρησιμοποιεί ένα PHP script για να χειρίζεται requests για χαμένα αρχεία (χρησιμοποιώντας την ErrorDocument ντιρεκτίβα), ίσως θέλετε να βεβαιωθείτε ότι το script σας παράγει τον κατάλληλο status code.
Óçìåßùóç: Η γραμμή με τον HTTP status header θα είναι πάντα η πρώτη που θα στέλνεται στον client, άσχετα από αν η πραγματική κλήση του header() είναι η πρώτη ή όχι. Το status μπορεί να αλλάξει καλώντας την header() με μια νέα γραμμή status οποιαδήποτε στιγμή εκτός και αν οι HTTP headers έχουν ήδη σταλεί.
Óçìåßùóç: Στην PHP 3, αυτό δουλεύει μόνο όταν η PHP μεταγλωτίζεται ως module του Apache. Μπορείτε να πετύχετε το ίδιο αποτέλεσμα χρησιμοποιώντας το Status header.
Η δεύτερη ειδική περίπτωση είναι η "Location:" header. Δεν στέλνει μόνο τον header πίσω στον browser, αλλά επίσης επιστρέφει ένα REDIRECT (302) status code στον browser εκτός και αν κάποιος 3xx status code έχει ήδη τεθεί.
<?php |
Óçìåßùóç: Η HTTP/1.1 απαιτεί ένα απόλυτο URI ως παράμετρο στην Location: που συμπεριλαμβάνει το σχήμα, το hostname και το απόλυτο path, μερικοί όμως clients δέχονται και σχετικά URIs. Συνήθως μπορείτε να χρησιμοποιήσετε τις $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] και dirname() μόνοι σας, για να κάνετε ένα απόλυτο URI από ένα σχετικό:
Τα PHP scripts συχνά παράγουν δυναμικό περιεχόμενο που δεν πρέπει να γίνει cached από τον browser του client ή από οποιονδήποτε proxy που κάνει cache ανάμεσα στον server και στον browser του client. Αρκετοί proxies και clients μπορούν να ρυθμιστούν έτσι ώστε να απενεργοποιήσουν το caching με:
<?php |
Óçìåßùóç: Ίσως ανακαλύψετε ότι οι σελίδες σας δεν γίνονται cache ακόμη και αν δεν στέλνονται όλοι οι παραπάνω headers. Υπάρχει ένας αριθμός επιλογών που οι χρήστες μπορούν να θέσουν στον browser και να αλλάξουν τη συμπεριφορά του σχετικά με το caching. Στέλνοντας τους παραπάνω headers, θα πρέπει να παρακαμφθούν οποιεσδήποτε ρυθμίσεις που ίσως προκαλέσουν να γίνει το αποτέλεσμα του script σας, cached.
Επιπλέον, οι ρυθμίσεις session_cache_limiter() και session.cache_limiter μπορούν να χρησιμοποιηθούν για να παραχθούν αυτόματα οι σωστοί caching-related headers όταν χρησιμοποιούνται sessions.
Θυμηθείτε ότο η header() πρέπει να καλείται πριν σταλεί οποιοδήποτε πραγματικό αποτέλεσμα, είτε με κανονικά HTML tags, κενές γραμμές σε ένα αρχείο, ή από την PHP. Είναι πολύ συνηθισμένο λάθος να διαβάζουμε κώδικα με συναρτήσεις include(), ή require(), ή άλλες συναρτήσεις που προσπελαύνουν αρχεία, και έχουν κενά ή άδειες γραμμές που είναι το αποτέλεσμα πριν την κλήση της header() . Το ίδιο πρόβλημα υπάρχει και όταν χρησιμοποιείται ένα μόνο αρχείο PHP/HTML.
<html> |
Óçìåßùóç: Στην PHP 4, μπορείτε να χρησιμοποιήσετε buffering στο αποτέλεσμα για να αντιμετωπίσετε αυτό το πρόβλημα, κάνοντας buffer στον server το overhead ολόκληρου του αποτελέσματος (output) στον browser μέχρι αυτό να σταλεί. Μπορείτε να το κάνετε αυτό καλώντας την ob_start() και την ob_end_flush() στο script σας, ή θέτοντας την output_buffering configuration ντιρεκτίβα στο php.ini ή στα αρχεία configuration του server.
Αν θέλετε να προτρέπετε τον χρήστη να σώζει τα δεδομένα που στέλνετε, όπως ένα PDF αρχείο που έει παραχθεί, μπορείτε να χρησιμοποιήσετε τον Content-Disposition header για να του δώσετε ένα προτεινόμενο όνομα αρχείου και να αναγκάσετε τον browser να εμφανίσει το παράθυρο για save.
<?php |
Óçìåßùóç: Υπάρχει ένα bug στον Microsoft Internet Explorer 4.01 που εμποδίζει τη λειτουργία του παραπάνω. Και δεν γίνεται κάτι γι'αυτό. Υπάρχει επίσης και ένα bug στον Microsoft Internet Explorer 5.5 που αλληλεπιδρά με αυτο, και μπορεί να λυθεί αναβαθμίζοντας τον με το Service Pack 2 και μετά.
Óçìåßùóç: Αν το safe mode είναι ενεργοποιημένο τότε το uid του script προστίθεται στο realm μέρος του WWW-Authenticate header αν έχετε ενεργοποιήσει αυτόν τον header (χρησιμοποιείται για HTTP Authentication).
Δείτε επίσης τις headers_sent(), setcookie(), και το τμήμα σχετικά με την HTTP authentication.