TEC610 (ΣΤ εξάμηνο) Διδάσκων: Ανδρέας Γιαννακουλόπουλος Εαρινό εξάμηνο
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ιόνιο Πανεπιστήμιο» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 1
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons 2
Ανάπτυξη Εφαρμογών Ιστού 2
1. Αποστολή Ηλεκτρονικού Ταχυδρομείου Μια από τις δυνατότητες της PHP είναι η αποστολή μηνυμάτων ηλ. ταχυδρομείου. Η διαδικασία υλοποιείται πολύ απλά με τη συνάρτηση mail(). mail (προς, θέμα, σώμα, [κεφαλίδες]) Η τιμή προς πρέπει να είναι μια διεύθυνση ηλ. ταχυδρομείου ή μια σειρά από διευθύνσεις ηλ. Ταχυδρομείου χωρισμένες με κόμματα. Η τιμή θέμα δημιουργεί τη γραμμή θέματος του μηνύματος ηλ. ταχυδρομείου και η τιμή σώμα αντιστοιχεί στο περιεχόμενο του μηνύματος. 3
Για να είναι ο κώδικας πιο ευανάγνωστος, συνήθως ανατίθενται τιμές σε μεταβλητές οι οποίες στη συνέχεια χρησιμοποιούνται στην κλήση της συνάρτησης mail(). Η γραμμή του θέματος δεν μπορεί να περιέχει χαρακτήρα αλλαγής γραμμής. Κάθε γραμμή του σώματος δεν πρέπει να έχει μήκος μεγαλύτερο από 70 χαρακτήρες. Αυτό επιτυγχάνεται με τη συνάρτηση wordwrap(). Η συνάρτηση mail() δέχεται μια τέταρτη προαιρετική παράμετρο για επιπλέον κεφαλίδες. Εκεί ρυθμίζετε τις τιμές From, Reply-To και Cc. 4
1.1 Στείλτε Ηλεκτρονικό Ταχυδρομείο 1. Ξεκινήστε ένα νέο σενάριο PHP. 5
2. Δημιουργήστε τη συνθήκη που ελέγχει αν έχει υποβληθεί η φόρμα και επικυρώστε τα δεδομένα της. Η φόρμα περιέχει τρεις εισόδους κειμένου. Η συνάρτηση empty() επαληθεύει ότι καταχωρήθηκε τιμή σε κάθε είσοδο. 3. Δημιουργήστε το σώμα του μηνύματος. 6
4. Στείλτε το μήνυμα και τυπώστε ένα μήνυμα στο φυλλομετρητή ιστού. Δεν υπάρχει τρόπος να βεβαιωθείτε ότι το μήνυμα στάλθηκε με επιτυχία, πόσο μάλλον αν παραλήφθηκε. 7
5. Καθαρίστε το μητρώο $_POST $_POST = array(); Η φόρμα θα είναι παραμένουσα για την περίπτωση που ο χρήστης παραλείψει κάτι. Αν όμως το μήνυμα σταλεί οι τιμές της φόρμας δεν χρειάζεται να εμφανίζονται ξανά. 8
6. Ολοκληρώστε τις συνθήκες Το μήνυμα σφάλματος περιέχει εμβόλιμο κώδικα CSS που κάνει τα γράμματα έντονα και κόκκινα. 9
7. Ξεκινήστε τη φόρμα. 10
8. Ολοκληρώστε τη φόρμα. 9. Ολοκληρώστε τη σελίδα HTML. 11
10. Αποθηκεύστε το αρχείο με όνομα email.php και ελέγξτε το στο φυλλομετρητή σας. 11. Ελέγξτε το ηλ. Ταχυδρομείο σας για να βεβαιωθείτε ότι παραλάβατε το μήνυμα. 12
2. Συναρτήσεις Ημερομηνίας και Ώρας Στην PHP υπάρχουν συναρτήσεις ημερομηνίας και ώρας όπως η date_default_timezone_set() όπου χρησιμοποιείται για τη ρύθμιση της προεπιλεγμένης ζώνης ώρας. Η συνάρτηση checkdate() δέχεται ως ορίσματα το μήνα, την ημέρα και το έτος και επιστρέφει μια λογική τιμή που δηλώνει αν η συγκεκριμένη ημερομηνία υπάρχει πράγματι. Η πιο συνήθης συνάρτηση είναι η date() που επιστρέφει την ημερομηνία και την ώρα ως μορφοποιημένη συμβολοσειρά. Η συνάρτηση getdate() μπορεί να χρησιμοποιηθεί για την επιστροφή ενός μητρώου τιμών ημερομηνίας και ώρας. 13
2.1 Χρησιμοποιήστε τις Συναρτήσεις 1. Ανοίξτε το σενάριο email.php 2. Στην πρώτη γραμμή του κώδικα μετά από την αρχική ετικέτα της PHP καθορίστε τη ζώνη ώρας. 14
3. Στη φόρμα της HTML προσθέστε ακόμα μια ρυφή είσοδο. 4. Αλλάξτε την τιμή του χαρακτηριστικού action της φόρμας ώστε να δείχνει σε αυτό το νέο σενάριο. Το νέο σενάριο θα έχει το όνομα datetime.php οπότε πρέπει να αλλάξει και η τιμή action. 15
5. Στο σημείο του σεναρίου όπου υποβάλλεται η φόρμα, αλλάξτε το μήνυμα ώστε να περιλαμβάνει την τρέχουσα ημερομηνία και ώρα. Στο μήνυμα προστέθηκαν δυο κλήσεις της συνάρτησης date(). Η πρώτη επιστρέφει την τρέχουσα ώρα στη μορφή ΩΩ:ΛΛ πμ/μμ και η δεύτερη επιστρέφει την ημέρα της εβδομάδας, το μήνα, την ημέρα και το έτος στη μορφή Ημέρα Μήνας Η, ΕΕΕΕ. 16
6. Προσθέστε ένα ακόμα μήνυμα, που αναφέρει πόσο χρόνο διήρκησε η όλη διαδικασία. 7. Αποθηκεύστε το αρχείο με όνομα datetime.php και δοκιμάστε το στο φυλλομετρητή. 17
3. Ανέβασμα αρχείων Η διαδικασία ανεβάσματος ενός αρχείου έχει δυο διαστάσεις. Πρώτα πρέπει να εμφανιστεί η φόρμα HTML, με κώδικα για το ανέβασμα αρχείων και στη συνέχεια κατά την υποβολή της φόρμας το σενάριο PHP πρέπει να αντιγράψει το αρχείο στον τελικό προορισμό. Για να γίνουν τα παραπάνω πρέπει να ισχύουν: Η PHP πρέπει να εκτελείται με τις κατάλληλες ρυθμίσεις. Πρέπει να υπάρχει ένας προσωρινός κατάλογος αποθήκευσης με τις σωστές άδειες. Πρέπει να υπάρχει ο τελικός κατάλογος αποθήκευσης με τις σωστές άδειες. 18
3.1 Ρυθμίσεις για Ανέβασμα Αρχείων Υπάρχουν πολλές ρυθμίσεις στο αρχείο διευθέτησης της PHP (php.ini) οι οποίες υπαγορεύουν τον τρόπο που η PHP θα χειρίζεται το ανέβασμα αρχείων και συγκεκριμένα πόσο μεγάλα είναι τα αρχεία και που αποθηκεύονται. Πρέπει να επεξεργαστείτε το αρχείο διευθέτησης εφόσον συντρέχουν οι παρακάτω λόγοι: Η ρύθμιση file_uploads είναι απενεργοποιημένη. Δεν έχει οριστεί προσωρινός κατάλογος για χρήση από την PHP. Θα ανεβάζετε πολύ μεγάλα αρχεία (μεγαλύτερα από 2 MB). 19
Ο προσωρινός κατάλογος είναι αυτός όπου η PHP αποθηκεύει το αρχείο μέχρι το σενάριο PHP να το μεταφέρει στον τελικό προορισμό του. Πρέπει να δημιουργηθεί ο φάκελος προορισμού με τις κατάλληλες άδειες. 20
3.1.1 Προετοιμάστε το Διακομιστή 1. Εκτελέστε τη συνάρτηση phpinfo() για να επαληθεύσετε τις ρυθμίσεις του διακομιστή. Η συνάρτηση αυτή τυπώνει πληροφορίες σχετικά με τη διεύθυνση της PHP. 21
2. Αν κάποια ρύθμιση χρειάζεται αλλαγή ανοίξτε το αρχείο php.ini 3. Ψάξτε το αρχείο php.ini για τις ρυθμίσεις που πρέπει να αλλάξουν και κάντε τις αλλαγές 22
4. Αποθηκεύστε το αρχείο php.ini και επανεκινήστε το διακομιστή Ιστού. 5. Επαληθεύστε τις αλλαγές εκτελώντας πάλι τη συνάρτηση phpinfo(). 6. Αν χρησιμοποιείτε Windows και πρέπει να δημιουργήσετε προσωρινό κατάλογο αποθήκευσης, προσθέστε ένα φάκελο tmp μέσα στον κατάλογο C:\ και βεβαιωθείτε ότι θα έχουν όλοι δικαίωμα εγγραφής σε αυτόν. 23
7.Δημιουργήστε ένα νέο φάκελο με το όνομα uploads, έξω από το βασικό κατάλογο της τοποθεσίας ιστού. Όλα τα αρχεία που ανεβαίνουν θα αποθηκεύονται μόνιμα στο φάκελο uploads. 8.Καθορίστε τις άδεις του φακέλου uploads ώστε ο διακομιστής να μπορεί να γράφει σε αυτόν. 24
3.2 Ανέβασμα Αρχείων με την PHP Ένα σενάριο PHP που χειρίζεται αρχεία αποτελείται από δυο τμήματα: τη φόρμα HTML και τον κώδικα PHP. Η απαιτούμενη σύνταξη μιας φόρμας που χειρίζεται το ανέβασμα των αρχείων αποτελείται από τρία μέρη. Το τμήμα enctype δείχνει ότι η φόρμα πρέπει να χειρίζεται διάφορους τύπους δεδομένων μεταξύ των οποίων και αρχεία. 25
Η κρυφή είσοδος MAX_FILE_SIZE είναι ένας περιορισμός της φόρμας για το μέγιστο μέγεθος του επιλεγμένου αρχείου. Η είσοδος του τύπου file δημιουργεί στη φόρμα το κατάλληλο κουμπί. Όταν υποβάλετε τη φόρμα το αρχείο που ανέβηκε θα αποθηκευτεί στη μεταβλητή $_FILES. 26
Όταν το αρχείο μεταβιβαστεί στο σενάριο της PHP, η συνάρτηση move_upload_file() θα το μεταφέρει από τον προσωρινό κατάλογο στη μόνιμη θέση του. Το επόμενο σενάριο ζητάει από το χρήστη να επιλέξει ένα αρχείο στον υπολογιστή του και στη συνέχεια το αποθηκεύει στο φάκελο uploads. 27
3.2.1 Χειριστείτε το Ανέβασμα Αρχείων με PHP 1. Δημιουργήστε ένα έγγραφο PHP. 28
2. Ελέγξτε αν έχει υποβληθεί η φόρμα και αν έχει επιλεγεί κάποιο αρχείο. 3. Ελέγξτε αν το ανεβασμένο αρχείο είναι του κατάλληλου τύπου. Ο τύπος του αρχείου είναι ο τύπος ΜΙΝΕ που δηλώνει το είδος του. 29
4. Αντιγράψτε το αρχείο στη νέα του θέση στο διακομιστή. 5. Ολοκληρώστε τις συνθήκες (για τον τύπο εικόνας και για το ανέβασμα του αρχείου). 30
6. Ελέγξτε αν προέκυψε σφάλμα και εμφανίστε το ανάλογο μήνυμα Αν προέκυψε σφάλμα η μεταβλητή $_FILES [ upload ][ error ] θα έχει τιμή μεγαλύτερη από 0. Σε αυτή την περίπτωση, το σενάριο θα αναφέρει ποιο ήταν το σφάλμα. 31
7. Δημιουργήστε μια δομή switch που να τυπώνει ένα πιο αναλυτικό μήνυμα σφάλματος. 8. Ολοκληρώστε τη συνθήκη IF για τον έλεγχο σφαλμάτων. 9. Διαγράψτε το προσωρινό αρχείο, αν υπάρχει ακόμα και ολοκληρώστε τον κώδικα της PHP. 32
10. Δημιουργήστε τη φόρμα της HTML. 33
11. Ολοκληρώστε τη σελίδα της HTML. 12. Αποθηκεύστε το αρχείο με το όνομα upload_image.php 34
4. PHP και JavaScript Η πιο σημαντική διαφορά τους είναι ότι η JavaScript εκτελείται στην πλευρά του πελάτη (δηλαδή στο φυλλομετρητή ιστού), ενώ η PHP εκτελείται στο διακομιστή. Μπορείτε να χρησιμοποιήσετε PHP για να δημιουργήσετε ή για να δουλέψετε με κώδικα JavaScript. Στο παράδειγμα η PHP εμφανίζει μια λίστα των εικόνων που ανέβασε το σενάριο upload_image.php και δημιουργεί ενεργούς συνδέσμους με τα ονόματά τους. Κάθε σύνδεσμος καλεί μια συνάρτηση JavaScript η οποία εμφανίζει ένα αναδυόμενο παράθυρο. 35
4.1 Δημιουργήστε κώδικα JavaScript με PHP 1. Ξεκινήστε ένα έγγραφο PHP. Αυτό το σενάριο εμφανίζει έναν κατάλογο με ονόματα εικόνων, μαζί με το μέγεθός τους και δημιουργεί έναν σύνδεσμο που εμφανίζει κάθε εικόνα μέσα σε ένα αναδυόμενο παράθυρο. Το παράθυρο αυτό θα δημιουργηθεί με κώδικα JavaScript. 36
2. Ξεκινήστε τη συνάρτηση JavaScript 3. Αν το αναδυόμενο παράθυρο είναι ήδη ανοιχτό, αλλάξτε τις διαστάσεις του. 37
4. Καθορίστε τις ιδιότητες και τη διεύθυνση URL του αναδυόμενου παραθύρου και μετά δημιουργήστε το. Η πρώτη γραμμή καθορίζει τις ιδιότητες του παραθύρου. Η δεύτερη γραμμή καθορίζει τη διεύθυνση URL του αναδυόμενου παραθύρου. 38
5. Ολοκληρώστε τη συνάρτηση της JavaScript και την κεφαλίδα της HTML. 6. Πληκτρολογήστε το εισαγωγικό κείμενο και ξεινήστε τον πίνακα. 39
7. Ξεκινήστε τον κώδικα της PHP και δημιουργήστε ένα μητρώο με τα αρχεία εικόνων του καταλόγου uploads. 8. Ξεκινήστε το βρόχο που διατρέχει το μητρώο $files 40
9. Διαβάστε τις σχετικές με την εικόνα πληροφορίες και κωδικοποιήστε το όνομά της. Η συνάρτηση getimagesize() επιστρέφει ένα μητρώο με πληροφορίες για την εικόνα. Η συνάρτηση filesize() επιστρέφει το μέγεθος ενός αρχείου σε byte. Η συνάρτηση urlencode() μετατρέπει ένα όνομα έτσι ώστε να είναι ασφαλής η μεταβίβασή του σε μια διεύθυνση URL. 41
10.Τυπώστε τη γραμμή του πίνακα. 11.Ολοκληρώστε τον κώδικα της PHP και τη σελίδα της HTML. 42
12. Αποθηκεύστε το αρχείο με όνομα images.php (στον ίδιο κατάλογο με το σενάριο upload_image.php) 13.Εξετάστε τον πηγαίο κώδικα για να δείτε πως δημιουργούνται δυναμικά οι σύνδεσμοι. 43
5. Τι είναι οι Κεφαλίδες της HTTP Η τεχνολογία HTTP (Hypertext Transfer Protocol) είναι ο πυρήνας του Παγκόσμιου Ιστού και καθορίζει τον τρόπο επικοινωνίας μεταξύ πελατών και διακομιστή. Μπορείτε να χρησιμοποιήσετε την ενσωματωμένη συνάρτηση header() της PHP για να εκμεταλλευθείτε αυτό το πρωτόκολλο. Η χρήση της συνάρτησης header() είναι εύκολη. Η σύνταξή της είναι: header(σειμβολοσειρά κεφαλίδας); Για να χρησιμοποιήσετε τη συνάρτηση header() για την ανακατεύθυνση του φυλλομετρητή πληκτρολογήστε: 44
Σε ένα σενάριο υπάρχουν περισσότερες από μια κλήσεις της συνάρτησης header() και κάθε μια πρέπει να τερματίζει με αλλαγή γραμμής(\n). Η συνάρτηση header() πρέπει να καλείται πριν σταλεί οτιδήποτε στο φυλλομετρητή. Το επόμενο παράδειγμα, το οποίο στέλνει ένα αρχείο στο φυλλομετρητή χρησιμοποιεί τρεις κλήσεις κεφαλίδων. Η πρώτη είναι η Content-Type και δείχνει τον τύπο των δεδομένων που θα ακολουθήσουν Η δεύτερη είναι η Content-Disposition και πληροφορεί το φυλλομετρητή πώς να διαχειριστεί τα δεδομένα. Η τρίτη είναι η attachment όπου ζητάει από το φυλλομετρητή να κατεβάσει το αρχείο. 45
5.1 Χρησιμοποιήστε τη συνάρτηση header() 1. Ξεκινήστε ένα έγγραφο PHP. 2. Ελέγξτε αν υπάρχει όνομα εικόνας. Το σενάριο πρέπει να δέχεται ένα έγκυρο όνομα εικόνας μέσως της διεύθυνσης URL 46
3. Ελέγξτε αν η εικόνα είναι όντως αρχείο αι βρίσκεται στο διακομιστή. 4. Επικυρώστε την προέκταση της εικόνας. 47
5. Ολοκληρώστε τις συνθήκες που ξεκινήσατε στα βήματα 2 και 3. 6. Αν στη σελίδα δε μεταβιβάστηκε έγκυρη εικόνα χρησιμοποιήστε την προεπιλεγμένη εικόνα. 48
7. Ανακτήστε τις πληροφορίες για την εικόνα. 8. Στείλτε το αρχείο. 9. Ολοκληρώστε τη σελίδα. 10.Αποθηκεύστε το αρχείο με το όνομα show_image.php 49