PHP File Uploading
PHP και λειτουργίες που αφορούν File Uploading
Ένα PHP script που μπορεί να χρησιμοποιηθεί με μια φόρμα HTML για να επιτρέπει στους χρήστες να ανεβάζουν αρχεία – files στον διακομιστή – server. Αρχικά, τα αρχεία ανεβαίνουν σε έναν προσωρινό κατάλογο και στη συνέχεια μεταφέρονται σε έναν προορισμό-στόχο μέσω ενός PHP script.
Οι πληροφορίες στη σελίδα phpinfo.php περιγράφουν τον προσωρινό κατάλογο που χρησιμοποιείται για τις μεταφορτώσεις αρχείων ως upload_tmp_dir και το μέγιστο επιτρεπόμενο μέγεθος των αρχείων – files που μπορούν να μεταφορτωθούν ως upload_max_filesize. Αυτές οι παράμετροι ορίζονται στο αρχείο διαμόρφωσης php.ini.
Η διαδικασία μεταφόρτωσης ενός αρχείου – File uploading ακολουθεί τα βήματα:
- Ο χρήστης ανοίγει τη σελίδα που περιέχει μια φόρμα HTML που περιλαμβάνει κείμενο αρχείων, κουμπί περιήγησης και κουμπί υποβολής – Submit.
- Ο χρήστης κάνει κλικ στο κουμπί περιήγησης και επιλέγει ένα αρχείο για αποστολή από τον τοπικό υπολογιστή.
- Η πλήρης διαδρομή από το επιλεγμένο αρχείο εμφανίζεται στο κείμενο και στη συνέχεια ο χρήστης κάνει κλικ στο κουμπί υποβολής – Submit.
- Το επιλεγμένο αρχείο αποστέλλεται στον προσωρινό κατάλογο του διακομιστή – server.
- Το script που καθορίστηκε στην ιδιότητα action της φόρμας ελέγχει ότι το αρχείο έχει φτάσει και στη συνέχεια αντιγράφει το αρχείο σε έναν προβλεπόμενο κατάλογο.
- Το script επιβεβαιώνει την επιτυχία στον χρήστη.
Ως συνήθως κατά τη σύνταξη αρχείων, είναι απαραίτητο τόσο για τις προσωρινές όσο και για τις τελικές τοποθεσίες να έχουν οριστεί δικαιώματα – permissions που επιτρέπουν τη σύνταξη αρχείων. Εάν κάποιο από τα δύο οριστεί να είναι μόνο για ανάγνωση, τότε η διαδικασία θα αποτύχει.
Ένα μεταφορτωμένο αρχείο – uploaded file θα μπορούσε να είναι ένα αρχείο κειμένου ή αρχείο εικόνας ή οποιοδήποτε άλλο έγγραφο.
Δημιουργία φόρμας μεταφόρτωσης – upload form
Ο παρακάτω κώδικας HTML δημιουργεί μια φόρμα μεταφόρτωσης. Αυτή η φόρμα έχει την ιδιότητα method που έχει οριστεί σε post και την ιδιότητα enctype που έχει οριστεί σε multipart/form-data.
<?php if(isset($_FILES[‘image’])){ $errors= array(); $file_name = $_FILES[‘image’][‘name’]; $file_size =$_FILES[‘image’][‘size’]; $file_tmp =$_FILES[‘image’][‘tmp_name’]; $file_type=$_FILES[‘image’][‘type’]; $file_ext=strtolower(end(explode(‘.’,$_FILES[‘image’][‘name’]))); $extensions= array(“jpeg”,”jpg”,”png”); if(in_array($file_ext,$extensions)=== false){ $errors[]=”extension not allowed, please choose a JPEG or PNG file.”; } if($file_size > 2097152){ $errors[]=’File size must be excately 2 MB’; } if(empty($errors)==true){ move_uploaded_file($file_tmp,”images/”.$file_name); echo “Success”; }else{ print_r($errors); } } ?> <html> <body> <form action=”” method=”POST” enctype=”multipart/form-data”> <input type=”file” name=”image” /> <input type=”submit”/> </form> </body> </html> |
Θα εμφανίσει το ακόλουθο αποτέλεσμα:
Δημιουργία σεναρίου μεταφόρτωσης – upload script
Υπάρχει μια καθολική μεταβλητή – global variable που ονομάζεται $_FILES. Αυτή η μεταβλητή είναι ένας πίνακας διπλών διαστάσεων που διατηρεί όλες τις πληροφορίες που σχετίζονται με το μεταφορτωμένο αρχείο – uploaded file. Έτσι, εάν η τιμή που εκχωρήθηκε στην ιδιότητα name της ετικέτας input στη φόρμα μεταφόρτωσης ήταν file, τότε η PHP θα δημιουργούσε τις ακόλουθες πέντε μεταβλητές:
- $_FILES[‘file‘][‘tmp_name‘]− το μεταφορτωμένο αρχείο στον προσωρινό κατάλογο του διακομιστή – server.
- $_FILES[‘file‘][‘name‘]− το πραγματικό όνομα του μεταφορτωμένου αρχείου.
- $_FILES[‘file‘][‘size‘]– το μέγεθος σε byte του μεταφορτωμένου αρχείου.
- $_FILES[‘file‘][‘type‘]– ο τύπος MIME του μεταφορτωμένου αρχείου.
- $_FILES[‘file‘][‘error‘]− ο κωδικός σφάλματος που σχετίζεται με τη μεταφόρτωση αυτού του αρχείου.
Παράδειγμα
Το παρακάτω παράδειγμα θα πρέπει να επιτρέπει τη μεταφόρτωση εικόνων και να δίνει αποτελέσματα ως πληροφορίες μεταφορτωμένο αρχείο – uploaded file.
Σημείωση: στο παράδειγμα που ακολουθεί η τιμή που εκχωρήθηκε στην ιδιότητα name της ετικέτας input στη φόρμα μεταφόρτωσης είναι image.
<?php if(isset($_FILES[‘image’])){ $errors= array(); $file_name = $_FILES[‘image’][‘name’]; $file_size = $_FILES[‘image’][‘size’]; $file_tmp = $_FILES[‘image’][‘tmp_name’]; $file_type = $_FILES[‘image’][‘type’]; $file_ext=strtolower(end(explode(‘.’,$_FILES[‘image’][‘name’]))); $extensions= array(“jpeg”,”jpg”,”png”); if(in_array($file_ext,$extensions)=== false){ $errors[]=”extension not allowed, please choose a JPEG or PNG file.”; } if($file_size > 2097152) { $errors[]=’File size must be excately 2 MB’; } if(empty($errors)==true) { move_uploaded_file($file_tmp,”images/”.$file_name); echo “Success”; }else{ print_r($errors); } } ?> <html> <body> <form action = “” method = “POST” enctype = “multipart/form-data”> <input type = “file” name = “image” /> <input type = “submit”/> <ul> <li>Sent file: <?php echo $_FILES[‘image’][‘name’]; ?> <li>File size: <?php echo $_FILES[‘image’][‘size’]; ?> <li>File type: <?php echo $_FILES[‘image’][‘type’] ?> </ul> </form> </body> </html> |
Θα εμφανίσει το ακόλουθο αποτέλεσμα:
Μπορείτε να ενημερωθείτε για την php στο σχετικό θεματικό τμήμα του blog μας που μπορείτε να δείτε εδώ.
Αν θέλετε να μάθετε περισσότερα για την κατασκευή ιστοσελίδας παρακολουθήστε το σεμινάριο Web Design και άλλα σεμινάρια εξ αποστάσεως από το Εργαστήριο ΤΠΕ Ήρων
Πηγή: tutorialspoint.com