Η διαφορά μεταξύ των αιτημάτων λήψης ανάρτησης. GET ή POST: τι να επιλέξω; Διαβίβαση μεταβλητών με τη μέθοδο GET
Η πρώτη μέθοδος για να κάνετε ένα αίτημα PHP POST είναι να χρησιμοποιήσετε το file_get_contents. Η δεύτερη μέθοδος θα χρησιμοποιήσει το fread σε συνδυασμό με μερικές άλλες λειτουργίες. Και οι δύο επιλογές χρησιμοποιούν τη συνάρτηση stream_context_create για να συμπληρώσουν τα απαιτούμενα πεδία κεφαλίδας αιτήματος.
Εξήγηση κώδικα
Η μεταβλητή $sPD περιέχει τα δεδομένα που θα σταλούν. Πρέπει να είναι σε μορφή συμβολοσειράς αιτήματος HTTP, επομένως ορισμένοι ειδικοί χαρακτήρες πρέπει να κωδικοποιηθούν.
Τόσο στη συνάρτηση file_get_contents όσο και στη συνάρτηση fread, έχουμε δύο νέες παραμέτρους. Το πρώτο είναι use_include_path . Εφόσον κάνουμε ένα αίτημα HTTP, θα είναι ψευδές και στα δύο παραδείγματα. Όταν χρησιμοποιείτε το true για την ανάγνωση ενός τοπικού πόρου, η συνάρτηση θα αναζητήσει ένα αρχείο στο include_path .
Η δεύτερη παράμετρος, το περιβάλλον , συμπληρώνεται με την επιστρεφόμενη τιμή του stream_context_create , η οποία παίρνει την τιμή του πίνακα $aHTTP.
Χρήση file_get_contents για την υποβολή αιτημάτων POST
Στην PHP, για να στείλετε ένα αίτημα POST χρησιμοποιώντας file_get_contents , πρέπει να χρησιμοποιήσετε το stream_context_create για να συμπληρώσετε με μη αυτόματο τρόπο τα πεδία της κεφαλίδας και να καθορίσετε ποιο "wrapper" θα χρησιμοποιηθεί - σε αυτήν την περίπτωση HTTP :
$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // Δεδομένα POST $aHTTP = πίνακας("http" => // Περιτύλιγμα που θα χρησιμοποιηθεί array("method" => "POST", // Μέθοδος αιτήματος // Οι κεφαλίδες αιτημάτων ορίζονται κάτω από "header" => "Content- τύπος: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $περιεχόμενα;
Χρήση του fread για την υποβολή αιτημάτων POST
Μπορείτε να χρησιμοποιήσετε τη συνάρτηση fread για να κάνετε αιτήματα POST. Το παρακάτω παράδειγμα χρησιμοποιεί το stream_context_create για τη σύνθεση των απαιτούμενων κεφαλίδων αιτημάτων HTTP:
$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // Δεδομένα POST $aHTTP = array("http" => // Περιτύλιγμα που θα χρησιμοποιηθεί array("method" => "POST", // Μέθοδος αιτήματος // Οι κεφαλίδες αιτημάτων ορίζονται κάτω από "header" => "Content- τύπος: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; ενώ (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $περιεχόμενα;
Πραγματοποίηση αιτημάτων GET με την PHP
Τώρα θα στρέψουμε την προσοχή μας στη χρήση των fread και file_get_contents για λήψη περιεχομένου από το διαδίκτυο μέσω HTTP και HTTPS. Για να χρησιμοποιήσετε τις μεθόδους που περιγράφονται σε αυτό το άρθρο, πρέπει να είναι ενεργοποιημένη η επιλογή fopen wrappers. Για να το κάνετε αυτό, στο αρχείο php.ini, πρέπει να ορίσετε την παράμετρο allow_url_fopen σε On .
Τα αιτήματα PHP POST και GET χρησιμοποιούνται για τη σύνδεση σε ιστότοπους, την ανάκτηση περιεχομένου ιστοσελίδας ή τον έλεγχο για νέες εκδόσεις εφαρμογών. Θα καλύψουμε πώς να κάνετε απλά αιτήματα HTTP.
Χρήση του fread για λήψη ή λήψη αρχείων μέσω Διαδικτύου
Να θυμάστε ότι η ανάγνωση μιας ιστοσελίδας περιορίζεται στο προσβάσιμο μέρος του πακέτου. Επομένως, πρέπει να χρησιμοποιήσετε τη συνάρτηση stream_get_contents ( παρόμοια file_get_contents) ή ενώ βρόχοςγια να διαβάσετε το περιεχόμενο σε μικρότερα κομμάτια μέχρι να φτάσετε στο τέλος του αρχείου:
Σε αυτήν την περίπτωση, κατά την επεξεργασία ενός αιτήματος PHP POST, το τελευταίο όρισμα στη συνάρτηση fread είναι ίσο με το μέγεθος του τμήματος. Γενικά δεν πρέπει να είναι μεγαλύτερο από 8192 ( 8*1024 ).
Λάβετε υπόψη ότι μπορεί να είναι μεγαλύτερο ή μικρότερο και μπορεί επίσης να περιορίζεται από τις ρυθμίσεις του συστήματος στο οποίο εκτελείται η PHP.
Χρήση file_get_contents για λήψη url ιστότοπου
Είναι ακόμη πιο εύκολο να χρησιμοποιήσετε αυτήν τη μέθοδο κατά την ανάγνωση ενός αρχείου μέσω HTTP, καθώς δεν χρειάζεται να ανησυχείτε για την ανάγνωση σε κομμάτια - τα πάντα αντιμετωπίζονται σε PHP.
Αυτή η δημοσίευση είναι μετάφραση του άρθρου "Making POST Requests With PHP", που εκπονήθηκε από τη φιλική ομάδα έργου
Επί του παρόντος, μόνο δύο μέθοδοι HTTP χρησιμοποιούνται πιο συχνά: GET και POST. Αλλά αποδείχθηκε ότι ακόμη και ανάμεσα σε αυτά τα δύο «πεύκα» οι προγραμματιστές ιστού καταφέρνουν να χαθούν. Υπάρχει μια εξήγηση για αυτό: και οι δύο μέθοδοι μπορούν να χρησιμοποιηθούν για να επιτευχθεί το ίδιο αποτέλεσμα. Ωστόσο, πρέπει να θυμόμαστε ότι η αλόγιστη χρήση οποιασδήποτε από τις μεθόδους μπορεί να οδηγήσει σε καταστροφικές συνέπειες, συμπεριλαμβανομένων μεγάλων φορτίων στο κανάλι και οπών ασφαλείας.
Για να αποφευχθεί αυτό, αρκεί απλώς να κατανοήσουμε λεπτομερέστερα τους σκοπούς και τις διαφορές αυτών των μεθόδων.
Εάν εμβαθύνετε στην έννοια των ονομάτων των μεθόδων, πολλά θα γίνουν ξεκάθαρα. GET (από τα αγγλικά σε λήψη), π.χ. πρέπει να χρησιμοποιηθεί για να ζητηθούν δεδομένα. POST (c English send by mail) - χρησιμοποιείται για την αποστολή δεδομένων στον διακομιστή. Όλα δείχνουν να είναι πολύ απλά και ξεκάθαρα. Αλλά όποιος θέλει να αναπτύξει ιστότοπους λίγο πιο περίπλοκους από έναν ιστότοπο επαγγελματικών καρτών με μία φόρμα σχολίων, είναι καλύτερο να γνωρίσει καλύτερα το ζήτημα.
Ασφαλή και μη ασφαλή αιτήματα HTTP
Η προδιαγραφή HTTP 1.1 εισάγει δύο έννοιες: ένα ασφαλές αίτημα και ένα μη ασφαλές αίτημα, ή πιο συγκεκριμένα, μια μέθοδο.
Ασφαλείς είναι οι μέθοδοι που μπορούν να ζητήσουν μόνο πληροφορίες. Δεν μπορούν να αλλάξουν τον πόρο που ζητήθηκε, ούτε μπορούν να παράγουν ανεπιθύμητα αποτελέσματα για τον χρήστη, τους άλλους ή τον διακομιστή. Παραδείγματα ασφαλών ζητούν τον κώδικα HTML μιας ιστοσελίδας ή μιας εικόνας. Οι ασφαλείς μέθοδοι είναι HEAD και GET.
Το σημείωμα
Στην πραγματικότητα, οι τεχνίτες, φυσικά, μπορούν να βλάψουν και αιτήματα GET. Για παράδειγμα, βρόχοι ερωτήματος.
Τα ανασφαλή αιτήματα, το μαντέψατε, μπορεί να οδηγήσουν σε κακές συνέπειες εάν χρησιμοποιούνται επανειλημμένα. Τέτοια αιτήματα μπορούν να αλλάξουν το περιεχόμενο του πόρου στον οποίο έχετε πρόσβαση. Παραδείγματα τέτοιων αιτημάτων: αποστολή μηνυμάτων, εγγραφή, ηλεκτρονικές πληρωμές. Οι μη ασφαλείς μέθοδοι περιλαμβάνουν ΑΝΑΡΤΗΣΗ, ΤΟΠΟΘΕΤΗΣΗ, ΔΙΑΓΡΑΦΗ.
Ανίκανες μέθοδοι
Η ανικανότητα είναι η ιδιότητα των μεθόδων που, όταν καλούνται επανειλημμένα, θα επιστρέψουν το ίδιο αποτέλεσμα, εκτός εάν οι πληροφορίες είναι ξεπερασμένες. Αυτό σημαίνει ότι κατά την πρόσβαση στην ίδια διεύθυνση URL, όλοι οι χρήστες θα βλέπουν την ίδια ιστοσελίδα, εικόνα, βίντεο κ.λπ. Οι μέθοδοι GET, PUT, DELETE έχουν αυτήν την ιδιότητα.
Και τώρα περισσότερα για τις ίδιες τις μεθόδους GET και POST: ας κάνουμε μια σύντομη «περίληψη» για την καθεμία.
ΠΑΙΡΝΩ
- Σχεδιασμένο για λήψη δεδομένων από τον διακομιστή·
- το σώμα του αιτήματος είναι κενό.
- υποβάλλονται σε επεξεργασία από την πλευρά του διακομιστή γρηγορότερα και με λιγότερη κατανάλωση πόρων διακομιστή λόγω κενού σώματος αιτήματος.
- οι μεταβλητές μεταφέρονται στη γραμμή διευθύνσεων (έτσι το βλέπει ο χρήστης, τεχνικά τα δεδομένα μεταδίδονται στη γραμμή ερωτήματος) και επομένως οι πληροφορίες σχετικά με τις μεταβλητές και τις τιμές τους είναι ορατές (τα δεδομένα δεν προστατεύονται).
- μπορεί να μεταβιβάσει μια μικρή ποσότητα δεδομένων στον διακομιστή: υπάρχει περιορισμός στο μήκος της διεύθυνσης URL, ο οποίος εξαρτάται από το πρόγραμμα περιήγησης, για παράδειγμα, IE6 = 2Kb. Οι προγραμματιστές του Yahoo! συνιστούν να επικεντρωθείτε σε αυτόν τον αριθμό.
- μπορεί να μεταδώσει μόνο χαρακτήρες ASCII.
- ένα τέτοιο αίτημα μπορεί να αντιγραφεί, να αποθηκευτεί (για παράδειγμα, σε σελιδοδείκτες).
- το αίτημα μπορεί να αποθηκευτεί προσωρινά (αυτό μπορεί να ελεγχθεί).
- Διατίθενται υπό όρους και μερικές αιτήσεις για περαιτέρω μείωση του φόρτου στο κανάλι και στον διακομιστή.
- δεν διακόπτει τη σύνδεση HTTP (όταν η λειτουργία keepAlive είναι ενεργοποιημένη στον διακομιστή).
ΘΕΣΗ
- έχει σχεδιαστεί για να στέλνει δεδομένα στον διακομιστή.
- Η μεταφορά δεδομένων πραγματοποιείται στο σώμα της αίτησης·
- Η επεξεργασία από την πλευρά του διακομιστή είναι πιο αργή και "βαρύτερη" από το GET, επειδή εκτός από τις κεφαλίδες, πρέπει να αναλύσετε το σώμα του αιτήματος.
- Ικανότητα μεταφοράς μεγάλων ποσοτήτων δεδομένων·
- δυνατότητα μεταφοράς αρχείων.
- Δεν είναι δυνατή η προσθήκη σελιδοδείκτη σε μια σελίδα που δημιουργείται με τη μέθοδο POST.
- διακόπτει τη σύνδεση HTTP.
- Για να μεταφέρουν ακόμη και έναν πολύ μικρό όγκο πληροφοριών, τα περισσότερα προγράμματα περιήγησης στέλνουν τουλάχιστον δύο πακέτα TCP: μια κεφαλίδα και μετά ένα σώμα αιτήματος.
Αποδεικνύεται ότι αυτές οι δύο μέθοδοι δεν είναι τόσο παρόμοιες. Η χρήση του ενός ή του άλλου θα πρέπει να καθορίζεται από την εκάστοτε εργασία και όχι από το γεγονός ότι το GET χρησιμοποιείται από προεπιλογή ή είναι ευκολότερο να εργαστείτε. Το GET, φυσικά, στις περισσότερες περιπτώσεις είναι καλύτερη επιλογή, ειδικά όταν κατασκευάζετε γρήγορο AJAX, αλλά μην ξεχνάτε τα μειονεκτήματά του. Για τον εαυτό μου, έκανα έναν απλό αλγόριθμο-σημείωση σχετικά με την επιλογή της μεθόδου.
Ίσως έχετε παρατηρήσει ότι στους περισσότερους ιστότοπους μπορείτε να δείτε τις ακόλουθες διευθύνσεις:
http://website/index.php?blog=2
Εδώ, ακόμα και χωρίς να γνωρίζουμε php, μπορείτε να μαντέψετε ότι έχουμε πρόσβαση στο αρχείο index.phpΑλλά τι έρχεται μετά το ερωτηματικό, λίγοι γνωρίζουν. Όλα είναι πολύ απλά: ?blog=2αυτή είναι η δήλωση της καθολικής μεταβλητής "$_GET["blog"]" με την τιμή "2". Έτσι, περνάω μια μεταβλητή στο σενάριο που είναι υπεύθυνο για την εμφάνιση πληροφοριών από τη βάση δεδομένων. Ας γράψουμε ένα μικρό σενάριο στο οποίο θα βλέπετε καθαρά τα πάντα:
if(isset($_GET["blog"])) (
echo $_GET["blog"];
}
?>
Χρησιμοποιούμε τον τελεστή συνθήκης if() ως συνθήκη, υπάρχει αυτή η γραμμή:
Isset($_GET["blog"])
Το isset() σάς επιτρέπει να μάθετε εάν υπάρχει μια μεταβλητή που υποδεικνύεται σε αγκύλες, δηλαδή, η συνθήκη που περιέγραψα στον κώδικα ακούγεται ως εξής: Εάν υπάρχει μια μεταβλητή $_GET["blog"], τότε εμφανίστε την περιεχόμενα αυτής της μεταβλητής στην οθόνη. Να τι συνέβη:
Νομίζω ότι είναι σαφές Δημιουργήθηκε μια καθολική μεταβλητή $_GETμε το αναγνωριστικό που δηλώσαμε στη γραμμή διευθύνσεων ( σε αυτήν την περίπτωση με το id "blog")
Τώρα θέλω να διευκρινίσω ένα σημείο. Ας υποθέσουμε ότι πρέπει να δηλώσουμε δύο μεταβλητές, πώς να το κάνουμε; Η πρώτη μεταβλητή δηλώνεται μετά το ερωτηματικό "?" Η δεύτερη μεταβλητή δηλώνεται μετά από ένα τέτοιο σύμβολο "&" ( Για να είμαι ειλικρινής, δεν ξέρω ποιο είναι αυτό το σημάδι.), εδώ είναι ένα παράδειγμα δήλωσης τριών μεταβλητών:
http://website/index.php?a=1&b=2&c=3
Εδώ είναι ο κωδικός εξόδου:
if(isset($_GET["a"]) AND isset($_GET["b"]) AND isset($_GET["c"])) (
echo $_GET["a"]."
";
echo $_GET["b"]."
";
echo $_GET["c"]."
";
}
?>
Η συνθήκη ακούγεται ως εξής:
Εάν υπάρχει μια καθολική μεταβλητή $_GET["a"] και μια καθολική μεταβλητή $_GET["b"] και μια καθολική μεταβλητή $_GET["c"], τότε εμφανίστε τις στην οθόνη, ιδού το αποτέλεσμα:
Έντυπα
Πριν προχωρήσουμε στο Θέσηερωτήματα, πρέπει να καταλάβετε ποιες είναι οι μορφές; Γιατί είναι απαραίτητο; Επειδή η καθολική μεταβλητή $_POST[""] δημιουργείται μέσω φορμών. Τι είναι μια φόρμα; Αυτά είναι πεδία για την εισαγωγή ενός νήματος πληροφοριών από τον χρήστη. Τα πεδία είναι σε μία γραμμή, μεγάλα πεδία, υπάρχουν επίσης κουμπιά επιλογής, πλαίσια ελέγχου. Ας τα πάρουμε όλα με τη σειρά...
Η φόρμα είναι μια ετικέτα:
Η φόρμα έχει χαρακτηριστικά, θα απαριθμήσω τα πιο συνηθισμένα:
Ας δημιουργήσουμε μια φόρμα:
Ως αρχείο χειριστή, έβαλα το αρχείο test.phpγιατί σε αυτό γράφω παραδείγματα για εσάς. Ρύθμισα τη μέθοδο αποστολής για ανάρτηση επειδή αυτές οι μέθοδοι χρησιμοποιούνται στο 99,9% των περιπτώσεων. Έδωσα και στη φόρμα μας όνομα - έντυπο
Τώρα ας βουτήξουμε στον κόσμο των στοιχείων της μορφής. Το πρώτο πράγμα που πρέπει να καταλάβετε είναι ότι σχεδόν όλα τα στοιχεία είναι ετικέτες. η διαφορά είναι μόνο στο χαρακτηριστικό τύποςαυτές τις ετικέτες. Επιτρέψτε μου να απαριθμήσω τα στοιχεία της φόρμας που χρησιμοποιήθηκαν:
Είμαι σίγουρος ότι έχετε συναντήσει τέτοια πεδία περισσότερες από μία φορές, οπότε εδώ, όπως λένε: "χωρίς σχόλια"
Τώρα ας φτιάξουμε ένα μικρό εκπαιδευτικό ερωτηματολόγιο, με το οποίο θα δουλέψουμε περαιτέρω. Το καθήκον μας είναι να συντάξουμε ένα μικρό ερωτηματολόγιο που θα μας λέει το όνομα του ατόμου που συμπληρώνει, το φύλο, από ποια χώρα είναι, το αγαπημένο χρώμα και ένα πεδίο κειμένου όπου ο χρήστης μπορεί να προσθέσει κάτι για τον εαυτό του. Να τι πήρα: