Στατικές και δυναμικές ιστοσελίδες. Δημιουργία δυναμικών ιστοσελίδων στο Perl

Πρόγραμμα Kerish Doctor. 17.04.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Ησυχία! Ακούς;.. Α, φυσικά αγανακτισμένες κραυγές οπαδών της ενότητας CGI.pm. Θαυμάζουν το παραπάνω απόσπασμα, θεωρώντας το κλασικό παράδειγμα σεναρίου, αλλά δεν τους αρέσει η υπογραφή και το όνομα αυτής της νάμπλα γενικότερα. Λοιπόν, πολίτες, σας ζητώ να στρίψετε 180 μοίρες και να γυρίσετε πίσω ή τουλάχιστον να σιωπήσετε για λίγο. Ευχαριστώ, αυτό είναι λίγο καλύτερο.

Αν και όχι, όχι καλύτερα. Τώρα ακούω γκρίνια. Γκρίνια σχεδιαστών και κωδικοποιητών HTML. Αυτοί είναι άνθρωποι που πολεμούν σε μέτωπα μακριά από τη χώρα του προγραμματισμού. Για αυτούς, ο παραπάνω κωδικός είναι σαν κινέζικο γράμμα. Και πνίγονται σε αυτό που δεν μπορούν να αλλάξουν εύκολα εμφάνισησελίδα που δημιουργήθηκε από το πρόγραμμα. Εμείς οι προγραμματιστές θα πρέπει να έχουμε έλεος με τέτοιους ανθρώπους. Αυτό σημαίνει ότι προσπαθείς να τους βοηθήσεις σε όλα. Ας ασχοληθούμε λοιπόν.

Ας φέρουμε, λοιπόν, την Perl πιο κοντά στην PHP όσον αφορά την ευκολία προγραμματισμού, διατηρώντας ταυτόχρονα όλες τις καλύτερες ιδιότητές της. Για να το κάνετε αυτό πρέπει να κάνετε 3 βήματα:

  1. απαλλαγείτε από το ενοχλητικό 500ο σφάλμα.
  2. Μάθετε να δέχεστε δεδομένα από φόρμες όσο πιο εύκολα το κάνει η PHP.
  3. βεβαιωθείτε ότι οι ψευδο-PHP ετικέτες λειτουργούν σε σενάρια .

Ένα σύνθετο πρόβλημα, σε αντίθεση με το ίδιο γεύμα, δεν είναι πάντα μοιραίο. Στην περίπτωσή μας, θα δούμε πρώτα την ισχυρή μονάδα CGI::WebOut, η οποία λύνει το πρώτο μέρος του προβλήματος. Τα επόμενα κεφάλαια θα αφιερωθούν στις υπόλοιπες εργασίες.

Ας υποθέσουμε ότι το CGI::WebOut είναι εγκατεστημένο. Ας δούμε με παραδείγματα τι μπορούμε να κάνουμε τώρα.

Απαλλαγή από το 500ο σφάλμα, εκτύπωση προειδοποιήσεων στο πρόγραμμα περιήγησης

#!/usr/bin/perl -wχρήση CGI::WebOut; # wow, δεν χρειάζεται καν να εκτυπώσουμε τον τύπο περιεχομένου!εκτύπωση "Γεια σου κόσμο!". προειδοποίηση "Τελευταία προειδοποίηση.\n"; # δοκιμάστε να αφαιρέσετε το σχόλιο επόμενη γραμμή # (κλήση ανύπαρκτη συνάρτηση, δημιουργία σφάλματος):#no_such_function();

Έξοδος κεφαλίδων μετά την έξοδο του σώματος

#!/usr/bin/perl -wχρήση CGI::WebOut; # υποδηλώνει ότι οι κεφαλίδες μπορούν να εμφανίζονται μετά το σώμα NoAutoflush(); εκτύπωση "Γεια σου κόσμο!". # προσθέστε μια κεφαλίδα κατά την απόδοση του σώματος! Header("Τύπος περιεχομένου: κείμενο/απλό"); εκτύπωση "Είμαι ζωντανός!".

Προσωρινή αναχαίτιση της ροής εξόδου

#!/usr/bin/perl -wχρήση CGI::WebOut; εκτύπωση "Γεια σου κόσμο!". # οτιδήποτε υποτίθεται ότι εξάγεται στο πρόγραμμα περιήγησης θα καταλήγει σε $st my $st=grab ( print "Αυτό το κείμενο δεν θα πάει απευθείας στο πρόγραμμα περιήγησης - "; print "θα τοποθετηθεί στη μεταβλητή $st"; ); εκτύπωση "Είμαι ζωντανός!". εκτύπωση "Caught string: "$st"";

Υποκλοπή πολλαπλών επιπέδων

#!/usr/bin/perl -wχρήση CGI::WebOut; my $st=grab ( print "Αυτό το κείμενο δεν θα πάει κατευθείαν στο πρόγραμμα περιήγησης - "; # δεν μας ενδιαφέρει αν η έξοδος έχει ήδη καταγραφεί my $s=grab ( εκτύπωση "Αλλά αυτό το κείμενο δεν θα καταλήξει σε $st -"; εκτύπωση "Θα αποθηκευτεί σε $s"; ); εκτυπώστε "θα τοποθετηθεί στη μεταβλητή $st.";εκτύπωση "Κείμενο από s: "$s""; )

# μην ξεχνάτε απλώς ";" μετά το τελευταίο ")"!

#!/usr/bin/perl -wχρήση CGI::WebOut; εκτύπωση "Caught string: "$st""; Εργασία με Εξαιρέσεις# εξαίρεση (μοιραίο σφάλμα) πετάχτηκε # στο μπλοκ δοκιμής, μεταβιβάστηκε στον κωδικό στο μπλοκ catch.δοκιμάστε (απαιτείται No_such_module; # μπορείτε να κάνετε μια εξαίρεση μέσω προγραμματισμούρίξτε "Εξαίρεση"? ) πιάσε ( # αντικείμενο εξαίρεσης σε $_προειδοποίηση "Απέτυχε η σύνδεση της μονάδας: $_\n"; ) προειδοποιήσεις ( # λάθη και προειδοποιήσεις στο @_προειδοποίηση "Παρουσιάστηκαν σφάλματα κατά τη σύνδεση."

"και προειδοποιήσεις: ".join("\n",@_); )

# μπλοκ συλλήψεων και προειδοποιήσεων μπορούν να παραληφθούν:

#!/usr/bin/perl -wχρήση CGI::WebOut; δοκιμάστε (Do_some_dangerous_work(); );Λοιπόν, αυτό είναι όλο; Σχεδόν. Λίγο ακόμα, κάνε υπομονή. Άλλες επιλογές# τώρα μπορείτε να εκτυπώσετε κεφαλίδες κατά την εκτύπωση του σώματος NoAutoflush();# απενεργοποιήστε την προσωρινή αποθήκευση του προγράμματος περιήγησης NoCache(); # ή μπορούμε να ανακατευθύνουμε σε άλλη σελίδα Ανακατεύθυνση ("http://www.perl.org"); έξοδος();# μην ξεχάσετε να τερματίσετε το σενάριο μετά την ανακατεύθυνση!

# ή στείλτε αμέσως τις συσσωρευμένες κεφαλίδες # και το σώμα του εγγράφου στο πρόγραμμα περιήγησης, χωρίς να περιμένετε το τέλος του σεναρίουΕξαψη();

Λοιπόν, φτάνει τώρα. Δεν φαίνεται τόσο πολύ, αλλά είναι

πραγματικά

Σε αυτό το άρθρο θα εξετάσουμε τα βήματα δημιουργίας ενός μηχανισμού για τη δημοσίευση δελτίων τύπου σε μια τοποθεσία Web. Ο ιστότοπός μας θα συνδέεται άμεσα με δελτία τύπου που είναι αποθηκευμένα στη βάση δεδομένων με ιστοσελίδες προτύπων. Στόχος μας δεν ήταν να εισαγάγουμε τους αναγνώστες στα βασικά των εργαλείων ανάπτυξης ιστοσελίδων, καθώς έχουν γραφτεί πολλά βιβλία και άρθρα σχετικά με αυτό. Αυτό το άρθρο προορίζεται κυρίως για εκείνους τους χρήστες που έχουν ήδη εμπειρία στη δημιουργία ιστοσελίδων και απλών τοποθεσιών. Ο κύριος στόχος μας είναι να σας δείξουμε πώς να ξεκινήσετε την ανάπτυξη της πρώτης σας δυναμικής τοποθεσίας Web. Για να κατανοήσετε το άρθρο, καλό είναι να έχετε βασικές γνώσειςσχετικά με τις αρχιτεκτονικές συστημάτων πληροφοριών, τη γλώσσα σήμανσης υπερκειμένου (HTML) και τη γλώσσα Προγραμματισμός Perl.

Για να δημιουργήσουμε αυτόν τον ιστότοπο θα χρησιμοποιήσουμε τρεις ισχυρές ανοιχτές τεχνολογίες: Apache, MySQL και Perl/DBI.

Τι είναι ένας στατικός ιστότοπος; Πριν ξεκινήσετε την ανάπτυξη μιας δυναμικής τοποθεσίας Web, είναι σημαντικό να κατανοήσετε τι είναι μια στατική τοποθεσία Web και τις στατικές ιστοσελίδες που αποτελούν τον πυρήνα της. Οι στατικές ιστοσελίδες δημιουργούνται χειροκίνητα, στη συνέχεια αποθηκεύονται και αποστέλλονται στον ιστότοπο. Κάθε φορά που χρειάζεται να αλλάξει το περιεχόμενο μιας τέτοιας σελίδας, ο χρήστης το τροποποιεί στον υπολογιστή εργασίας του, συνήθως χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας HTML, το αποθηκεύει και στη συνέχεια το ανεβάζει ξανά στον ιστότοπο. Ρίχνοντας μια προσεκτική ματιά σε κάποια πύλη, ας πούμε το CNN.com ή το BBC.co.uk, μπορεί να σκεφτείτε ότι αυτές οι εταιρείες προσελκύουν έναν στρατό σχεδιαστών διάταξης για να ενημερώσουν το περιεχόμενο των τοποθεσιών τους. Στην πραγματικότητα υπάρχειο καλύτερος τρόπος

- χρήση της έννοιας ενός δυναμικού ιστότοπου.

Τι είναι ένας δυναμικός ιστότοπος;

Κάθε σελίδα με απόδοση δυναμικών τοποθεσιών Web βασίζεται σε μια σελίδα προτύπου στην οποία εισάγεται συνεχώς μεταβαλλόμενο περιεχόμενο, που συνήθως αποθηκεύεται σε μια βάση δεδομένων. Όταν ένας χρήστης ζητά μια σελίδα, οι σχετικές πληροφορίες ανακτώνται από τη βάση δεδομένων, εισάγονται σε ένα πρότυπο για να σχηματιστεί μια νέα ιστοσελίδα και αποστέλλονται από τον διακομιστή Web στο πρόγραμμα περιήγησης του χρήστη, το οποίο τις εμφανίζει σωστά. Εκτός από το περιεχόμενο πληροφοριών, τα στοιχεία πλοήγησης για μια τοποθεσία Web μπορούν επίσης να δημιουργηθούν δυναμικά. Με αυτόν τον τρόπο, εάν χρειάζεται να ενημερώσετε το περιεχόμενο του ιστότοπού σας, απλώς προσθέτετε κείμενο για τη νέα σελίδα, το οποίο στη συνέχεια εισάγεται στη βάση δεδομένων χρησιμοποιώντας έναν συγκεκριμένο μηχανισμό.

Το πρώτο πράγμα που χρειάζεστε για να δημιουργήσετε μια δυναμική τοποθεσία είναι ένας διακομιστής Web, όπως ο Apache.

Ο διακομιστής web μπορεί να χρησιμοποιηθεί για την εξυπηρέτηση ηλεκτρονικό κατάστημα, διακομιστές ειδήσεων, μηχανή αναζήτησης, συστήματα εξ αποστάσεως εκπαίδευσηκαι ακόμη και για ολόκληρο το σύνολο των περιοχών που αναφέρονται. Η επιλογή ενός διακομιστή Ιστού εξαρτάται από το είδος της δραστηριότητας που ένα άτομο ή ένας οργανισμός σκοπεύει να συμμετάσχει στο Διαδίκτυο.

Λίγες στρατηγικές επιχειρηματικές αποφάσεις είναι τόσο σημαντικές όσο η επιλογή μιας πλατφόρμας διακομιστή Web. Τα χαρακτηριστικά του διακομιστή είναι ένας εξαιρετικά σημαντικός παράγοντας που καθορίζει την αξιοπιστία του κόμβου, την «ανταπόκρισή» του στα αιτήματα των πελατών, καθώς και τις προσπάθειες που πρέπει να γίνουν για να διατηρηθεί σε κατάσταση λειτουργίας. Με τη σωστή επιλογή εξαρτημάτων και ποιοτικό σχεδιασμό, ένας ιστότοπος μπορεί να γίνει ένας νέος, πιο βολικός τρόπος αλληλεπίδρασης πελατών και συνεργατών με την εταιρεία σας. Η υπερφόρτωση του διακομιστή Web μπορεί να προκαλέσει τη μη διαθεσιμότητα του διακομιστή βάσης δεδομένων ή κάποιου άλλου πόρου στους πελάτες.

Μέχρι πρόσφατα, βασίζονταν μεγάλες εταιρείες Microsoft InternetΟι Πληροφορίες διακομιστή, Netscape FastTrack, IBM WebSphere και Apache χρησιμοποιούνταν κυρίως από μικρές εταιρείες. Ωστόσο, τώρα η κατάσταση έχει αλλάξει κάπως και ο Apache αρχίζει να υποστηρίζει την απόδοση ορισμένων μεγάλων έργων στο Διαδίκτυο, ιδίως του Yahoo.

Μπορείτε να βρείτε την πλήρη έκδοση του άρθρου στο CD-ROM μας.

Το Apache παρέχει πλούσιες δυνατότητες που σας επιτρέπουν να προσαρμόσετε τον διακομιστή Ιστού σας για να ταιριάζει στις ανάγκες μεμονωμένων και εταιρικών χρηστών. Η ρύθμιση παραμέτρων γίνεται χρησιμοποιώντας οδηγίες που περιέχονται στα αρχεία διαμόρφωσης. Ο Apache σάς επιτρέπει να δημιουργείτε εικονικούς ιστότοπους και λειτουργεί επίσης ως διακομιστής μεσολάβησης.

Στη συνέχεια, πρέπει να αποφασίσετε πώς θα αποθηκεύσετε το περιεχόμενο που εμφανίζεται στην ιστοσελίδα. Σε αυτό το άρθρο, χρησιμοποιώντας ένα συγκεκριμένο παράδειγμα, θα δείξουμε πώς να δημιουργήσουμε μια βάση δεδομένων στο MySQL DBMS, η οποία θα μας επιτρέψει να χωρίσουμε το περιεχόμενο Ιστού σε πίνακες που περιέχουν πεδία και εγγραφές δεδομένων. Ένα πεδίο είναι μια διακριτή μονάδα δεδομένων σε έναν πίνακα. Για παράδειγμα, μπορούμε να δημιουργήσουμε έναν πίνακα tbl_news_items με τα πεδία col_title, col_date, col_fullstory, col_author. Το MySQL DBMS είναι μια εξαιρετική επιλογή για τη δημιουργία μιας τέτοιας βάσης δεδομένων λόγω της ευκολίας χρήσης και διαχείρισης, της δωρεάν διανομής για διάφορες πλατφόρμες, συμπεριλαμβανομένων των Linux και Windows, και της ταχέως αυξανόμενης δημοτικότητάς της.

Μετά από αυτό, θα δημιουργήσουμε δυναμικές σελίδες προτύπου HTML. Για να αναπτύξουμε εφαρμογές για αλληλεπίδραση με τη βάση δεδομένων και τα πρότυπα, θα χρησιμοποιήσουμε τη γλώσσα Perl.

Στην πραγματικότητα, πρέπει να δημιουργήσουμε τρία προγράμματα ή σενάρια Perl: το ένα θα εμφανίζει συνδέσμους προς όλα τα διαθέσιμα δελτία τύπου (pr-list-dbi.pl), το άλλο θα εμφανίζει τα περιεχόμενα του επιλεγμένου δελτίου τύπου (pr-content-dbi .pl) και το τρίτο θα μας επιτρέψει να προσθέσουμε το πιο πρόσφατο δελτίο τύπου στη βάση δεδομένων (pr-add-dbi.pl). Η εργασία διάταξης μπορεί να ανατεθεί στον αγαπημένο σας επεξεργαστή HTML, για παράδειγμα, το Allaire HomeSite (http://www.allaire.com/).

Απλώς να θυμάστε ότι κατά τη δημιουργία ενός προτύπου, πρέπει να αφήσετε κενές περιοχές στις οποίες θα εισαχθεί δυναμικό περιεχόμενο (μεταβλητού μήκους, φυσικά).

Αφού αναπτύξετε τη συνολική σχεδίαση για τα δελτία τύπου σας, απλώς εισαγάγετε τις συγκεκριμένες λέξεις-κλειδιά σας στα κενά κενά παραπάνω (δείτε παρακάτω για περισσότερα σχετικά με αυτό). Μόλις ένας χρήστης ζητήσει ένα δελτίο τύπου, ο διακομιστής Ιστού θα επεξεργαστεί τον κώδικα Perl και θα αντικαταστήσει τις λέξεις-κλειδιά στα πρότυπα με περιεχόμενο που εξάγεται από τη βάση δεδομένων, δηλαδή ένα συγκεκριμένο δελτίο τύπου.

Το τελευταίο πράγμα που πρέπει να κάνετε είναι να ανεβάσετε τα πρότυπά σας στον διακομιστή Web σε συγκεκριμένους καταλόγους. Μπορείτε να χρησιμοποιήσετε τον πελάτη FTP CuteFTP (http://www.cuteftp.com/), αλλά προτιμάμε να χρησιμοποιούμε το περιτύλιγμα αρχείου FAR. Δύο σημαντικά πράγματα που πρέπει να θυμάστε: πρώτον, τα αρχεία προτύπων πρέπει να έχουν ονόματα που τελειώνουν σε .pl και δεύτερον, πρέπει να έχουν εκτελέσιμο δικαίωμα (σε συστήματα UNIX, chmod 0755 template_name.pl). Αυτό είναι όλο!

Δεν είναι ιδιαίτερα δύσκολο να προστεθεί λειτουργικότητα στον μηχανισμό δημοσίευσης δελτίων τύπου. Μπορείτε να ταξινομήσετε συνδέσμους σε δελτία τύπου που είναι διαθέσιμα στη βάση δεδομένων κατά ημερομηνία ή τίτλο, ομαδοποιώντας τα ανά έτος. Ή, για παράδειγμα, μπορεί να θέλετε να εμφανίσετε ένα τυχαίο δελτίο τύπου στην ιστοσελίδα σας, παρέχοντας πληροφορίες από καιρό σε καιρό στους επισκέπτες ανεξάρτητα από το πότε πραγματικά δημοσιεύτηκε. Αλλά ίσως η πιο σημαντική και χρήσιμη λειτουργία θα είναι η προσθήκη μιας φόρμας HTML για την εισαγωγή του περιεχομένου του δελτίου τύπου και η ανάπτυξη ενός προγράμματος CGI στην Perl για την επεξεργασία αυτής της φόρμας και στη συνέχεια η τοποθέτηση του εγγράφου στη βάση δεδομένων. Θυμηθείτε ότι το CGI (Common Gateway Interface) είναι ένα πρωτόκολλο, μηχανισμός ή επίσημη συμφωνία μεταξύ ενός διακομιστή Web και ενός ξεχωριστού προγράμματος. Ο διακομιστής κωδικοποιεί δεδομένα εισόδου, όπως φόρμες HTML, και το πρόγραμμα CGI τα αποκωδικοποιεί και δημιουργεί μια ροή δεδομένων εξόδου. Η προδιαγραφή πρωτοκόλλου δεν λέει τίποτα για κάποια συγκεκριμένη γλώσσα προγραμματισμού. Επομένως, τα προγράμματα που συμμορφώνονται με αυτό το πρωτόκολλο μπορούν να γραφτούν σε σχεδόν οποιαδήποτε γλώσσα - C, C++, Visual Basic

, Delphi, Tcl, Python ή, όπως στην περίπτωσή μας, Perl.

Ας συνοψίσουμε μερικά αποτελέσματα. Ελπίζουμε ότι αυτό το άρθρο θα σας βοηθήσει να εκτιμήσετε τα πλεονεκτήματα της έννοιας των δυναμικών ιστοσελίδων έναντι των στατικών. Η εφαρμογή αυτής της ιδέας θα οδηγήσει σε μείωση της χειρωνακτικής εργασίας, θα βοηθήσει στην κατανομή του φόρτου εργασίας του διακομιστή και θα σας επιτρέψει να αυξήσετε γρήγορα την ποσότητα του περιεχομένου στον ιστότοπο. Ο συνδυασμός των Apache, MySQL και Perl θα παρέχει ένα σχεδόν δωρεάν, εύκολο στη χρήση, ευέλικτο στην εγκατάσταση και ρύθμιση παραμέτρων πολλαπλών πλατφορμών και επεκτάσιμο περιβάλλον ανάπτυξης.

Εδώ δεν θα εξετάσουμε τα χαρακτηριστικά της εγκατάστασής τους, καθώς, πρώτον, απλώς δεν υπάρχει αρκετός χώρος για αυτό το άρθρο και, δεύτερον, καθένα από αυτά τα εργαλεία συνοδεύεται από πολύ λεπτομερή τεκμηρίωση.

Δημιουργία βάσης δεδομένων στο MySQL DBMS Ανάπτυξη μοντέλου βάσης δεδομένωνΠρώτος και περισσότεροι

σημαντική δράση

Κατά τη δημιουργία μιας βάσης δεδομένων είναι η ανάπτυξη του μοντέλου της. Ας ξεκινήσουμε λοιπόν.

Βήμα 1

Πρέπει να ονομάσουμε κάπως τη βάση δεδομένων. Ας το ονομάσουμε db_website.

Βήμα 2

Πρέπει να ορίσουμε τα πεδία που θα περιέχει ο πίνακάς μας. Αυτά τα πεδία θα αντιπροσωπεύουν όλα τα στοιχεία του δελτίου τύπου. Το παράδειγμά μας χρησιμοποιεί πέντε πεδία: col_id (αριθμητικό αναγνωριστικό του δελτίου τύπου), col_title (τίτλος), col_date (ημερομηνία δημοσίευσης), col_fullstory (περιεχόμενο), col_author (όνομα συγγραφέα). Το πεδίο col_id θα περιέχει μοναδικό αναγνωριστικό, με την οποία ο χρήστης μπορεί να ζητήσει περιεχόμενο συγκεκριμένο δελτίο τύπου.

Δημιουργία Βάσης Δεδομένων

Τώρα πρέπει να δημιουργήσουμε μια σύνδεση με το MySQL DBMS και να δημιουργήσουμε τη βάση δεδομένων μας. Παρακάτω θα σας δείξουμε πώς να το κάνετε αυτό από γραμμή εντολών. Ωστόσο, υπάρχουν πολλά συστήματα διαχείρισης, ή διαχειριστές MySQL DBMS, που σας επιτρέπουν να το διαχειρίζεστε χρησιμοποιώντας ένα φιλικό GUI.

Πρώτα απ 'όλα, πρέπει οπωσδήποτε να γνωρίζετε τα βασικά της γλώσσας ερωτημάτων SQL (Structured Query Language). Το πακέτο MySQL DBMS περιλαμβάνει μια πλήρη περιγραφή των υποστηριζόμενων προδιαγραφών SQL. Αυτή η γλώσσα είναι εύκολα κατανοητή επειδή οι τελεστές της και οι κατασκευές τους είναι εύκολο να κατανοηθούν και να θυμηθούν. Για να δουλέψετε, θα χρειαστείτε τελεστές για τη δημιουργία (ΔΗΜΙΟΥΡΓΙΑ ή ΕΙΣΑΓΩΓΗ), την επιλογή (ΕΠΙΛΟΓΗ) και τη διαγραφή (ΑΠΟΣΤΟΛΗ ή ΔΙΑΓΡΑΦΗ) δεδομένων, καθώς και την αλλαγή τους (UPDATE, MODIFY). Σε συγκεκριμένα παραδείγματα θα χρησιμοποιήσουμε μόνο μερικά από αυτά.

Για να αποφύγετε τη δημιουργία λογαριασμών χρηστών και την εκχώρηση των απαραίτητων δικαιωμάτων πρόσβασης, ας υποθέσουμε ότι χρησιμοποιείτε τον λογαριασμό διαχειριστή (root).

σημαντική δράση

Ανοίξτε ένα παράθυρο τερματικού (εάν εργάζεστε σε γραφικό κέλυφος X Window OS Linux ή Windows OS 9x/NT/2000) και δημιουργήστε μια σύνδεση με το MySQL DBMS εισάγοντας mysql στη γραμμή εντολών. Θα πρέπει να σας ζητηθεί να εισαγάγετε εντολές mysql> ως απάντηση.

Βήμα 1

Ας δημιουργήσουμε τη βάση δεδομένων μας πληκτρολογώντας:

ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ db_website;

Αφού εισαγάγετε κάθε εντολή, μην ξεχάσετε να πληκτρολογήσετε το σύμβολο (;). Αυτό είναι πολύ σημαντικό γιατί σηματοδοτεί το τέλος της εισαγωγής εντολών στη MySQL.

Χρήση db_website.

Βήμα 4

Ας δημιουργήσουμε έναν πίνακα tbl_news_items, όπου ορίζουμε τον τύπο των δεδομένων που θα αποθηκευτούν στα πεδία του. Εισάγω:

1. CREATE TABLE tbl_news_items (2. col_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 3. col_title VARCHAR(100), 4. col_author VARCHAR(100), 5. col_body TEXT, 6. col_d.

Βήμα 5

Τώρα που δημιουργήσαμε έναν πίνακα για την αποθήκευση των δεδομένων μας, πρέπει να τον συμπληρώσουμε με μερικά δείγματα δεδομένων. Σημειώστε ότι στην παρακάτω εντολή δεν θα ορίσουμε το πεδίο col_id γιατί συμπληρώνεται αυτόματα καθώς προστίθενται νέα δεδομένα. Λάβετε επίσης υπόψη ότι η σύνταξη για την ημερομηνία είναι<год/месяц/день>.

Έτσι, στη γραμμή εντολών mysql>, πληκτρολογήστε την ακόλουθη εντολή.

8. INSERT INTO tbl_news_items (col_title, _ col_author, col_body, col_date) 9. VALUES (10. 'Το πρώτο μου δελτίο τύπου', 11. 'Το όνομά σας', 12. 'Αυτό το δελτίο τύπου είναι αποθηκευμένο στη βάση δεδομένων MySQL', 13 '2001/4/15' 14.);

Εισαγάγετε μερικά ακόμη παρόμοια ερωτήματα εισαγωγής. Για να δείτε τι είναι αποθηκευμένο στη βάση δεδομένων, στη γραμμή εντολών mysql>, πληκτρολογήστε:

ΕΠΙΛΟΓΗ * ΑΠΟ tbl_news_items;

Δημιουργία δυναμικών ιστοσελίδων στο Perl

Προετοιμασία για δουλειά

Για να εκτελέσετε προγράμματα Perl, θα χρειαστείτε έναν διερμηνέα Perl έκδοση 5.005 ή 5.6 των διανομών Perl Standard ή ActiveState Perl για UNIX ή Win32. Εάν αναπτύσσετε εφαρμογές για εκτέλεση με Win32, τότε το πακέτο από το ActiveState είναι κάπως πιο βολικό στη χρήση και περιλαμβάνει επίσης ένα βοηθητικό πρόγραμμα PPM για την εγκατάσταση πρόσθετων λειτουργικών μονάδων. Για να οργανώσουμε την αλληλεπίδραση των προγραμμάτων μας Perl με το MySQL DBMS, είναι απαραίτητο η μονάδα DBI να συμπεριληφθεί στη διανομή Perl. Δεδομένου ότι η ενότητα βασικά δεν κάνει τίποτα από μόνη της, αλλά μετατοπίζει όλες τις λειτουργίες αλληλεπίδρασης με βάσεις δεδομένων στο αντίστοιχο πρόγραμμα οδήγησης, απαιτείται η εγκατάσταση της βιβλιοθήκης DBD-Mysql (πρόγραμμα οδήγησης βάσης δεδομένων MySQL για τη μονάδα DBI). Όπως δήλωσε ο Tim Bunce, συγγραφέας και προγραμματιστήςκαθορισμένη ενότητα

, «Το DBI είναι ένα API για την οργάνωση της πρόσβασης σε βάσεις δεδομένων από προγράμματα Perl. Η προδιαγραφή DBI API ορίζει ένα σύνολο συναρτήσεων, μεταβλητών και κανόνων που χρησιμοποιούνται για διαφανή διασύνδεση με βάσεις δεδομένων." Η έννοια των προγραμμάτων οδήγησης βάσης δεδομένων είναι πολύ βολική επειδή στην εφαρμογή σας Perl χρησιμοποιείτε τυπικές κλήσεις DBI, οι οποίες στη συνέχεια προωθούν τις μονάδες στο κατάλληλο πρόγραμμα οδήγησης, το οποίο, με τη σειρά του, θα αλληλεπιδράσει άμεσα με τη βάση δεδομένων χωρίς να σας απαιτεί να μάθετετεχνικά χαρακτηριστικά

κάθε συγκεκριμένο DBMS. Υπάρχουν λοιπόν προγράμματα οδήγησης DBD::Sybase, DBD::Oracle, DBD::Informix κ.λπ. (Εικ. 1,).δεδομένα (Όνομα πηγής δεδομένων) για το πρόγραμμα οδήγησης ODBC (Open DataBase Connectivity), όπου πρέπει να επιλέξετε τον τύπο αυτού του DBMS, τη διεύθυνση κεντρικού υπολογιστή στον οποίο θέλετε να συνδεθείτε, το όνομα της βάσης δεδομένων και τα δεδομένα εξουσιοδότησης, δηλαδή το όνομα χρήστη και κωδικό πρόσβασης (Εικ. 3). Στη συνέχεια, χρησιμοποιώντας τη μονάδα DBI, αλληλεπιδράστε με τη βάση δεδομένων. Επιπλέον, το ActiveState Perl συνήθως συνοδεύεται από μια λειτουργική μονάδα Win32::ODBC (Win32-ODBC). Η εργασία με αυτό είναι λίγο διαφορετική από την εργασία με το DBI, αλλά συνολικά πολύ παρόμοια. Η μόνη διαφορά είναι ότι το Win32::ODBC είναι μια λειτουργική μονάδα μόνο για συστήματα Win32 και σας επιτρέπει να εργάζεστε με εγγενείς λειτουργίες ODBC πιο αποτελεσματικά από το DBD::ODBC.

Μπορεί να γίνει ένας παράλληλος μεταξύ ODBC και DBI. Το DBI είναι ένα ανάλογο του ODBC Administrator (διαχειριστής προγραμμάτων οδήγησης βάσης δεδομένων). Κάθε πρόγραμμα οδήγησης DBD αντιστοιχεί στις λειτουργίες του σε ένα πρόγραμμα οδήγησης ODBC. Το μόνο που μπορεί να σας μπερδέψει είναι το γεγονός ότι, όπως αναφέρθηκε παραπάνω, υπάρχει πρόγραμμα οδήγησης DBD::ODBC. Αλλά σας επιτρέπει μόνο να δημιουργήσετε επικοινωνία DBI με προγράμματα οδήγησης ODBC.

Για να εγκαταστήσετε το DBI και το DBD-Mysql, χρησιμοποιώντας το βοηθητικό πρόγραμμα PPM σε περιβάλλον Win32, εισαγάγετε στη γραμμή εντολών:

Ppm εγκατάσταση DBI

Λάβετε υπόψη ότι ο υπολογιστής σας πρέπει να είναι συνδεδεμένος στο Διαδίκτυο σε αυτό το σημείο. Εάν έχετε την αντίστοιχη μονάδα στον τοπικό σας δίσκο, χρησιμοποιήστεβασικές πληροφορίες

εισάγοντας την εντολή:

ppm βοήθεια εγκατάστασης

Για χρήστες UNIX, η εγκατάσταση της μονάδας DBI θα είναι σχεδόν ίδια με την εγκατάσταση άλλων λειτουργικών μονάδων Perl:

Tar –zxvf DBI-1.06.tar.gz cd DBI-1.06/ perl Makefile.PL make make test make install Μπορείτε επίσης να χρησιμοποιήσετε το κέλυφος CPAN. Εάν έχετε εγκατεστημένη στον υπολογιστή σας την έκδοση UNIX του πακέτου από το ActiveState, τότε μπορείτε να εργαστείτε μεβοηθητικό πρόγραμμα εγκατάστασης PPM. Μερικές φορές συμβαίνει ότι τα κελύφη CPAN και PPM δεν λειτουργούν εάνεταιρικά δίκτυα Ο υπολογιστής σας είναι συνδεδεμένος, έχει εγκατεστημένο τείχος προστασίας ήτείχος προστασίας (τείχος προστασίας). Σε αυτήν την περίπτωση, μόνο μονάδες μεκείμενα πηγής

, μεταφορτώθηκε με μη αυτόματο τρόπο. Για να τα εγκαταστήσετε και να συνδεθείτε σε Perl ή Apache, θα χρειαστείτε έναν διερμηνέα Perl, έναν μεταγλωττιστή C/C++ ή GCC/PGCC και ένα από τα βοηθητικά προγράμματα δημιουργίας (από έναν από τους κλώνους του UNIX, καθώς και το Microsoft Visual C++). nmake ή dmake. Έτσι, η διαδικασία εγκατάστασης μονάδων γίνεται κάπως πιο περίπλοκη.

Σχεδόν όλα συνοδεύονται από τεκμηρίωση "κατασκευής", οπότε δεν θα πρέπει να έχετε πολύ πρόβλημα. Εμφάνιση λίστας άρθρωνσυνδέστε το σε μια ιστοσελίδα. Ας ξεκινήσουμε με τη δημιουργία απλούστερη σελίδα, το οποίο εμφανίζει μια λίστα με όλα τα διαθέσιμα δελτία τύπου. Σημειώστε ότι από προεπιλογή Διακομιστής Ιστού Apache"σκεφτείτε" ότι όλα τα έγγραφά σας πρέπει να βρίσκονται στον κατάλογό του htdocs, αλλά εκτελέσιμα αρχεία- σε cgi-bin. Επομένως, πρέπει να τοποθετήσετε όλα τα αρχεία με την επέκταση .pl στον κατάλογο cgi-bin. Με τη σειρά του, δημιουργήθηκαν αρχείαΤα πρότυπα HTML πρέπει να τοποθετηθούν στον κατάλογο tpl. Η ιεραρχία του καταλόγου θα μοιάζει με αυτό:

/ (ρίζα οποιουδήποτε δίσκου) /local /local/usr /local/usr/bin /local/usr/cgi-bin /local/usr/htdocs /local/usr/tpl

Για συστήματα DOS/Windows, η διαδρομή προς το cgi-bin μπορεί να μοιάζει με αυτό:

C:\local\usr\cgi-bin

σημαντική δράση

Χρησιμοποιώντας το αγαπημένο σας επεξεργαστής κειμένου, δημιουργήστε ένα αρχείο pr-list-tpl.htm:

15. 16. 17. Δελτία τύπου 2001 18. 19. 20. @BLOCK@ 21.

22.

Αυτό το αρχείο προορίζεται να εμφανίσει μια λίστα με όλα τα διαθέσιμα δελτία τύπου.

Βήμα 1

Δημιουργήστε ένα αρχείο pr-list-block-tpl.htm, το οποίο θα εμφανίζει κάθε μπλοκ με το δελτίο τύπου που βρέθηκε με τη μορφή πίνακα:

23.

24. 25. 26.
@ΤΙΤΛΟΣ@
@ΣΥΓΓΡΑΦΕΑΣ@, _ @DATE@

Βήμα 2

Δημιουργήστε ένα αρχείο pr-content-tpl.htm που θα εμφανίζει το περιεχόμενο του δελτίου τύπου:

27. 28. 29. Δελτία τύπου 2001: @TITLE@ 30. 31. 32.

@ΤΙΤΛΟΣ@

33. 34. 35. 36. 37.
@ΤΙΤΛΟΣ@
Συγγραφέας: @ΣΥΓΓΡΑΦΕΑΣ@Ημερομηνία: @DATE@
@ΣΩΜΑ@
38. Εμφάνιση της λίστας με τα δελτία τύπου.. 39.

40.

Βήμα 4

Δημιουργήστε ένα σενάριο Perl pr-list-dbi.pl που θα διαβάζει δεδομένα από τη βάση δεδομένων db_website και, χρησιμοποιώντας αρχεία HTML προτύπων, θα εμφανίζει μια λίστα με δελτία τύπου (μπορείτε να βρείτε το κείμενο αυτού του σεναρίου στο CD μας).

Τώρα ας περάσουμε από τη λίστα κωδικών και ας δούμε πώς λειτουργεί το πρόγραμμα για την εμφάνιση λίστας δελτίων τύπου.

Οι γραμμές 1-9 είναι σαν ένα μπλοκ αρχικοποίησης στο οποίο δηλώνονται όλες οι καθολικές μεταβλητές και σταθερές:

41. #!/local/usr/bin/perl 42. 43. χρήση DBI; 44. $dbh = DBI->connect('dbi:mysql:db_website','root',''); 45. $path = "/local/usr/tpl"; 46. ​​$TPL_LIST = "$path/pr-list-tpl.htm"; 47. $TPL_LIST_BLOCK = "$path/pr-list-block-tpl.htm"; 48. 49. εκτύπωση "Content-type:text/html\n\n";

Αρχικά λέμε στον διακομιστή Web Apache τη διαδρομή προς το σημείο όπου βρίσκεται ο διερμηνέας Perl, η οποία εκτελείται όταν ζητηθεί το σενάριο, το ελέγχει για σφάλματα και στη συνέχεια το εκτελεί. Στη συνέχεια, δηλώνουμε το module DBI (DataBase Interface), οι μέθοδοι του οποίου θα χρησιμοποιηθούν στο πρόγραμμα για την αλληλεπίδραση με τη βάση δεδομένων (γραμμή 3). Στη συνέχεια, δημιουργούμε μια σύνδεση με τη βάση δεδομένων μας db_website(4) χρησιμοποιώντας ως όνομα εισόδου(διαχειριστής) και μια κενή συμβολοσειρά ως κωδικός πρόσβασης (η προεπιλεγμένη τιμή). Στη μεταβλητή $path υποδεικνύουμε τη διαδρομή όπου βρίσκονται τα αρχεία προτύπου HTML (5). Στις μεταβλητές $TPL_LIST και $TPL_LIST_BLOCK υποδεικνύουμε τα ονόματά τους (6, 7) αντίστοιχα. Στη συνέχεια, λέμε στον διακομιστή Ιστού ότι όλα τα εξερχόμενα δεδομένα πρέπει να παρουσιάζονται σε μορφή κειμένου/html MIME για έξοδο της ροής HTML στο πρόγραμμα περιήγησης του χρήστη (9).

Οι γραμμές 11-22 αντιπροσωπεύουν το σώμα του προγράμματος:

50. 51. open(L, "$TPL_LIST"); 52. ενώ ($line1= ) ( 53. chomp($line1); 54. if ($line1=~/\@BLOCK\@/) ( 55. read_db(); 56. ins_data(); 57. ) else ( 58. print "$line1 \n"; 59. ) 60. ) 61. κλείσιμο(L); 62. 63. $dbh->disconnect;

Ανοίξτε το αρχείο προτύπου pr-list-tpl.htm (11) και κοιτάξτε το σε βρόχο (12-20), γράφοντας κάθε γραμμή ανάγνωσης στη μεταβλητή $line. Κατά τη διάρκεια κάθε επανάληψης, ελέγχουμε για την παρουσία της λέξης-κλειδιού @BLOCK@ (14-19) σε αυτή τη γραμμή, πράγμα που σημαίνει ότι θα πρέπει να εισαχθεί ένα μπλοκ με δελτίο τύπου σε αυτό το σημείο. Μόλις βρεθεί, καλούμε τις διαδικασίες read_db() και ins_data().

Οι γραμμές 26-39 είναι το σώμα της διαδικασίας read_db(), που έχει σχεδιαστεί για να διαβάζει τα περιεχόμενα του πίνακα tbl_news_items, ο οποίος αποθηκεύει τα δελτία τύπου μας:

64. 65. 66. sub read_db ( 67. $c=0; 68. my($sql) = "SELECT * FROM tbl_news_items"; 69. $rs = $dbh->prepare($sql); 70. $rs ->execute; 71. while (my $ref = $rs->fetchrow_hashref()) ( 72. $id[$c] = "$ref->('col_id')"; 73. $title[$c] = "$ref->('col_title')" 74. $author[$c] = "$ref->('col_author')" 75. $date[$c] = "$ref->('; col_date')"; 76. $c++; 77. ) 78. $rs->finish(); 79. )

Αρχικοποιούμε τον μετρητή $c=0, δημιουργούμε ένα ερώτημα για την επιλογή όλων των δεδομένων από τον πίνακα (28), εκτελούμε το ερώτημα (29, 30) και μεταφέρουμε τα δεδομένα στο σύνολο εγγραφών (σύνολο εγγραφών) $rs. Στη συνέχεια, σε έναν βρόχο (31-37), εξάγουμε δεδομένα από το σύνολο εγγραφών χρησιμοποιώντας τη μέθοδο fetshrow_hashref και επιστρέφουμε έναν σύνδεσμο στον συσχετιστικό πίνακα %ref (31) που περιέχει τα ονόματα και τις τιμές των πεδίων τρέχουσα καταχώρηση. Γράφουμε τα εξαγόμενα δεδομένα (32-35) στους συνηθισμένους πίνακες @id, @title, @author και @date που αντιστοιχούν στους τύπους τους.

Κλείνουμε το ρεκόρ (38).

Γραμμές 41-53 - το σώμα της διαδικασίας ins_data(), η οποία υλοποιεί την εισαγωγή δεδομένων που εξάγονται από τη βάση δεδομένων στη ροή εξερχόμενων δεδομένων. γραμμές 55-63 - το σώμα της διαδικασίας pr_block(), που καλείται σε βρόχο από τη διαδικασία ins_data():<$c; $i++) { 84. $line = &pr_block; 85. 86. $line =~ s/\@NUMBER\@/$id[$i]/; 87. $line =~ s/\@TITLE\@/$title[$i]/; 88. $line =~ s/\@AUTHOR\@/$author[$i]/; 89. $line =~ s/\@DATE\@/$date[$i]/; 90. $line =~ s/\@READ\@/$toread/; 91. print "$line"; 92. } 93. } 94. 95. sub pr_block { 96. my($block) = ‘’; 97. open (B, "$TPL_LIST_BLOCK"); 98. while ($line=80. 81. sub ins_data ( 82. $toread = "pr-read-dbi.pl"; 83. για ($i=0; $i

Έτσι, έχοντας λάβει τη μέγιστη τιμή του μετρητή $c ως αποτέλεσμα της διαδικασίας read_db(), στον βρόχο (43-52) ξεκινάμε τη διαδικασία pr_block(), η οποία διαβάζει τα περιεχόμενα του προτύπου HTML pr-list- block-tpl.htm και την εγγράφει στη μεταβλητή $block (59), η τιμή της οποίας στη συνέχεια επιστρέφεται (62) στη μεταβλητή $line (44) της διαδικασίας ins_data(). Περαιτέρω στον ίδιο βρόχο αντικαθιστούμε (46-50) τις λέξεις-κλειδιά @NUMBER@, @TITLE@, @AUTHOR@, @DATE@, @READ@ που βρίσκονται στη γραμμή εξερχόμενης ροής $ με τις τιμές του πίνακα που αντιστοιχούν σε αυτήν την επανάληψη του βρόχου ($i) @id, @title, @author, @date και της μεταβλητής $toread.

Εκτύπωση του κειμένου του δελτίου τύπου

Αφού εμφανίσουμε μια λίστα με όλα τα δελτία τύπου που είναι διαθέσιμα στη βάση δεδομένων (Εικ. 4), πρέπει να δώσουμε στον χρήστη την ευκαιρία να δει το κείμενο οποιουδήποτε από αυτά (μπορείτε επίσης να βρείτε το αντίστοιχο σενάριο στο CD μας).

Το νέο σενάριο pr-read-dbi.pl θα διαφέρει ελαφρώς από το pr-list-dbi.pl που έχουμε ήδη δημιουργήσει.

Αυτή η καταχώριση είναι κατά 98% παρόμοια με την Καταχώριση 1, αν και υπάρχουν κάποιες μικρές διαφορές:

  • η βιβλιοθήκη CGI είναι συνδεδεμένη για την ανάγνωση της παραμέτρου id (9) από τη συμβολοσειρά ερωτήματος (για παράδειγμα, http://localhost/cgi-bin/pr-content-dbi.pl?id=1).
  • χρησιμοποιείται μόνο ένα πρότυπο HTML (pr-content-tpl.htm).
  • το ερώτημα της βάσης δεδομένων συμπληρώνεται με μια υπό όρους δήλωση SQL WHERE για την ανάκτηση όλων των δεδομένων που αντιστοιχούν σε ένα συγκεκριμένο δελτίο τύπου από το col_id.
  • Το πεδίο col_body με το κείμενο του επιλεγμένου δελτίου τύπου διαβάζεται επίσης από τη βάση δεδομένων.

Δημιουργία νέου δελτίου τύπου

Ας επεκτείνουμε τη λειτουργικότητα του συστήματός μας προσθέτοντας τη δυνατότητα δημιουργίας νέων δελτίων τύπου, χωρίς την ανάγκη άμεσης συνεργασίας με τη βάση δεδομένων για την αναπλήρωση του πίνακα tbl_news_items με νέες πληροφορίες.

Έτσι, το νέο πρόγραμμα Perl (το οποίο, όπως τα δύο προηγούμενα, είναι σε ένα CD) θα διαφέρει από τα προηγούμενα κυρίως στο ότι δεν προορίζεται για την εμφάνιση δεδομένων, αλλά για την προσθήκη τους στη βάση δεδομένων. Επομένως, πρέπει να αλλάξουμε ελαφρώς το τμήμα που είναι υπεύθυνο για την αλληλεπίδραση με τη βάση δεδομένων χρησιμοποιώντας το ερώτημα INSERT SQL και τους αντίστοιχους τελεστές της μονάδας DBI.

Οι γραμμές 12-18 είναι το σώμα του κύριου προγράμματος:

12. if ($cmd ne "add") ( 13. &show_form; 14. ) other ( 15. $dbh = DBI->connect('dbi:mysql:db_website', _ 'root',''); 16. &add_pr; 17. dbh->disconnect;

Εδώ ελέγχουμε αν έχει ληφθεί η εντολή προσθήκης του δελτίου τύπου στη βάση δεδομένων.

Μόλις φτάσει, δημιουργούμε μια σύνδεση με τη βάση δεδομένων (15), εκτελούμε την υπορουτίνα app_pr() (16) και τερματίζουμε τη σύνδεση (17). Εάν δεν υπήρχε εντολή, τότε απλώς εμφανίζουμε τη φόρμα συμπλήρωσης (13) για τα δεδομένα του δελτίου τύπου - τη διαδικασία show_form().

Οι γραμμές 20-36 είναι το σώμα της διαδικασίας προσθήκης δελτίου τύπου pr_add():
19. 20. sub add_pr ( 21. $title = $q->param("pr_title"); 22. $author = $q->param("pr_author"); 23. $body = $q->param( "pr_body"); 24. $body =~ s/\r\n/;

/σολ; 25. 26. my($sql) = "INSERT INTO tbl_news_items (col_title,col_author,col_body,col_date) VALUES (\'$title\',\'$author\',\'$body\',CURDATE()) "; 27. $rs = $dbh->do($sql); 28. 29. if ($@) ( 30. $rc = $dbh->rollback; 31. ) else ( 32. $rc = $dbh->commit; 33. ) 34. 35. print "Location: /cgi -bin/pr-list-dbi.pl\n\n"; 36.) Αρχικά, επεξεργαζόμαστε τα δεδομένα της φόρμας (22-25), συνθέτουμε ένα ερώτημα SQL (27) και το εκτελούμε (27) χρησιμοποιώντας τη μέθοδο DBI $dbh->do(). Δεδομένου ότι η διαδικασία εισαγωγής δεδομένων στη βάση δεδομένων εκτελείται εδώ, πρέπει να φροντίσετε για τη δυνατότητα ακύρωσης της λειτουργίας σε περίπτωση αποτυχίας. Για να γίνει αυτό, εισαγάγαμε τον κωδικό ακύρωσης συναλλαγής και επαναφοράςπροηγούμενη κατάσταση

(30-34). Εάν η $dbh->do() αποτύχει, απορρίπτουμε τις αλλαγές που έγιναν (31). Εάν δεν προκύψει αποτυχία, επιβεβαιώνουμε τις αλλαγές που έγιναν (33). Στη συνέχεια, μετά από όλα τα βήματα, απλώς μεταβαίνουμε στη σελίδα με μια λίστα με όλα τα δελτία τύπου (36).

Οι γραμμές 37-55 είναι το σώμα της διαδικασίας εξόδου της φόρμας για την εισαγωγή πληροφοριών σχετικά με ένα νέο δελτίο τύπου (χρησιμοποιώντας το πρότυπο HTML του οποίου το όνομα καθορίζεται στη μεταβλητή $TPL_INSERT, pr-add-tpl.htm): 37. 38. sub show_form ( 39. print "Content-type:text/html\n\n"; 40. 41. open (L, "$TPL_INSERT"); 42. while ($line=

) ( 43. chomp($line); 44. if ($line=~/\@/) ( 45. if ($line=~/\@ADD\@/) ( 46. $toadd = "pr-add -dbi.pl"; 47. $line =~ s/\@ADD\@/$toadd/; 48. ) else ( 49. $tolist = "pr-list-dbi.pl"; 50. $line =~ s/\@LIST\@/$tolist/ 51. ) 52. ) 53. print "$line\n" 54.

Υπερφόρτωση συστήματος Εφόσον αναπτύσσετε έναν δυναμικό ιστότοπο, ο όγκος των πληροφοριών σε αυτόν μπορεί να αυξηθεί αρκετά γρήγορα. Επιπλέον, καθώς αυξάνεται η δημοτικότητα του πόρου σας, αυξάνεται και ο αριθμός των επισκεπτών του, γεγονός που μπορεί να οδηγήσει σε υπερφόρτωση διακομιστή, δηλαδή σε μείωση της απόδοσης του συστήματος. Πριν ξεκινήσετε να αναζητάτε τρόπους για να αυξήσετε την ισχύ του υλικού και προσπαθήστε να βρείτε μια διαμόρφωσηνέο σύστημα , μπορείτε να προσπαθήσετε να εξαλείψετε ένα από ταυπερβολική κατανάλωση RAM. Ο ένοχος μπορεί να είναι η ίδια Perl. Το γεγονός είναι ότι κάθε φορά που αποκτάτε πρόσβαση σε ένα ή άλλο σενάριο Perl, ο διακομιστής Web φορτώνει τον διερμηνέα ΕΜΒΟΛΟ(καταλαμβάνει από 500-1000 KB στον σκληρό δίσκο) και ο τελευταίος αναλύει το πρόγραμμα από την αρχή μέχρι το τέλος αναζητώντας συντακτικά λάθη. Μετά από αυτό, το διαβάζει ξανά, αρχικοποιώντας μεταβλητές και συναρτήσεις, διαβάζοντας τα δεδομένα εισόδου (παραμέτρους), επεξεργάζεται και επιστρέφει τα αποτελέσματα. Μπορείτε να φανταστείτε τι θα συμβεί αν εκατοντάδες επισκέπτες στον ιστότοπό σας θέλουν να βλέπουν τα δελτία τύπου σας ταυτόχρονα;

Για να επιταχύνουμε αυτή τη διαδικασία, δημιουργήσαμε ειδικές λύσεις, αντιπροσωπεύοντας πρόσθετες ενότητεςγια τον διακομιστή Web Apache - mod_fastcgi και mod_perl.

Η ενότητα FastCGI (mod_fastcgi) προϋποθέτει ευρεία εφαρμογήμέσα ανταλλαγής δεδομένων μεταξύ εκτελούμενων διεργασιών (εργασιών) του λειτουργικού συστήματος. Στην αρχή της λειτουργίας του, ο διακομιστής Web ενεργοποιεί ένα πρόγραμμα CGI και αφήνει αυτό το πρόγραμμα και πολλά αντίγραφά του να εκτελούνται σε φόντο. Τυχόν αιτήματα προς το πρόγραμμα απλώς θα μεταφερθούν σε ήδη ενεργά αντίγραφα, τα οποία θα απαλλάξουν τον διακομιστή από το πρόσθετο φορτίο που σχετίζεται με επανενεργοποίησηδιαδικασία.

Η ενότητα mod_perl σάς επιτρέπει να φορτώσετε την Perl στη μνήμη RAM στον ίδιο χώρο διευθύνσεων με τον ίδιο τον διακομιστή Web Apache και να αφήσετε την Perl στη μνήμη μέχρι να τερματιστεί η τελευταία, αποτρέποντας τη φόρτωση του επόμενου αντιγράφου του διερμηνέα κατά την πρόσβαση σε ένα πρόγραμμα CGI. Αυτή η ενότητα χρησιμοποιείται πιο συχνά από το FastCGI επειδή δεν απαιτεί αλλαγές στο πρόγραμμα.

ComputerPress 6"2001

Νατάσα 30 Ιουνίου 2012 στις 2:04 μ.μ

I/O σε Perl

  • ντουλάπα *

Γειά σου!

Έχοντας αρχίσει να διαβάζω το βιβλίο «Schwartz R., Foy B., Phoenix T. - Perl. Ας μελετήσουμε βαθύτερα. 2η έκδοση», κατάλαβα ότι ήμουν λίγο μπερδεμένος στους τρόπους Perl I/O. Για να το κάνω αυτό, αποφάσισα να κάνω αυτήν την περίληψη, την οποία θέλω να επιστήσω την προσοχή σας.

Εργασία με επιχειρήματα κλήσης σεναρίου
Τα ορίσματα για την κλήση σεναρίου εισάγονται στον πίνακα @ARGV, π.χ. για την επόμενη κλήση

$ perl test.pl μάθημα1 μάθημα2 μάθημα3

Ο πίνακας @ARGV θα περιέχει qw/μάθημα1 μάθημα2 μάθημα3/.

Εργασία με τον πίνακα @ARGV ως προεπιλεγμένη μεταβλητή
Μπορείτε να εργαστείτε με τον πίνακα @ARGV ως προεπιλεγμένη μεταβλητή (παρόμοια με $_ ή @_).

Η γραμμή μου $ = shift; my $line = shift @ARGV; my $line = pop; my $line = pop @ARGV;

Αυτά τα δύο ζεύγη γραμμών είναι ισοδύναμα, με μία εξαίρεση - οι εκδόσεις με το προεπιλεγμένο όρισμα δεν πρέπει να καλούνται μέσα στην υπορουτίνα, επειδή έχει τη δική του προεπιλεγμένη μεταβλητή - @_. Εδώ είναι ένα παράδειγμα:

Χρησιμοποιήστε Modern::Perl; χρησιμοποιήστε utf8? $arg1 μου = shift; # η προεπιλογή είναι ένας πίνακας @ARGV πείτε "arg1: $arg1"; my @name_and_arg = get_name_and_arg ("TheAthlete"); πείτε "(όνομα arg2) = (@name_and_arg)"; sub get_name_and_arg ( my $name = shift; # default to array @_ my $arg2 = shift @ARGV; # χρησιμοποιήστε ρητά @ARGV return ($name, $arg2); )

$ perl test.pl γεια σου κόσμο
arg1: γεια
(όνομα arg2) = (Ο κόσμος των αθλητών)
$

Στην πραγματικότητα, η λειτουργία pop εκτελείται αρκετά σπάνια.

Ανάγνωση δεδομένων από τυπική είσοδο
Μπορείτε να λάβετε δεδομένα από τυπική είσοδο χρησιμοποιώντας τον τελεστή . Η εκτέλεση αυτού του τελεστή σε ένα βαθμωτό πλαίσιο δίνει επόμενη γραμμήδεδομένα:

; # Διαβάστε την επόμενη γραμμή chomp $name. # Αφαιρέστε το τελικό πρόγραμμα, πείτε "Name: $name";

$ perl test.pl
Εισαγάγετε όνομα: Fred
Όνομα: Φρεντ
$

Όταν φτάσει στο τέλος του αρχείου (στο σε αυτό το παράδειγμαΑυτό είναι η πληκτρολόγηση Ctrl+d στο Linux ή Ctrl+z στα Windows αντί να πληκτρολογήσετε ένα όνομα) ο τελεστής γραμμή προς γραμμή επιστρέφει unef. Για να γίνει πιο σαφές, αυτό το παράδειγμα μπορεί να ξαναγραφτεί ως εξής:

Εκτύπωση "Εισαγάγετε όνομα: "; το $όνομά μου = ; # Διαβάστε την επόμενη γραμμή εάν (καθορίζεται $name) ( chomp $name; # Remove terminator πείτε "Name: $name"; ) other ( πείτε " Κενό κορδόνιεισαγωγή"; )

$ perl test.pl
Εισαγάγετε όνομα: ή
Κενή γραμμή εισόδου
$

Επίσης, αυτή η περίσταση χρησιμοποιείται συχνά για την έξοδο από έναν βρόχο:

Το όνομά μου; εκτύπωση "Εισαγάγετε όνομα: "; ενώ (καθορίζεται ($name = )) ( chomp $name; πείτε "Name: $name"; )

$ perl test.pl
Εισαγάγετε όνομα: Vasya
Όνομα: Βάσια
Πέτυα
Όνομα: Petya
Κόλια
Όνομα: Kolya
ή
$

Για μια απλή κατάσταση όπως αυτή, υπάρχει μια συντομευμένη έκδοση:

Εκτύπωση "Εισαγάγετε όνομα: "; ενώ ( ) (chomp; πείτε "Όνομα: $_"; )

Αυτή η έκδοση θα πρέπει να χρησιμοποιείται μόνο για απλές επιλογές. Για πιο σύνθετες δομές, είναι καλύτερο να χρησιμοποιείτε επώνυμες μεταβλητές αντί για προεπιλεγμένες μεταβλητές.

Ο τελεστής εισόδου γραμμής μπορεί επίσης να λειτουργήσει σε περιβάλλον λίστας:

Τα @ονόματά μου; εκτύπωση "Εισαγάγετε ονόματα: " chomp(@names = ) πείτε "names: @names";

$ perl test.pl
Εισαγάγετε ονόματα: Fred
Η Βίλμα
Κόλια
Sanya
ονόματα: Fred Wilma Kolya Sanya

Εισαγωγή δεδομένων χειριστή<>
Χειριστής<>είναι ένας ειδικός τύπος τελεστή εισόδου γραμμής. Αλλά αντί να λαμβάνει δεδομένα από το πληκτρολόγιο, τα παίρνει από πηγές που επιλέγει ο χρήστης:

Test1.txt
κείμενο δοκιμής 1

Test2.txt
κείμενο test2

Test3.txt
κείμενο test3

Test.pl
χρησιμοποιήστε Modern::Perl; χρησιμοποιήστε utf8? η γραμμή μου $; ενώ (ορίζεται($line =<>)) ( chomp $line, πείτε $line; )

$ perl test.pl test1.txt test2.txt test3.txt
κείμενο δοκιμής 1
κείμενο test2
κείμενο test3

Όπως και με τον τελεστή εισόδου γραμμής, αυτό το πρόγραμμα μπορεί να συντομευτεί σημαντικά:

Χρησιμοποιήστε Modern::Perl; χρησιμοποιήστε utf8? ενώ (<>) (chomp; πω;)

Αυτό το πρόγραμμαπερνά από κάθε γραμμή σε κάθε αρχείο διαδοχικά. Όταν χρησιμοποιείτε τον χειριστή<>όλα μοιάζουν σαν τα αρχεία εισόδου να συνδυάζονται σε ένα μεγάλο αρχείο. Χειριστής<>επιστρέφει unef (που προκαλεί έξοδο ενώ βρόχος) μόνο στο τέλος όλων των εισόδων.

Λήψη λίστας αρχείων με βάση ένα πρότυπο.
Εάν χρειάζεται να λάβετε μια λίστα αρχείων χρησιμοποιώντας ένα μοτίβο παρόμοιο με τις κατασκευές *.* (MS-DOS, Windows) και *.h (UNIX), μπορείτε να χρησιμοποιήσετε την ακόλουθη σημείωση:

Η @λίστα μου =<*.c>; my @list = glob(„*.c“);

Επίσης χειριστή<>μπορεί να ισχύει για περιγραφές αρχείων, αλλά δεν θα καλύψω αυτό το θέμα σε αυτό το άρθρο.

Ετικέτες: perl, είσοδος-έξοδος

Καθώς εργάζεστε καθημερινά για να ενημερώνετε το περιεχόμενο του ιστότοπού σας με ενδιαφέρον περιεχόμενο, πιθανότατα αναρωτιέστε ότι εκατοντάδες νέες τοποθεσίες Web δημιουργούνται κάθε μέρα και εκατοντάδες νέα έγγραφα προστίθενται κάθε μέρα. Πώς δημιουργούνται όλοι αυτοί οι νέοι πίνακες σελίδων και πώς ενημερώνονται τόσο γρήγορα; Όλα αυτά δεν είναι τόσο δύσκολα όσο φαίνεται με την πρώτη ματιά, αφού χρησιμοποιεί την έννοια των δυναμικών ιστοσελίδων.

Σε αυτό το άρθρο θα εξετάσουμε τα βήματα δημιουργίας ενός μηχανισμού για τη δημοσίευση δελτίων τύπου σε μια τοποθεσία Web. Ο ιστότοπός μας θα συνδέεται άμεσα με δελτία τύπου που είναι αποθηκευμένα στη βάση δεδομένων με ιστοσελίδες προτύπων. Στόχος μας δεν ήταν να εισαγάγουμε τους αναγνώστες στα βασικά των εργαλείων ανάπτυξης ιστοσελίδων, καθώς έχουν γραφτεί πολλά βιβλία και άρθρα σχετικά με αυτό. Αυτό το άρθρο προορίζεται κυρίως για εκείνους τους χρήστες που έχουν ήδη εμπειρία στη δημιουργία ιστοσελίδων και απλών τοποθεσιών. Ο κύριος στόχος μας είναι να σας δείξουμε πώς να ξεκινήσετε την ανάπτυξη της πρώτης σας δυναμικής τοποθεσίας Web. Για να κατανοήσετε το άρθρο, καλό είναι να έχετε βασικές γνώσεις αρχιτεκτονικών πληροφοριακά συστήματα, σχετικά με τη γλώσσα σήμανσης υπερκειμένου (HTML) και τη γλώσσα προγραμματισμού Perl. Για να δημιουργήσουμε αυτόν τον ιστότοπο θα χρησιμοποιήσουμε τρεις ισχυρές ανοιχτές τεχνολογίες: Apache, MySQL και Perl/DBI.

Για να δημιουργήσουμε αυτόν τον ιστότοπο θα χρησιμοποιήσουμε τρεις ισχυρές ανοιχτές τεχνολογίες: Apache, MySQL και Perl/DBI.

Πριν ξεκινήσετε την ανάπτυξη μιας δυναμικής τοποθεσίας Web, είναι σημαντικό να κατανοήσετε τι είναι μια στατική τοποθεσία Web και τις στατικές ιστοσελίδες που αποτελούν τον πυρήνα της. Οι στατικές ιστοσελίδες δημιουργούνται χειροκίνητα, στη συνέχεια αποθηκεύονται και αποστέλλονται στον ιστότοπο. Κάθε φορά που χρειάζεται να αλλάξει το περιεχόμενο μιας τέτοιας σελίδας, ο χρήστης το τροποποιεί στον υπολογιστή εργασίας του, συνήθως χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας HTML, το αποθηκεύει και στη συνέχεια το ανεβάζει ξανά στον ιστότοπο. Ρίχνοντας μια προσεκτική ματιά σε κάποια πύλη, ας πούμε το CNN.com ή το BBC.co.uk, μπορεί να σκεφτείτε ότι αυτές οι εταιρείες προσελκύουν έναν στρατό σχεδιαστών διάταξης για να ενημερώσουν το περιεχόμενο των τοποθεσιών τους. Στην πραγματικότητα, υπάρχει καλύτερος τρόπος - χρησιμοποιώντας την έννοια του δυναμικού ιστότοπου.

- χρήση της έννοιας ενός δυναμικού ιστότοπου.

Κάθε σελίδα δυναμικών τοποθεσιών Web που αποδίδεται βασίζεται σε μια σελίδα προτύπου στην οποία εισάγεται συνεχώς μεταβαλλόμενο περιεχόμενο, το οποίο συνήθως αποθηκεύεται σε μια βάση δεδομένων. Όταν ένας χρήστης ζητά μια σελίδα, οι σχετικές πληροφορίες ανακτώνται από τη βάση δεδομένων, εισάγονται σε ένα πρότυπο για να σχηματιστεί μια νέα ιστοσελίδα και αποστέλλονται από τον διακομιστή Web στο πρόγραμμα περιήγησης του χρήστη, το οποίο τις εμφανίζει σωστά. Εκτός από το περιεχόμενο πληροφοριών, τα στοιχεία πλοήγησης για μια τοποθεσία Web μπορούν επίσης να δημιουργηθούν δυναμικά. Με αυτόν τον τρόπο, εάν χρειάζεται να ενημερώσετε το περιεχόμενο του ιστότοπού σας, απλώς προσθέτετε κείμενο για τη νέα σελίδα, το οποίο στη συνέχεια εισάγεται στη βάση δεδομένων χρησιμοποιώντας έναν συγκεκριμένο μηχανισμό. Το αποτέλεσμα είναι ότι η τοποθεσία Web φαίνεται να ενημερώνεται από μόνη της.

Γιατί οι δυναμικοί ιστότοποι είναι καλύτεροι

Αμέσως μετά τη δημιουργία και την κυκλοφορία μιας δυναμικής ιστοσελίδας, αρχίζουν να εμφανίζονται τα πλεονεκτήματά της. Έχετε πλέον στη διάθεσή σας σχετικά μικρή ποσότητασελίδες προτύπων, με τη βοήθεια των οποίων δημιουργούνται εκατοντάδες, ίσως και χιλιάδες ιστοσελίδες. Η εμφάνιση (σχεδίαση) του ιστότοπου μπορεί εύκολα να αλλάξει τροποποιώντας αυτά τα πρότυπα. Η αλλαγή των περιεχομένων της βάσης δεδομένων μπορεί να γίνει μέσω της διεπαφής Web χρησιμοποιώντας μια φόρμα HTML, χωρίς να παρεισφρύουμε στις τεχνικές λεπτομέρειες κάθε συγκεκριμένου DBMS.

Κάθε σελίδα με απόδοση δυναμικών τοποθεσιών Web βασίζεται σε μια σελίδα προτύπου στην οποία εισάγεται συνεχώς μεταβαλλόμενο περιεχόμενο, που συνήθως αποθηκεύεται σε μια βάση δεδομένων. Όταν ένας χρήστης ζητά μια σελίδα, οι σχετικές πληροφορίες ανακτώνται από τη βάση δεδομένων, εισάγονται σε ένα πρότυπο για να σχηματιστεί μια νέα ιστοσελίδα και αποστέλλονται από τον διακομιστή Web στο πρόγραμμα περιήγησης του χρήστη, το οποίο τις εμφανίζει σωστά. Εκτός από το περιεχόμενο πληροφοριών, τα στοιχεία πλοήγησης για μια τοποθεσία Web μπορούν επίσης να δημιουργηθούν δυναμικά. Με αυτόν τον τρόπο, εάν χρειάζεται να ενημερώσετε το περιεχόμενο του ιστότοπού σας, απλώς προσθέτετε κείμενο για τη νέα σελίδα, το οποίο στη συνέχεια εισάγεται στη βάση δεδομένων χρησιμοποιώντας έναν συγκεκριμένο μηχανισμό.

Το πρώτο πράγμα που χρειάζεστε για να δημιουργήσετε μια δυναμική τοποθεσία είναι ένας διακομιστής Web, όπως ο Apache.

Ένας διακομιστής Web μπορεί να χρησιμοποιηθεί για την εξυπηρέτηση ενός ηλεκτρονικού καταστήματος, ενός διακομιστή ειδήσεων, μιας μηχανής αναζήτησης, ενός συστήματος εξ αποστάσεως εκπαίδευσης, ακόμη και για όλους τους παραπάνω τομείς. Η επιλογή ενός διακομιστή Ιστού εξαρτάται από το είδος της δραστηριότητας που ένα άτομο ή ένας οργανισμός σκοπεύει να συμμετάσχει στο Διαδίκτυο.

Λίγες στρατηγικές επιχειρηματικές αποφάσεις είναι τόσο σημαντικές όσο η επιλογή μιας πλατφόρμας διακομιστή Web. Τα χαρακτηριστικά του διακομιστή είναι ένας εξαιρετικά σημαντικός παράγοντας για τον καθορισμό της αξιοπιστίας του κόμβου, της ανταπόκρισής του στα αιτήματα του πελάτη, καθώς και για τις προσπάθειες που πρέπει να γίνουν για να διατηρηθεί σε κατάσταση λειτουργίας. Με τη σωστή επιλογή εξαρτημάτων και ποιοτικό σχεδιασμό, ένας ιστότοπος μπορεί να γίνει ένας νέος, πιο βολικός τρόπος αλληλεπίδρασης πελατών και συνεργατών με την εταιρεία σας. Η υπερφόρτωση του διακομιστή Web μπορεί να προκαλέσει τη μη διαθεσιμότητα του διακομιστή βάσης δεδομένων ή κάποιου άλλου πόρου στους πελάτες.

Οι μεγάλες εταιρείες μέχρι πρόσφατα βασίζονταν στον Microsoft Internet Information Server, το Netscape FastTrack, το IBM WebSphere και το Apache χρησιμοποιούνταν κυρίως από μικρές εταιρείες. Ωστόσο, τώρα η κατάσταση έχει αλλάξει κάπως και ο Apache αρχίζει να υποστηρίζει την απόδοση ορισμένων μεγάλων έργων στο Διαδίκτυο, ιδίως του Yahoo.

Μπορείτε να βρείτε την πλήρη έκδοση του άρθρου στο CD-ROM μας.

Το Apache παρέχει πλούσιες δυνατότητες που σας επιτρέπουν να προσαρμόσετε τον διακομιστή Ιστού σας για να ταιριάζει στις ανάγκες μεμονωμένων και εταιρικών χρηστών. Η ρύθμιση παραμέτρων γίνεται χρησιμοποιώντας οδηγίες που περιέχονται στα αρχεία διαμόρφωσης. Ο Apache σάς επιτρέπει να δημιουργείτε εικονικούς ιστότοπους και λειτουργεί επίσης ως διακομιστής μεσολάβησης. Εάν θέλετε να παρέχετε πρόσβαση στο περιεχόμενο διακομιστή μόνο σε περιορισμένο αριθμό ατόμων, ο διακομιστής Ιστού μπορεί να ρυθμιστεί έτσι ώστε κατά την πρόσβαση σε συγκεκριμένους καταλόγους, ο διακομιστής να ελέγχει τα ονόματα σύνδεσης και τους κωδικούς πρόσβασης στη δική του βάση δεδομένων ή σε μία από τις βάσεις δεδομένων που είναι συνδεδεμένες σε αυτόν .

Στη συνέχεια, πρέπει να αποφασίσετε πώς θα αποθηκεύσετε το περιεχόμενο που εμφανίζεται στην ιστοσελίδα. Σε αυτό το άρθρο, χρησιμοποιώντας ένα συγκεκριμένο παράδειγμα, θα δείξουμε πώς να δημιουργήσουμε μια βάση δεδομένων στο MySQL DBMS, η οποία θα μας επιτρέψει να χωρίσουμε το περιεχόμενο Ιστού σε πίνακες που περιέχουν πεδία και εγγραφές δεδομένων. Ένα πεδίο είναι μια διακριτή μονάδα δεδομένων σε έναν πίνακα. Για παράδειγμα, μπορούμε να δημιουργήσουμε έναν πίνακα tbl_news_items με τα πεδία col_title, col_date, col_fullstory, col_author. Το MySQL DBMS είναι μια εξαιρετική επιλογή για τη δημιουργία μιας τέτοιας βάσης δεδομένων λόγω της ευκολίας χρήσης και διαχείρισης, της δωρεάν διανομής για διάφορες πλατφόρμες, συμπεριλαμβανομένων των Linux και Windows, και της ταχέως αυξανόμενης δημοτικότητάς της.

Μετά από αυτό, θα δημιουργήσουμε δυναμικές σελίδες προτύπου HTML. Για να αναπτύξουμε εφαρμογές για αλληλεπίδραση με τη βάση δεδομένων και τα πρότυπα, θα χρησιμοποιήσουμε τη γλώσσα Perl.

Στην πραγματικότητα, πρέπει να δημιουργήσουμε τρία προγράμματα ή σενάρια Perl: το ένα θα εμφανίζει συνδέσμους προς όλα τα διαθέσιμα δελτία τύπου (pr-list-dbi.pl), το άλλο θα εμφανίζει τα περιεχόμενα του επιλεγμένου δελτίου τύπου (pr-content-dbi .pl) και το τρίτο θα μας επιτρέψει να προσθέσουμε το πιο πρόσφατο δελτίο τύπου στη βάση δεδομένων (pr-add-dbi.pl). Η εργασία διάταξης μπορεί να ανατεθεί στον αγαπημένο σας επεξεργαστή HTML, για παράδειγμα, το Allaire HomeSite (http://www.allaire.com/). Απλώς να θυμάστε ότι κατά τη δημιουργία ενός προτύπου, πρέπει να αφήσετε κενές περιοχές στις οποίες θα εισαχθεί δυναμικό περιεχόμενο (μεταβλητού μήκους, φυσικά).

Αφού αναπτύξετε τη συνολική σχεδίαση για τα δελτία τύπου σας, απλώς εισαγάγετε τις συγκεκριμένες λέξεις-κλειδιά σας στα κενά κενά παραπάνω (δείτε παρακάτω για περισσότερα σχετικά με αυτό). Μόλις ένας χρήστης ζητήσει ένα δελτίο τύπου, ο διακομιστής Ιστού θα επεξεργαστεί τον κώδικα Perl και θα αντικαταστήσει τις λέξεις-κλειδιά στα πρότυπα με περιεχόμενο που εξάγεται από τη βάση δεδομένων, δηλαδή ένα συγκεκριμένο δελτίο τύπου.

Το τελευταίο πράγμα που πρέπει να κάνετε είναι να ανεβάσετε τα πρότυπά σας στον διακομιστή Web σε συγκεκριμένους καταλόγους. Μπορείτε να χρησιμοποιήσετε τον πελάτη FTP CuteFTP (http://www.cuteftp.com/), αλλά προτιμάμε να χρησιμοποιούμε το κέλυφος αρχείου FAR. Δύο σημαντικά πράγματα που πρέπει να θυμάστε: πρώτον, τα αρχεία προτύπων πρέπει να έχουν ονόματα που τελειώνουν σε .pl και δεύτερον, πρέπει να έχουν εκτελέσιμο δικαίωμα (σε συστήματα UNIX, chmod 0755 template_name.pl). Αυτό είναι όλο!

Το τελευταίο πράγμα που πρέπει να κάνετε είναι να ανεβάσετε τα πρότυπά σας στον διακομιστή Web σε συγκεκριμένους καταλόγους. Μπορείτε να χρησιμοποιήσετε τον πελάτη FTP CuteFTP (http://www.cuteftp.com/), αλλά προτιμάμε να χρησιμοποιούμε το περιτύλιγμα αρχείου FAR. Δύο σημαντικά πράγματα που πρέπει να θυμάστε: πρώτον, τα αρχεία προτύπων πρέπει να έχουν ονόματα που τελειώνουν σε .pl και δεύτερον, πρέπει να έχουν εκτελέσιμο δικαίωμα (σε συστήματα UNIX, chmod 0755 template_name.pl). Αυτό είναι όλο!

Δεν είναι ιδιαίτερα δύσκολο να προστεθεί λειτουργικότητα στον μηχανισμό δημοσίευσης δελτίων τύπου. Μπορείτε να ταξινομήσετε συνδέσμους σε δελτία τύπου που είναι διαθέσιμα στη βάση δεδομένων κατά ημερομηνία ή τίτλο, ομαδοποιώντας τα ανά έτος. Ή, για παράδειγμα, μπορεί να θέλετε να εμφανίσετε ένα τυχαίο δελτίο τύπου στην ιστοσελίδα σας, παρέχοντας πληροφορίες από καιρό σε καιρό στους επισκέπτες ανεξάρτητα από το πότε πραγματικά δημοσιεύτηκε. Αλλά ίσως η πιο σημαντική και χρήσιμη λειτουργία θα είναι η προσθήκη μιας φόρμας HTML για την εισαγωγή του περιεχομένου του δελτίου τύπου και η ανάπτυξη ενός προγράμματος CGI στην Perl για την επεξεργασία αυτής της φόρμας και στη συνέχεια η τοποθέτηση του εγγράφου στη βάση δεδομένων. Θυμηθείτε ότι το CGI (Common Gateway Interface) είναι ένα πρωτόκολλο, μηχανισμός ή επίσημη συμφωνία μεταξύ ενός διακομιστή Web και ενός ξεχωριστού προγράμματος. Ο διακομιστής κωδικοποιεί δεδομένα εισόδου, όπως φόρμες HTML, και το πρόγραμμα CGI τα αποκωδικοποιεί και δημιουργεί μια ροή δεδομένων εξόδου. Η προδιαγραφή πρωτοκόλλου δεν λέει τίποτα για κάποια συγκεκριμένη γλώσσα προγραμματισμού. Επομένως, τα προγράμματα που συμμορφώνονται με αυτό το πρωτόκολλο μπορούν να γραφτούν σε σχεδόν οποιαδήποτε γλώσσα - C, C++, Visual Basic, Delphi, Tcl, Python ή, όπως στην περίπτωσή μας, Perl.

Ας συνοψίσουμε μερικά αποτελέσματα. Ελπίζουμε ότι αυτό το άρθρο θα σας βοηθήσει να εκτιμήσετε τα πλεονεκτήματα της έννοιας των δυναμικών ιστοσελίδων έναντι των στατικών. Η εφαρμογή αυτής της ιδέας θα οδηγήσει σε μείωση της χειρωνακτικής εργασίας, θα βοηθήσει στην κατανομή του φόρτου εργασίας του διακομιστή και θα σας επιτρέψει να αυξήσετε γρήγορα την ποσότητα του περιεχομένου στον ιστότοπο. Ο συνδυασμός των Apache, MySQL και Perl θα παρέχει ένα σχεδόν δωρεάν, εύκολο στη χρήση, ευέλικτο στην εγκατάσταση και ρύθμιση παραμέτρων πολλαπλών πλατφορμών και επεκτάσιμο περιβάλλον ανάπτυξης. Εδώ δεν θα εξετάσουμε τις ιδιαιτερότητες της εγκατάστασής τους, καθώς, πρώτον, απλά δεν υπάρχει αρκετός χώρος για αυτό το άρθρο και, δεύτερον, καθένα από αυτά τα εργαλεία συνοδεύεται από πολύ λεπτομερή τεκμηρίωση.

Ας συνοψίσουμε μερικά αποτελέσματα. Ελπίζουμε ότι αυτό το άρθρο θα σας βοηθήσει να εκτιμήσετε τα πλεονεκτήματα της έννοιας των δυναμικών ιστοσελίδων έναντι των στατικών. Η εφαρμογή αυτής της ιδέας θα οδηγήσει σε μείωση της χειρωνακτικής εργασίας, θα βοηθήσει στην κατανομή του φόρτου εργασίας του διακομιστή και θα σας επιτρέψει να αυξήσετε γρήγορα την ποσότητα του περιεχομένου στον ιστότοπο. Ο συνδυασμός των Apache, MySQL και Perl θα παρέχει ένα σχεδόν δωρεάν, εύκολο στη χρήση, ευέλικτο στην εγκατάσταση και ρύθμιση παραμέτρων πολλαπλών πλατφορμών και επεκτάσιμο περιβάλλον ανάπτυξης.

Ανάπτυξη μοντέλου βάσης δεδομένων

Το πρώτο και πιο σημαντικό βήμα για τη δημιουργία μιας βάσης δεδομένων είναι η ανάπτυξη του μοντέλου της. Ας ξεκινήσουμε λοιπόν.

σημαντική δράση

Κατά τη δημιουργία μιας βάσης δεδομένων είναι η ανάπτυξη του μοντέλου της. Ας ξεκινήσουμε λοιπόν.

Βήμα 1

Είναι απαραίτητο να καθοριστεί τι ακριβώς θα περιέχουν οι πίνακες της βάσης δεδομένων. Μια βάση δεδομένων μπορεί να περιέχει εκατοντάδες πίνακες. Στην αρχή θα χρειαστούμε μόνο ένα τραπέζι για να αποθηκεύσουμε τα δελτία τύπου μας. Ας το ονομάσουμε tbl_news_items.

Βήμα 2

Πρέπει να ορίσουμε τα πεδία που θα περιέχει ο πίνακάς μας. Αυτά τα πεδία θα αντιπροσωπεύουν όλα τα στοιχεία του δελτίου τύπου. Το παράδειγμά μας χρησιμοποιεί πέντε πεδία: col_id (αριθμητικό αναγνωριστικό του δελτίου τύπου), col_title (τίτλος), col_date (ημερομηνία δημοσίευσης), col_fullstory (περιεχόμενο), col_author (όνομα συγγραφέα). Το πεδίο col_id θα περιέχει ένα μοναδικό αναγνωριστικό με το οποίο ο χρήστης μπορεί να ρωτήσει το περιεχόμενο ενός συγκεκριμένου δελτίου τύπου.

Δημιουργία Βάσης Δεδομένων

Τώρα πρέπει να δημιουργήσουμε μια σύνδεση με το MySQL DBMS και να δημιουργήσουμε τη βάση δεδομένων μας. Παρακάτω θα σας δείξουμε πώς να το κάνετε αυτό από τη γραμμή εντολών. Ωστόσο, υπάρχουν πολλά συστήματα διαχείρισης, ή διαχειριστές MySQL DBMS, που σας επιτρέπουν να το διαχειρίζεστε χρησιμοποιώντας μια φιλική προς το χρήστη γραφική διεπαφή.

Πρώτα απ 'όλα, πρέπει οπωσδήποτε να γνωρίζετε τα βασικά της γλώσσας ερωτημάτων SQL (Structured Query Language). Το πακέτο MySQL DBMS περιλαμβάνει μια πλήρη περιγραφή των υποστηριζόμενων προδιαγραφών SQL. Αυτή η γλώσσα είναι εύκολα κατανοητή επειδή οι τελεστές της και οι κατασκευές τους είναι εύκολο να κατανοηθούν και να θυμηθούν. Για να δουλέψετε, θα χρειαστείτε τελεστές για τη δημιουργία (ΔΗΜΙΟΥΡΓΙΑ ή ΕΙΣΑΓΩΓΗ), την επιλογή (ΕΠΙΛΟΓΗ) και τη διαγραφή (ΑΠΟΣΤΟΛΗ ή ΔΙΑΓΡΑΦΗ) δεδομένων, καθώς και την αλλαγή τους (UPDATE, MODIFY). Σε συγκεκριμένα παραδείγματα θα χρησιμοποιήσουμε μόνο μερικά από αυτά.

Για να αποφύγετε τη δημιουργία λογαριασμών χρηστών και την εκχώρηση των απαραίτητων δικαιωμάτων, ας υποθέσουμε ότι χρησιμοποιείτε λογαριασμόςδιαχειριστής (root).

σημαντική δράση

Ανοίξτε ένα παράθυρο τερματικού (εάν εργάζεστε στο γραφικό κέλυφος X Window του Linux OS ή των Windows 9x/NT/2000) και δημιουργήστε μια σύνδεση με το MySQL DBMS εισάγοντας mysql στη γραμμή εντολών. Θα πρέπει να σας ζητηθεί να εισαγάγετε εντολές mysql> ως απάντηση.

Βήμα 1

Ας δημιουργήσουμε τη βάση δεδομένων μας πληκτρολογώντας:

ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ db_website;

Αφού εισαγάγετε κάθε εντολή, μην ξεχάσετε να πληκτρολογήσετε το σύμβολο (;). Αυτό είναι πολύ σημαντικό γιατί σηματοδοτεί το τέλος της εισαγωγής εντολών στη MySQL.

Χρήση db_website.

Βήμα 4

Ας δημιουργήσουμε έναν πίνακα tbl_news_items, όπου ορίζουμε τον τύπο των δεδομένων που θα αποθηκευτούν στα πεδία του. Εισάγω:

1. CREATE TABLE tbl_news_items (2. col_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 3. col_title VARCHAR(100), 4. col_author VARCHAR(100), 5. col_body TEXT, 6. col_d.

Βήμα 5

Τώρα που δημιουργήσαμε έναν πίνακα για την αποθήκευση των δεδομένων μας, πρέπει να τον συμπληρώσουμε με μερικά δείγματα δεδομένων. Σημειώστε ότι στην παρακάτω εντολή δεν θα ορίσουμε το πεδίο col_id γιατί συμπληρώνεται αυτόματα καθώς προστίθενται νέα δεδομένα. Λάβετε επίσης υπόψη ότι η σύνταξη για την ημερομηνία είναι έτος/μήνας/ημέρα. Έτσι, στη γραμμή εντολών mysql, πληκτρολογήστε την ακόλουθη εντολή.

Έτσι, στη γραμμή εντολών mysql>, πληκτρολογήστε την ακόλουθη εντολή.

Εισαγάγετε μερικά ακόμη παρόμοια ερωτήματα εισαγωγής. Για να δείτε τι είναι αποθηκευμένο στη βάση δεδομένων, στη γραμμή εντολών mysql, πληκτρολογήστε:

Εισαγάγετε μερικά ακόμη παρόμοια ερωτήματα εισαγωγής. Για να δείτε τι είναι αποθηκευμένο στη βάση δεδομένων, στη γραμμή εντολών mysql>, πληκτρολογήστε:

ΕΠΙΛΟΓΗ * ΑΠΟ tbl_news_items;

Προετοιμασία για δουλειά

Για να εκτελέσετε προγράμματα Perl, θα χρειαστείτε έναν διερμηνέα Perl έκδοση 5.005 ή 5.6 των διανομών Perl Standard ή ActiveState Perl για UNIX ή Win32. Εάν αναπτύσσετε εφαρμογές για εκτέλεση με Win32, τότε το πακέτο από το ActiveState είναι κάπως πιο βολικό στη χρήση και περιλαμβάνει επίσης ένα βοηθητικό πρόγραμμα PPM για την εγκατάσταση πρόσθετων λειτουργικών μονάδων.

Για να οργανώσουμε την αλληλεπίδραση των προγραμμάτων μας Perl με το MySQL DBMS, είναι απαραίτητο η μονάδα DBI να συμπεριληφθεί στη διανομή Perl. Δεδομένου ότι η ενότητα βασικά δεν κάνει τίποτα από μόνη της, αλλά μετατοπίζει όλες τις λειτουργίες αλληλεπίδρασης με βάσεις δεδομένων στο αντίστοιχο πρόγραμμα οδήγησης, απαιτείται η εγκατάσταση της βιβλιοθήκης DBD-Mysql (πρόγραμμα οδήγησης βάσης δεδομένων MySQL για τη μονάδα DBI). Όπως δήλωσε ο Tim Bunce, ο συγγραφέας και ο προγραμματιστής της συγκεκριμένης ενότητας, «Το DBI είναι ένα API για την οργάνωση της πρόσβασης σε βάσεις δεδομένων από προγράμματα Perl. Η προδιαγραφή DBI API ορίζει ένα σύνολο συναρτήσεων, μεταβλητών και κανόνων που χρησιμοποιούνται για διαφανή διασύνδεση με βάσεις δεδομένων."

Η έννοια των προγραμμάτων οδήγησης βάσης δεδομένων είναι πολύ βολική, καθώς στην εφαρμογή σας Perl χρησιμοποιείτε τυπικές κλήσεις DBI, οι οποίες στη συνέχεια προωθούνται από μονάδες στο κατάλληλο πρόγραμμα οδήγησης, το οποίο, με τη σειρά του, θα αλληλεπιδράσει άμεσα με τη βάση δεδομένων, χωρίς να σας ζητήσει να μελετήσετε τις τεχνικές χαρακτηριστικά κάθε συγκεκριμένου DBMS. Υπάρχουν λοιπόν προγράμματα οδήγησης DBD::Sybase, DBD::Oracle, DBD::Informix κ.λπ. (Εικ. 1, 2).

Ρύζι. 1. Αρχιτεκτονική DBI

Ρύζι. 2. Ροή δεδομένων μέσω διεπαφής DBI

Ας ξεφύγουμε λίγο από τα όρια του άρθρου. Ας υποθέσουμε ότι το πακέτο DBI δεν περιλαμβάνει πρόγραμμα οδήγησης για ένα συγκεκριμένο DBMS. Σε αυτήν την περίπτωση, η γέφυρα DBD-ODBC θα έρθει στη διάσωση. Αρκεί να δημιουργήσετε μια νέα πηγή δεδομένων (Όνομα πηγής δεδομένων) για το πρόγραμμα οδήγησης ODBC (Open DataBase Connectivity), όπου πρέπει να επιλέξετε τον τύπο αυτού του DBMS, τη διεύθυνση κεντρικού υπολογιστή στον οποίο θέλετε να δημιουργήσετε μια σύνδεση, το όνομα της βάσης δεδομένων και δεδομένα εξουσιοδότησης, δηλαδή το όνομα χρήστη και τον κωδικό πρόσβασης (Εικ. .3). Στη συνέχεια, χρησιμοποιώντας τη μονάδα DBI, αλληλεπιδράστε με τη βάση δεδομένων. Επιπλέον, το ActiveState Perl συνήθως συνοδεύεται από μια λειτουργική μονάδα Win32::ODBC (Win32-ODBC). Η εργασία με αυτό είναι λίγο διαφορετική από την εργασία με το DBI, αλλά συνολικά πολύ παρόμοια. Η μόνη διαφορά είναι ότι το Win32::ODBC είναι μια λειτουργική μονάδα μόνο για συστήματα Win32 και σας επιτρέπει να εργάζεστε με εγγενείς λειτουργίες ODBC πιο αποτελεσματικά από το DBD::ODBC.

Ρύζι. 3. Προσθήκη νέας προέλευσης δεδομένων μέσω του διαχειριστή ODBC

Μπορεί να γίνει ένας παράλληλος μεταξύ ODBC και DBI. Το DBI είναι ένα ανάλογο του ODBC Administrator (διαχειριστής προγραμμάτων οδήγησης βάσης δεδομένων). Κάθε πρόγραμμα οδήγησης DBD αντιστοιχεί στις λειτουργίες του σε ένα πρόγραμμα οδήγησης ODBC. Το μόνο που μπορεί να σας μπερδέψει είναι το γεγονός ότι, όπως αναφέρθηκε παραπάνω, υπάρχει πρόγραμμα οδήγησης DBD::ODBC. Αλλά σας επιτρέπει μόνο να δημιουργήσετε επικοινωνία DBI με προγράμματα οδήγησης ODBC.

Για να εγκαταστήσετε το DBI και το DBD-Mysql, χρησιμοποιώντας το βοηθητικό πρόγραμμα PPM σε περιβάλλον Win32, εισαγάγετε στη γραμμή εντολών:

Ppm εγκατάσταση DBI

Λάβετε υπόψη ότι ο υπολογιστής σας πρέπει να είναι συνδεδεμένος στο Διαδίκτυο σε αυτό το σημείο. Εάν έχετε την αντίστοιχη μονάδα στον τοπικό σας δίσκο, χρησιμοποιήστε τις πληροφορίες βοήθειας εισάγοντας την εντολή:

εισάγοντας την εντολή:

Για χρήστες UNIX, η εγκατάσταση της μονάδας DBI θα είναι σχεδόν ίδια με την εγκατάσταση άλλων λειτουργικών μονάδων Perl:

Για χρήστες UNIX, η εγκατάσταση της μονάδας DBI θα είναι σχεδόν ίδια με την εγκατάσταση άλλων λειτουργικών μονάδων Perl:

Μπορείτε επίσης να χρησιμοποιήσετε το κέλυφος CPAN. Εάν έχετε εγκατεστημένη στον υπολογιστή σας την έκδοση UNIX του πακέτου ActiveState, μπορείτε επίσης να εργαστείτε με το βοηθητικό πρόγραμμα εγκατάστασης PPM. Μερικές φορές συμβαίνει ότι τα κελύφη CPAN και PPM δεν λειτουργούν εάν ένα τείχος προστασίας ή ένα τείχος προστασίας είναι εγκατεστημένο στο εταιρικό δίκτυο στο οποίο είναι συνδεδεμένος ο υπολογιστής σας. Σε αυτήν την περίπτωση, θα σας βοηθήσουν μόνο οι μονάδες με πηγαίους κωδικούς που έχουν ληφθεί με μη αυτόματο τρόπο. Για να τα εγκαταστήσετε και να συνδεθείτε σε Perl ή Apache, θα χρειαστείτε έναν διερμηνέα Perl, έναν μεταγλωττιστή C/C++ ή GCC/PGCC και ένα από τα βοηθητικά προγράμματα δημιουργίας (από έναν από τους κλώνους του UNIX, καθώς και το Microsoft Visual C++). nmake ή dmake. Έτσι, η διαδικασία εγκατάστασης μονάδων γίνεται κάπως πιο περίπλοκη. Σχεδόν όλα συνοδεύονται από τεκμηρίωση "κατασκευής", οπότε δεν θα πρέπει να έχετε πολύ πρόβλημα.

Εμφάνιση λίστας άρθρων

Τώρα που έχετε μια λειτουργική βάση δεδομένων δελτίου τύπου, μπορείτε εύκολα να τη συνδέσετε στην ιστοσελίδα σας. Ας ξεκινήσουμε δημιουργώντας μια απλή σελίδα που εμφανίζει μια λίστα με όλα τα διαθέσιμα δελτία τύπου. Σημειώστε ότι από προεπιλογή ο διακομιστής Web Apache πιστεύει ότι όλα τα έγγραφά σας πρέπει να βρίσκονται στον κατάλογό του htdocs και τα εκτελέσιμα αρχεία σας πρέπει να βρίσκονται στο cgi-bin. Επομένως, πρέπει να τοποθετήσετε όλα τα αρχεία με την επέκταση .pl στον κατάλογο cgi-bin. Με τη σειρά του, τα δημιουργημένα αρχεία προτύπου HTML πρέπει να τοποθετηθούν στον κατάλογο tpl. Η ιεραρχία του καταλόγου θα μοιάζει με αυτό:

/ (ρίζα οποιουδήποτε δίσκου) /local /local/usr /local/usr/bin /local/usr/cgi-bin /local/usr/htdocs /local/usr/tpl

Για συστήματα DOS/Windows, η διαδρομή προς το cgi-bin μπορεί να μοιάζει με αυτό:

C:\local\usr\cgi-bin

σημαντική δράση

Χρησιμοποιώντας τον αγαπημένο σας επεξεργαστή κειμένου, δημιουργήστε ένα αρχείο pr-list-tpl.htm:

15. 16. 17. Δελτία τύπου 2001 18. 19. 20. @BLOCK@ 21. 22.

Αυτό το αρχείο προορίζεται να εμφανίσει μια λίστα με όλα τα διαθέσιμα δελτία τύπου.

Βήμα 1

Δημιουργήστε ένα αρχείο pr-list-block-tpl.htm που θα εμφανίζει κάθε μπλοκ με το δελτίο τύπου που βρέθηκε με τη μορφή πίνακα:

23. 38. Εμφάνιση της λίστας με τα δελτία τύπου.. 39. 40.

Βήμα 4

Δημιουργήστε ένα σενάριο Perl pr-list-dbi.pl που θα διαβάζει δεδομένα από τη βάση δεδομένων db_website και, χρησιμοποιώντας αρχεία προτύπων HTML, θα εμφανίζει μια λίστα με δελτία τύπου (μπορείτε να βρείτε το κείμενο αυτού του σεναρίου στο CD μας).

Τώρα ας περάσουμε από τη λίστα κωδικών και ας δούμε πώς λειτουργεί το πρόγραμμα για την εμφάνιση λίστας δελτίων τύπου.

Οι γραμμές 1-9 είναι σαν ένα μπλοκ αρχικοποίησης στο οποίο δηλώνονται όλες οι καθολικές μεταβλητές και σταθερές:

41. #!/local/usr/bin/perl 42. 43. χρήση DBI; 44. $dbh = DBI->connect('dbi:mysql:db_website','root',''); 45. $path = "/local/usr/tpl"; 46. ​​$TPL_LIST = "$path/pr-list-tpl.htm"; 47. $TPL_LIST_BLOCK = "$path/pr-list-block-tpl.htm"; 48. 49. εκτύπωση "Content-type:text/html\n\n";

Αρχικά λέμε στον διακομιστή Web Apache τη διαδρομή προς το σημείο όπου βρίσκεται ο διερμηνέας Perl, η οποία εκτελείται όταν ζητηθεί το σενάριο, το ελέγχει για σφάλματα και στη συνέχεια το εκτελεί. Στη συνέχεια, δηλώνουμε το module DBI (DataBase Interface), οι μέθοδοι του οποίου θα χρησιμοποιηθούν στο πρόγραμμα για την αλληλεπίδραση με τη βάση δεδομένων (γραμμή 3). Στη συνέχεια, δημιουργούμε μια σύνδεση με τη βάση δεδομένων μας db_website(4) χρησιμοποιώντας root (διαχειριστής) ως όνομα χρήστη σύνδεσης και μια κενή συμβολοσειρά (η προεπιλογή) ως κωδικό πρόσβασης. Στη μεταβλητή $path υποδεικνύουμε τη διαδρομή όπου βρίσκονται τα αρχεία προτύπου HTML (5). Στις μεταβλητές $TPL_LIST και $TPL_LIST_BLOCK υποδεικνύουμε τα ονόματά τους (6, 7) αντίστοιχα. Στη συνέχεια, λέμε στον διακομιστή Ιστού ότι όλα τα εξερχόμενα δεδομένα πρέπει να παρουσιάζονται σε μορφή κειμένου/html MIME για έξοδο της ροής HTML στο πρόγραμμα περιήγησης του χρήστη (9).

Οι γραμμές 11-22 αντιπροσωπεύουν το σώμα του προγράμματος:

50. 51. open(L, "$TPL_LIST"); 52. while ($line1=) ( 53. chomp($line1); 54. if ($line1=~/\@BLOCK\@/) ( 55. read_db(); 56. ins_data(); 57. ) else ( 58. print "$line1\n"; 59. ) 60. ) 61. close(L); 62. 63. $dbh->disconnect;

Ανοίξτε το αρχείο προτύπου pr-list-tpl.htm (11) και κοιτάξτε το σε βρόχο (12-20), γράφοντας κάθε γραμμή που διαβάζεται στη μεταβλητή $line. Κατά τη διάρκεια κάθε επανάληψης, ελέγχουμε για την παρουσία της λέξης-κλειδιού @BLOCK@ (14-19) σε αυτή τη γραμμή, πράγμα που σημαίνει ότι θα πρέπει να εισαχθεί ένα μπλοκ με δελτίο τύπου σε αυτό το σημείο. Μόλις βρεθεί, καλούμε τις διαδικασίες read_db() και ins_data().

Οι γραμμές 26-39 είναι το σώμα της διαδικασίας read_db(), που έχει σχεδιαστεί για να διαβάζει τα περιεχόμενα του πίνακα tbl_news_items, ο οποίος αποθηκεύει τα δελτία τύπου μας:

64. 65. 66. sub read_db ( 67. $c=0; 68. my($sql) = "SELECT * FROM tbl_news_items"; 69. $rs = $dbh->prepare($sql); 70. $rs ->εκτέλεση 71. while (my $ref = $rs->fetchrow_hashref()) ( 72. $id[$c] = "$ref->"; >"; 74. $author[$c] = "$ref->"; 75. $date[$c] = "$ref->"; 76. $c++; 77. ) 78. $rs->finish () 79. )

Αρχικοποιούμε τον μετρητή $c=0, δημιουργούμε ένα ερώτημα για την επιλογή όλων των δεδομένων από τον πίνακα (28), εκτελούμε το ερώτημα (29, 30) και μεταφέρουμε τα δεδομένα στο σύνολο εγγραφών (σύνολο εγγραφών) $rs. Στη συνέχεια, στον βρόχο (31-37), εξάγουμε δεδομένα από το σύνολο εγγραφών χρησιμοποιώντας τη μέθοδο fetshrow_hashref και επιστρέφουμε έναν σύνδεσμο στον συσχετιστικό πίνακα %ref (31), που περιέχει τα ονόματα και τις τιμές των πεδίων της τρέχουσας εγγραφής. Γράφουμε τα εξαγόμενα δεδομένα (32-35) στους συνηθισμένους πίνακες @id, @title, @author και @date που αντιστοιχούν στους τύπους τους. Κλείνουμε το ρεκόρ (38).

Γραμμές 41-53 - το σώμα της διαδικασίας ins_data(), η οποία υλοποιεί την εισαγωγή δεδομένων που εξάγονται από τη βάση δεδομένων στη ροή εξερχόμενων δεδομένων. γραμμές 55-63 - το σώμα της διαδικασίας pr_block(), που καλείται σε βρόχο από τη διαδικασία ins_data():

80. 81. υπο ι80. 81. sub ins_data ( 82. $toread = "pr-read-dbi.pl"; 83. for ($i=0; $i) ( 99. $block = $block.$line; 100. ) 101. κλείσιμο (B) 102. επιστροφή ($block).

Έτσι, έχοντας λάβει τη μέγιστη τιμή του μετρητή $c ως αποτέλεσμα της διαδικασίας read_db(), στον βρόχο (43-52) ξεκινάμε τη διαδικασία pr_block(), η οποία διαβάζει τα περιεχόμενα του προτύπου HTML pr-list- block-tpl.htm και την εγγράφει στη μεταβλητή $block (59), η τιμή της οποίας στη συνέχεια επιστρέφεται (62) στη μεταβλητή $line (44) της διαδικασίας ins_data(). Περαιτέρω στον ίδιο βρόχο αντικαθιστούμε (46-50) τις λέξεις-κλειδιά @NUMBER@, @TITLE@, @AUTHOR@, @DATE@, @READ@ που βρίσκονται στη γραμμή εξερχόμενης ροής $ με τις τιμές του πίνακα που αντιστοιχούν σε αυτήν την επανάληψη του βρόχου ($i) @id, @title, @author, @date και της μεταβλητής $toread.

Εκτύπωση του κειμένου του δελτίου τύπου

Αφού εμφανίσουμε μια λίστα με όλα τα δελτία τύπου που είναι διαθέσιμα στη βάση δεδομένων (Εικ. 4), πρέπει να δώσουμε στον χρήστη την ευκαιρία να δει το κείμενο οποιουδήποτε από αυτά (μπορείτε επίσης να βρείτε το αντίστοιχο σενάριο στο CD μας).

Ρύζι. 4.

Το νέο σενάριο pr-read-dbi.pl θα διαφέρει ελαφρώς από το pr-list-dbi.pl που έχουμε ήδη δημιουργήσει.

Αυτή η καταχώριση είναι κατά 98% παρόμοια με την Καταχώριση 1, αν και υπάρχουν κάποιες μικρές διαφορές:

  • η βιβλιοθήκη CGI είναι συνδεδεμένη για την ανάγνωση της παραμέτρου id (9) από τη συμβολοσειρά ερωτήματος (για παράδειγμα, http://localhost/cgi-bin/pr-content-dbi.pl?id=1).
  • χρησιμοποιείται μόνο ένα πρότυπο HTML (pr-content-tpl.htm).
  • το ερώτημα της βάσης δεδομένων συμπληρώνεται με μια υπό όρους δήλωση SQL WHERE για την ανάκτηση όλων των δεδομένων που αντιστοιχούν σε ένα συγκεκριμένο δελτίο τύπου από το col_id.
  • Το πεδίο col_body με το κείμενο του επιλεγμένου δελτίου τύπου διαβάζεται επίσης από τη βάση δεδομένων.

Δημιουργία νέου δελτίου τύπου

Ας επεκτείνουμε τη λειτουργικότητα του συστήματός μας προσθέτοντας τη δυνατότητα δημιουργίας νέων δελτίων τύπου, χωρίς την ανάγκη άμεσης συνεργασίας με τη βάση δεδομένων για την αναπλήρωση του πίνακα tbl_news_items με νέες πληροφορίες.

Έτσι, το νέο πρόγραμμα Perl (το οποίο, όπως και τα δύο προηγούμενα, είναι σε CD) θα διαφέρει από τα προηγούμενα κυρίως στο ότι δεν προορίζεται για την εμφάνιση δεδομένων, αλλά για την προσθήκη τους στη βάση δεδομένων. Επομένως, πρέπει να αλλάξουμε ελαφρώς το τμήμα που είναι υπεύθυνο για την αλληλεπίδραση με τη βάση δεδομένων χρησιμοποιώντας το ερώτημα INSERT SQL και τους αντίστοιχους τελεστές της μονάδας DBI.

Οι γραμμές 12-18 είναι το σώμα του κύριου προγράμματος:

12. if ($cmd ne "add") ( 13. &show_form; 14. ) other ( 15. $dbh = DBI->connect('dbi:mysql:db_website', _ 'root',''); 16. &add_pr; 17. dbh->disconnect;

Εδώ ελέγχουμε αν έχει ληφθεί η εντολή προσθήκης του δελτίου τύπου στη βάση δεδομένων. Μόλις φτάσει, δημιουργούμε μια σύνδεση με τη βάση δεδομένων (15), εκτελούμε την υπορουτίνα app_pr() (16) και τερματίζουμε τη σύνδεση (17). Εάν δεν υπήρχε εντολή, τότε απλώς εμφανίζουμε τη φόρμα συμπλήρωσης (13) για τα δεδομένα του δελτίου τύπου - τη διαδικασία show_form().

Μόλις φτάσει, δημιουργούμε μια σύνδεση με τη βάση δεδομένων (15), εκτελούμε την υπορουτίνα app_pr() (16) και τερματίζουμε τη σύνδεση (17). Εάν δεν υπήρχε εντολή, τότε απλώς εμφανίζουμε τη φόρμα συμπλήρωσης (13) για τα δεδομένα του δελτίου τύπου - τη διαδικασία show_form().

19. 20. sub add_pr ( 21. $title = $q->param("pr_title"); 22. $author = $q->param("pr_author"); 23. $body = $q->param( "pr_body"); 24. $body =~ s/\r\n/;
/σολ; 25. 26. my($sql) = "INSERT INTO tbl_news_items (col_title,col_author,col_body,col_date) VALUES (\'$title\',\'$author\',\'$body\',CURDATE()) ";

27. $rs = $dbh->do($sql); 28. 29. if ($@) ( 30. $rc = $dbh->rollback; 31. ) else ( 32. $rc = $dbh->commit; 33. ) 34. 35. print "Location: /cgi -bin/pr-list-dbi.pl\n\n"; 36.)

Αρχικά, επεξεργαζόμαστε τα δεδομένα της φόρμας (22-25), συνθέτουμε ένα ερώτημα SQL (27) και το εκτελούμε (27) χρησιμοποιώντας τη μέθοδο DBI $dbh->do(). Δεδομένου ότι η διαδικασία εισαγωγής δεδομένων στη βάση δεδομένων εκτελείται εδώ, πρέπει να φροντίσετε για τη δυνατότητα ακύρωσης της λειτουργίας σε περίπτωση αποτυχίας. Για να γίνει αυτό, εισάγαμε κωδικό για να ακυρώσουμε τη συναλλαγή και να επαναφέρουμε στην προηγούμενη κατάσταση (30-34). Εάν η $dbh->do() αποτύχει, απορρίπτουμε τις αλλαγές που έγιναν (31). Εάν δεν προκύψει αποτυχία, επιβεβαιώνουμε τις αλλαγές που έγιναν (33). Στη συνέχεια, μετά από όλα τα βήματα, απλώς μεταβαίνουμε στη σελίδα με μια λίστα με όλα τα δελτία τύπου (36).

37. 38. sub show_form ( 39. print "Content-type:text/html\n\n"; 40. 41. open (L, "$TPL_INSERT"); 42. while ($line=) ( 43. chomp ($line); 47. $line =~ s/\@ADD\@/$toadd/; 49. $tolist = "pr-list-dbi.pl"; 50. $line =~ s/\@LIST \@/$tolist/ 51. ) 52. ) 53. print "$line\n" 54.

) ( 43. chomp($line); 44. if ($line=~/\@/) ( 45. if ($line=~/\@ADD\@/) ( 46. $toadd = "pr-add -dbi.pl"; 47. $line =~ s/\@ADD\@/$toadd/; 48. ) else ( 49. $tolist = "pr-list-dbi.pl"; 50. $line =~ s/\@LIST\@/$tolist/ 51. ) 52. ) 53. print "$line\n" 54.

Εφόσον αναπτύσσετε έναν δυναμικό ιστότοπο, ο όγκος των πληροφοριών σε αυτόν μπορεί να αυξηθεί αρκετά γρήγορα. Επιπλέον, καθώς αυξάνεται η δημοτικότητα του πόρου σας, αυξάνεται και ο αριθμός των επισκεπτών του, γεγονός που μπορεί να οδηγήσει σε υπερφόρτωση διακομιστή, δηλαδή σε μείωση της απόδοσης του συστήματος. Πριν ξεκινήσετε να αναζητάτε τρόπους για να αυξήσετε την ισχύ του υλικού και προσπαθήσετε να βρείτε μια νέα διαμόρφωση συστήματος, μπορείτε να προσπαθήσετε να εξαλείψετε μία από τις πιθανές αιτίες υπερβολικής κατανάλωσης RAM. Ο ένοχος μπορεί να είναι η ίδια Perl. Το γεγονός είναι ότι κάθε φορά που αποκτάτε πρόσβαση σε ένα ή άλλο σενάριο Perl, ο διακομιστής Web φορτώνει τον διερμηνέα στη μνήμη RAM (καταλαμβάνει 500-1000 KB στον σκληρό δίσκο) και ο τελευταίος αναλύει το πρόγραμμα από την αρχή μέχρι το τέλος σε αναζήτηση σύνταξης λάθη. Μετά από αυτό, το διαβάζει ξανά, αρχικοποιώντας μεταβλητές και συναρτήσεις, διαβάζοντας τα δεδομένα εισόδου (παραμέτρους), επεξεργάζεται και επιστρέφει τα αποτελέσματα. Μπορείτε να φανταστείτε τι θα συμβεί αν εκατοντάδες επισκέπτες στον ιστότοπό σας θέλουν να βλέπουν τα δελτία τύπου σας ταυτόχρονα;

Για να επιταχυνθεί αυτή η διαδικασία, έχουν δημιουργηθεί ειδικές λύσεις, οι οποίες είναι πρόσθετες ενότητες για τον διακομιστή Web Apache - mod_fastcgi και mod_perl.

Η ενότητα FastCGI (mod_fastcgi) περιλαμβάνει την ευρεία χρήση εργαλείων ανταλλαγής δεδομένων μεταξύ των εκτελούμενων διεργασιών (εργασιών) του λειτουργικού συστήματος. Όταν ο διακομιστής Web ξεκινά να εκτελείται, ενεργοποιεί ένα πρόγραμμα CGI και αφήνει αυτό το πρόγραμμα και πολλά αντίγραφά του να εκτελούνται στο παρασκήνιο. Τυχόν αιτήματα προς το πρόγραμμα απλώς θα μεταφερθούν σε ήδη ενεργά αντίγραφα, γεγονός που θα απαλλάξει τον διακομιστή από το πρόσθετο φορτίο που σχετίζεται με την επανενεργοποίηση της διαδικασίας.

Η ενότητα mod_perl σάς επιτρέπει να φορτώσετε την Perl στη μνήμη RAM στον ίδιο χώρο διευθύνσεων με τον ίδιο τον διακομιστή Web Apache και να αφήσετε την Perl στη μνήμη μέχρι να τερματιστεί η τελευταία, αποτρέποντας τη φόρτωση του επόμενου αντιγράφου του διερμηνέα κατά την πρόσβαση σε ένα πρόγραμμα CGI. Αυτή η ενότητα χρησιμοποιείται πιο συχνά από το FastCGI επειδή δεν απαιτεί αλλαγές στο πρόγραμμα.

Πρόσθετες πληροφορίες

Ο Apache τοποθετείται στην αγορά ως ένας ισχυρός και ευέλικτος διακομιστής Web που είναι συμβατός με το πρότυπο HTTP/1.1. Περίπου το 60% όλων των διακομιστών Ιστού στο Διαδίκτυο λειτουργούν κάτω από Έλεγχος Apache. Η λειτουργικότητα του Apache μπορεί εύκολα να αυξηθεί εγκαθιστώντας ελεύθερα διαθέσιμες μονάδες επέκτασης. Ο πηγαίος κώδικας για αυτόν τον διακομιστή Ιστού είναι διαθέσιμος για σχεδόν οποιαδήποτε πλατφόρμα. Ένα άλλο χρήσιμο χαρακτηριστικό είναι το γεγονός ότι ο Apache σας επιτρέπει να εργάζεστε με πολλές γλώσσες προγραμματισμού, καθώς και να φορτώνετε ορισμένες από αυτές στο χώρο διευθύνσεών του, αυξάνοντας έτσι την ταχύτητα αλληλεπίδρασης μεταξύ του χρήστη του Διαδικτύου και του συστήματος.

MySQL - σύστημα διαχείρισης πολλαπλών πλατφορμών σχεσιακές βάσεις δεδομένωνδεδομένα (RDBMS, Σύστημα Διαχείρισης Σχεσιακής Βάσης Δεδομένων) χρησιμοποιώντας τη γλώσσα ερωτημάτων SQL (Structured Query Language). Αρχικά, η MySQL, όπως ο Apache και ακόμη και η Perl, κυκλοφόρησε μόνο σε έκδοση για συστήματα UNIX, επομένως εξακολουθεί να διατηρεί τη διεπαφή της γραμμής εντολών. Ωστόσο, για πρόσφατααπελευθερώθηκε τεράστιο ποσόγραφικοί διαχειριστές που διευκολύνουν τις εργασίες διαχείρισης. Επιπλέον, η MySQL για Linux και Windows συνοδεύεται από έναν διαχειριστή του οποίου η γραφική διεπαφή είναι παρόμοια με αυτή που χρησιμοποιείται από διαχειριστής παραθύρωνΤο KDE στο κέλυφος του παραθύρου X του λειτουργικού συστήματος Linux.

Καθώς εργάζεστε καθημερινά για να ενημερώνετε το περιεχόμενο του ιστότοπού σας με ενδιαφέρον περιεχόμενο, πιθανότατα αναρωτιέστε ότι εκατοντάδες νέες τοποθεσίες Web δημιουργούνται κάθε μέρα και εκατοντάδες νέα έγγραφα προστίθενται κάθε μέρα. Πώς δημιουργούνται όλοι αυτοί οι νέοι πίνακες σελίδων και πώς ενημερώνονται τόσο γρήγορα; Όλα αυτά δεν είναι τόσο δύσκολα όσο φαίνεται με την πρώτη ματιά, αφού χρησιμοποιεί την έννοια των δυναμικών ιστοσελίδων.

Σε αυτό το άρθρο θα εξετάσουμε τα βήματα δημιουργίας ενός μηχανισμού για τη δημοσίευση δελτίων τύπου σε μια τοποθεσία Web. Ο ιστότοπός μας θα συνδέεται άμεσα με δελτία τύπου που είναι αποθηκευμένα στη βάση δεδομένων με ιστοσελίδες προτύπων. Στόχος μας δεν ήταν να εισαγάγουμε τους αναγνώστες στα βασικά των εργαλείων ανάπτυξης ιστοσελίδων, καθώς έχουν γραφτεί πολλά βιβλία και άρθρα σχετικά με αυτό. Αυτό το άρθρο προορίζεται κυρίως για εκείνους τους χρήστες που έχουν ήδη εμπειρία στη δημιουργία ιστοσελίδων και απλών τοποθεσιών. Ο κύριος στόχος μας είναι να σας δείξουμε πώς να ξεκινήσετε την ανάπτυξη της πρώτης σας δυναμικής τοποθεσίας Web. Για να κατανοήσετε το άρθρο, συνιστάται να έχετε βασικές γνώσεις για τις αρχιτεκτονικές συστημάτων πληροφοριών, τη γλώσσα σήμανσης υπερκειμένου (HTML) και τη γλώσσα προγραμματισμού Perl. Για να δημιουργήσουμε αυτόν τον ιστότοπο θα χρησιμοποιήσουμε τρεις ισχυρές ανοιχτές τεχνολογίες: Apache, MySQL και Perl/DBI.

Για να δημιουργήσουμε αυτόν τον ιστότοπο θα χρησιμοποιήσουμε τρεις ισχυρές ανοιχτές τεχνολογίες: Apache, MySQL και Perl/DBI.

Πριν ξεκινήσετε την ανάπτυξη μιας δυναμικής τοποθεσίας Web, είναι σημαντικό να κατανοήσετε τι είναι μια στατική τοποθεσία Web και τις στατικές ιστοσελίδες που αποτελούν τον πυρήνα της. Οι στατικές ιστοσελίδες δημιουργούνται χειροκίνητα, στη συνέχεια αποθηκεύονται και αποστέλλονται στον ιστότοπο. Κάθε φορά που χρειάζεται να αλλάξει το περιεχόμενο μιας τέτοιας σελίδας, ο χρήστης το τροποποιεί στον υπολογιστή εργασίας του, συνήθως χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας HTML, το αποθηκεύει και στη συνέχεια το ανεβάζει ξανά στον ιστότοπο. Ρίχνοντας μια προσεκτική ματιά σε κάποια πύλη, ας πούμε το CNN.com ή το BBC.co.uk, μπορεί να σκεφτείτε ότι αυτές οι εταιρείες προσελκύουν έναν στρατό σχεδιαστών διάταξης για να ενημερώσουν το περιεχόμενο των τοποθεσιών τους. Στην πραγματικότητα, υπάρχει καλύτερος τρόπος - χρησιμοποιώντας την έννοια του δυναμικού ιστότοπου.

- χρήση της έννοιας ενός δυναμικού ιστότοπου.

Κάθε σελίδα δυναμικών τοποθεσιών Web που αποδίδεται βασίζεται σε μια σελίδα προτύπου στην οποία εισάγεται συνεχώς μεταβαλλόμενο περιεχόμενο, το οποίο συνήθως αποθηκεύεται σε μια βάση δεδομένων. Όταν ένας χρήστης ζητά μια σελίδα, οι σχετικές πληροφορίες ανακτώνται από τη βάση δεδομένων, εισάγονται σε ένα πρότυπο για να σχηματιστεί μια νέα ιστοσελίδα και αποστέλλονται από τον διακομιστή Web στο πρόγραμμα περιήγησης του χρήστη, το οποίο τις εμφανίζει σωστά. Εκτός από το περιεχόμενο πληροφοριών, τα στοιχεία πλοήγησης για μια τοποθεσία Web μπορούν επίσης να δημιουργηθούν δυναμικά. Με αυτόν τον τρόπο, εάν χρειάζεται να ενημερώσετε το περιεχόμενο του ιστότοπού σας, απλώς προσθέτετε κείμενο νέα σελίδα, το οποίο στη συνέχεια εισάγεται στη βάση δεδομένων χρησιμοποιώντας έναν συγκεκριμένο μηχανισμό. Το αποτέλεσμα είναι ότι η τοποθεσία Web φαίνεται να ενημερώνεται από μόνη της.

Γιατί οι δυναμικοί ιστότοποι είναι καλύτεροι

Αμέσως μετά τη δημιουργία και την κυκλοφορία μιας δυναμικής ιστοσελίδας, αρχίζουν να εμφανίζονται τα πλεονεκτήματά της. Τώρα έχετε στη διάθεσή σας έναν σχετικά μικρό αριθμό σελίδων προτύπων, με τη βοήθεια των οποίων δημιουργούνται εκατοντάδες, ίσως και χιλιάδες ιστοσελίδες. Η εμφάνιση (σχεδίαση) του ιστότοπου μπορεί εύκολα να αλλάξει τροποποιώντας αυτά τα πρότυπα. Η αλλαγή των περιεχομένων της βάσης δεδομένων μπορεί να γίνει μέσω της διεπαφής Web χρησιμοποιώντας μια φόρμα HTML, χωρίς να παρεισφρύουμε στις τεχνικές λεπτομέρειες κάθε συγκεκριμένου DBMS.

Κάθε σελίδα με απόδοση δυναμικών τοποθεσιών Web βασίζεται σε μια σελίδα προτύπου στην οποία εισάγεται συνεχώς μεταβαλλόμενο περιεχόμενο, που συνήθως αποθηκεύεται σε μια βάση δεδομένων. Όταν ένας χρήστης ζητά μια σελίδα, οι σχετικές πληροφορίες ανακτώνται από τη βάση δεδομένων, εισάγονται σε ένα πρότυπο για να σχηματιστεί μια νέα ιστοσελίδα και αποστέλλονται από τον διακομιστή Web στο πρόγραμμα περιήγησης του χρήστη, το οποίο τις εμφανίζει σωστά. Εκτός από το περιεχόμενο πληροφοριών, τα στοιχεία πλοήγησης για μια τοποθεσία Web μπορούν επίσης να δημιουργηθούν δυναμικά. Με αυτόν τον τρόπο, εάν χρειάζεται να ενημερώσετε το περιεχόμενο του ιστότοπού σας, απλώς προσθέτετε κείμενο για τη νέα σελίδα, το οποίο στη συνέχεια εισάγεται στη βάση δεδομένων χρησιμοποιώντας έναν συγκεκριμένο μηχανισμό.

Το πρώτο πράγμα που χρειάζεστε για να δημιουργήσετε μια δυναμική τοποθεσία είναι ένας διακομιστής Web, όπως ο Apache.

Ένας διακομιστής Web μπορεί να χρησιμοποιηθεί για την εξυπηρέτηση ενός ηλεκτρονικού καταστήματος, ενός διακομιστή ειδήσεων, μιας μηχανής αναζήτησης, ενός συστήματος εξ αποστάσεως εκπαίδευσης, ακόμη και για όλους τους παραπάνω τομείς. Η επιλογή ενός διακομιστή Ιστού εξαρτάται από το είδος της δραστηριότητας που ένα άτομο ή ένας οργανισμός σκοπεύει να συμμετάσχει στο Διαδίκτυο.

Λίγες στρατηγικές επιχειρηματικές αποφάσεις είναι τόσο σημαντικές όσο η επιλογή μιας πλατφόρμας διακομιστή Web. Τα χαρακτηριστικά του διακομιστή είναι ένας εξαιρετικά σημαντικός παράγοντας για τον καθορισμό της αξιοπιστίας του κόμβου, της ανταπόκρισής του στα αιτήματα του πελάτη, καθώς και για τις προσπάθειες που πρέπει να γίνουν για να διατηρηθεί σε κατάσταση λειτουργίας. Με τη σωστή επιλογή εξαρτημάτων και ποιοτικό σχεδιασμό, ένας ιστότοπος μπορεί να γίνει ένας νέος, πιο βολικός τρόπος αλληλεπίδρασης πελατών και συνεργατών με την εταιρεία σας. Η υπερφόρτωση του διακομιστή Web μπορεί να προκαλέσει τη μη διαθεσιμότητα του διακομιστή βάσης δεδομένων ή κάποιου άλλου πόρου στους πελάτες.

Οι μεγάλες εταιρείες μέχρι πρόσφατα βασίζονταν στον Microsoft Internet Information Server, το Netscape FastTrack, το IBM WebSphere και το Apache χρησιμοποιούνταν κυρίως από μικρές εταιρείες. Ωστόσο, τώρα η κατάσταση έχει αλλάξει κάπως και ο Apache αρχίζει να υποστηρίζει την απόδοση ορισμένων μεγάλων έργων στο Διαδίκτυο, ιδίως του Yahoo.

Μπορείτε να βρείτε την πλήρη έκδοση του άρθρου στο CD-ROM μας.

Το Apache παρέχει πλούσιες δυνατότητες που σας επιτρέπουν να προσαρμόσετε τον διακομιστή Ιστού σας για να ταιριάζει στις ανάγκες μεμονωμένων και εταιρικών χρηστών. Η ρύθμιση παραμέτρων γίνεται χρησιμοποιώντας οδηγίες που περιέχονται στα αρχεία διαμόρφωσης. Ο Apache σάς επιτρέπει να δημιουργείτε εικονικούς ιστότοπους και λειτουργεί επίσης ως διακομιστής μεσολάβησης. Εάν θέλετε να παρέχετε πρόσβαση στο περιεχόμενο διακομιστή μόνο σε περιορισμένο αριθμό ατόμων, ο διακομιστής Ιστού μπορεί να ρυθμιστεί έτσι ώστε κατά την πρόσβαση σε συγκεκριμένους καταλόγους, ο διακομιστής να ελέγχει τα ονόματα σύνδεσης και τους κωδικούς πρόσβασης στη δική του βάση δεδομένων ή σε μία από τις βάσεις δεδομένων που είναι συνδεδεμένες σε αυτόν .

Στη συνέχεια, πρέπει να αποφασίσετε πώς θα αποθηκεύσετε το περιεχόμενο που εμφανίζεται στην ιστοσελίδα. Σε αυτό το άρθρο, χρησιμοποιώντας ένα συγκεκριμένο παράδειγμα, θα δείξουμε πώς να δημιουργήσουμε μια βάση δεδομένων στο MySQL DBMS, η οποία θα μας επιτρέψει να χωρίσουμε το περιεχόμενο Ιστού σε πίνακες που περιέχουν πεδία και εγγραφές δεδομένων. Ένα πεδίο είναι μια διακριτή μονάδα δεδομένων σε έναν πίνακα. Για παράδειγμα, μπορούμε να δημιουργήσουμε έναν πίνακα tbl_news_items με τα πεδία col_title, col_date, col_fullstory, col_author. MySQL DBMS - μεγάλη επιλογήγια τη δημιουργία μιας τέτοιας βάσης δεδομένων λόγω της ευκολίας χρήσης και διαχείρισής της, της δωρεάν διανομής σε πλατφόρμες, συμπεριλαμβανομένων των Linux και Windows, και της ταχέως αυξανόμενης δημοτικότητάς της.

Μετά από αυτό, θα δημιουργήσουμε δυναμικές σελίδες προτύπου HTML. Για να αναπτύξουμε εφαρμογές για αλληλεπίδραση με τη βάση δεδομένων και τα πρότυπα, θα χρησιμοποιήσουμε τη γλώσσα Perl.

Στην πραγματικότητα, πρέπει να δημιουργήσουμε τρία προγράμματα ή σενάρια Perl: το ένα θα εμφανίζει συνδέσμους προς όλα τα διαθέσιμα δελτία τύπου (pr-list-dbi.pl), το άλλο θα εμφανίζει τα περιεχόμενα του επιλεγμένου δελτίου τύπου (pr-content-dbi .pl) και το τρίτο θα μας επιτρέψει να προσθέσουμε το πιο πρόσφατο δελτίο τύπου στη βάση δεδομένων (pr-add-dbi.pl). Η εργασία διάταξης μπορεί να ανατεθεί στον αγαπημένο σας επεξεργαστή HTML, για παράδειγμα, το Allaire HomeSite (http://www.allaire.com/). Απλώς να θυμάστε ότι κατά τη δημιουργία ενός προτύπου, πρέπει να αφήσετε κενές περιοχές στις οποίες θα εισαχθεί δυναμικό περιεχόμενο (μεταβλητού μήκους, φυσικά).

Αφού αναπτύξετε τη συνολική σχεδίαση για τα δελτία τύπου σας, απλώς εισαγάγετε τις συγκεκριμένες λέξεις-κλειδιά σας στα κενά κενά παραπάνω (δείτε παρακάτω για περισσότερα σχετικά με αυτό). Μόλις ένας χρήστης ζητήσει ένα δελτίο τύπου, ο διακομιστής Ιστού θα επεξεργαστεί τον κώδικα Perl και θα αντικαταστήσει τις λέξεις-κλειδιά στα πρότυπα με περιεχόμενο που εξάγεται από τη βάση δεδομένων, δηλαδή ένα συγκεκριμένο δελτίο τύπου.

Το τελευταίο πράγμα που πρέπει να κάνετε είναι να ανεβάσετε τα πρότυπά σας στον διακομιστή Web σε συγκεκριμένους καταλόγους. Μπορείτε να χρησιμοποιήσετε τον πελάτη FTP CuteFTP (http://www.cuteftp.com/), αλλά προτιμάμε να χρησιμοποιούμε το κέλυφος αρχείου FAR. Δύο σημαντικά πράγματα που πρέπει να θυμάστε: πρώτον, τα αρχεία προτύπων πρέπει να έχουν ονόματα που τελειώνουν σε .pl και δεύτερον, πρέπει να έχουν εκτελέσιμο δικαίωμα (σε συστήματα UNIX, chmod 0755 template_name.pl). Αυτό είναι όλο!

Το τελευταίο πράγμα που πρέπει να κάνετε είναι να ανεβάσετε τα πρότυπά σας στον διακομιστή Web σε συγκεκριμένους καταλόγους. Μπορείτε να χρησιμοποιήσετε τον πελάτη FTP CuteFTP (http://www.cuteftp.com/), αλλά προτιμάμε να χρησιμοποιούμε το περιτύλιγμα αρχείου FAR. Δύο σημαντικά πράγματα που πρέπει να θυμάστε: πρώτον, τα αρχεία προτύπων πρέπει να έχουν ονόματα που τελειώνουν σε .pl και δεύτερον, πρέπει να έχουν εκτελέσιμο δικαίωμα (σε συστήματα UNIX, chmod 0755 template_name.pl). Αυτό είναι όλο!

Δεν είναι ιδιαίτερα δύσκολο να προστεθεί λειτουργικότητα στον μηχανισμό δημοσίευσης δελτίων τύπου. Μπορείτε να ταξινομήσετε συνδέσμους σε δελτία τύπου που είναι διαθέσιμα στη βάση δεδομένων κατά ημερομηνία ή τίτλο, ομαδοποιώντας τα ανά έτος. Ή, για παράδειγμα, μπορεί να θέλετε να εμφανίσετε ένα τυχαίο δελτίο τύπου στην ιστοσελίδα σας, παρέχοντας πληροφορίες από καιρό σε καιρό στους επισκέπτες ανεξάρτητα από το πότε πραγματικά δημοσιεύτηκε. Αλλά ίσως η πιο σημαντική και χρήσιμη λειτουργία θα είναι η προσθήκη μιας φόρμας HTML για την εισαγωγή του περιεχομένου του δελτίου τύπου και η ανάπτυξη ενός προγράμματος CGI στην Perl για την επεξεργασία αυτής της φόρμας και στη συνέχεια η τοποθέτηση του εγγράφου στη βάση δεδομένων. Θυμηθείτε ότι το CGI (Common Gateway Interface) είναι ένα πρωτόκολλο, μηχανισμός ή επίσημη συμφωνία μεταξύ ενός διακομιστή Web και ενός ξεχωριστού προγράμματος. Ο διακομιστής κωδικοποιεί δεδομένα εισόδου, όπως φόρμες HTML, και το πρόγραμμα CGI τα αποκωδικοποιεί και δημιουργεί μια ροή δεδομένων εξόδου. Η προδιαγραφή πρωτοκόλλου δεν λέει τίποτα για κάποια συγκεκριμένη γλώσσα προγραμματισμού. Επομένως, τα προγράμματα που συμμορφώνονται με αυτό το πρωτόκολλο μπορούν να γραφτούν σε σχεδόν οποιαδήποτε γλώσσα - C, C++, Visual Basic, Delphi, Tcl, Python ή, όπως στην περίπτωσή μας, Perl.

Ας συνοψίσουμε μερικά αποτελέσματα. Ελπίζουμε ότι αυτό το άρθρο θα σας βοηθήσει να εκτιμήσετε τα πλεονεκτήματα της έννοιας των δυναμικών ιστοσελίδων έναντι των στατικών. Η εφαρμογή αυτής της ιδέας θα οδηγήσει σε μείωση της χειρωνακτικής εργασίας, θα βοηθήσει στην κατανομή του φόρτου εργασίας του διακομιστή και θα σας επιτρέψει να αυξήσετε γρήγορα την ποσότητα του περιεχομένου στον ιστότοπο. Ο συνδυασμός των Apache, MySQL και Perl θα παρέχει ένα σχεδόν δωρεάν, εύκολο στη χρήση, ευέλικτο στην εγκατάσταση και ρύθμιση παραμέτρων πολλαπλών πλατφορμών και επεκτάσιμο περιβάλλον ανάπτυξης. Εδώ δεν θα εξετάσουμε τις ιδιαιτερότητες της εγκατάστασής τους, καθώς, πρώτον, απλά δεν υπάρχει αρκετός χώρος για αυτό το άρθρο και, δεύτερον, καθένα από αυτά τα εργαλεία συνοδεύεται από πολύ λεπτομερή τεκμηρίωση.

Ας συνοψίσουμε μερικά αποτελέσματα. Ελπίζουμε ότι αυτό το άρθρο θα σας βοηθήσει να εκτιμήσετε τα πλεονεκτήματα της έννοιας των δυναμικών ιστοσελίδων έναντι των στατικών. Η εφαρμογή αυτής της ιδέας θα οδηγήσει σε μείωση της χειρωνακτικής εργασίας, θα βοηθήσει στην κατανομή του φόρτου εργασίας του διακομιστή και θα σας επιτρέψει να αυξήσετε γρήγορα την ποσότητα του περιεχομένου στον ιστότοπο. Ο συνδυασμός των Apache, MySQL και Perl θα παρέχει ένα σχεδόν δωρεάν, εύκολο στη χρήση, ευέλικτο στην εγκατάσταση και ρύθμιση παραμέτρων πολλαπλών πλατφορμών και επεκτάσιμο περιβάλλον ανάπτυξης.

Ανάπτυξη μοντέλου βάσης δεδομένων

Το πρώτο και πιο σημαντικό βήμα για τη δημιουργία μιας βάσης δεδομένων είναι η ανάπτυξη του μοντέλου της. Ας ξεκινήσουμε λοιπόν.

σημαντική δράση

Κατά τη δημιουργία μιας βάσης δεδομένων είναι η ανάπτυξη του μοντέλου της. Ας ξεκινήσουμε λοιπόν.

Βήμα 1

Είναι απαραίτητο να καθοριστεί τι ακριβώς θα περιέχουν οι πίνακες της βάσης δεδομένων. Μια βάση δεδομένων μπορεί να περιέχει εκατοντάδες πίνακες. Στην αρχή θα χρειαστούμε μόνο ένα τραπέζι για να αποθηκεύσουμε τα δελτία τύπου μας. Ας το ονομάσουμε tbl_news_items.

Βήμα 2

Πρέπει να ορίσουμε τα πεδία που θα περιέχει ο πίνακάς μας. Αυτά τα πεδία θα αντιπροσωπεύουν όλα τα στοιχεία του δελτίου τύπου. Το παράδειγμά μας χρησιμοποιεί πέντε πεδία: col_id (αριθμητικό αναγνωριστικό του δελτίου τύπου), col_title (τίτλος), col_date (ημερομηνία δημοσίευσης), col_fullstory (περιεχόμενο), col_author (όνομα συγγραφέα). Το πεδίο col_id θα περιέχει ένα μοναδικό αναγνωριστικό με το οποίο ο χρήστης μπορεί να ρωτήσει το περιεχόμενο ενός συγκεκριμένου δελτίου τύπου.

Δημιουργία Βάσης Δεδομένων

Τώρα πρέπει να δημιουργήσουμε μια σύνδεση με το MySQL DBMS και να δημιουργήσουμε τη βάση δεδομένων μας. Παρακάτω θα σας δείξουμε πώς να το κάνετε αυτό από τη γραμμή εντολών. Ωστόσο, υπάρχουν πολλά συστήματα διαχείρισης, ή διαχειριστές MySQL DBMS, που σας επιτρέπουν να το διαχειρίζεστε χρησιμοποιώντας μια φιλική προς το χρήστη γραφική διεπαφή.

Πρώτα απ 'όλα, πρέπει οπωσδήποτε να γνωρίζετε τα βασικά της γλώσσας ερωτημάτων SQL (Structured Query Language). Το πακέτο MySQL DBMS περιλαμβάνει μια πλήρη περιγραφή των υποστηριζόμενων προδιαγραφών SQL. Αυτή η γλώσσα είναι εύκολα κατανοητή επειδή οι τελεστές της και οι κατασκευές τους είναι εύκολο να κατανοηθούν και να θυμηθούν. Για να δουλέψετε, θα χρειαστείτε τελεστές για τη δημιουργία (ΔΗΜΙΟΥΡΓΙΑ ή ΕΙΣΑΓΩΓΗ), την επιλογή (ΕΠΙΛΟΓΗ) και τη διαγραφή (ΑΠΟΣΤΟΛΗ ή ΔΙΑΓΡΑΦΗ) δεδομένων, καθώς και την αλλαγή τους (UPDATE, MODIFY). Σε συγκεκριμένα παραδείγματα θα χρησιμοποιήσουμε μόνο μερικά από αυτά.

Για να αποφύγετε τη δημιουργία λογαριασμών χρηστών και την εκχώρηση των απαραίτητων δικαιωμάτων πρόσβασης, ας υποθέσουμε ότι χρησιμοποιείτε τον λογαριασμό διαχειριστή (root).

σημαντική δράση

Ανοίξτε ένα παράθυρο τερματικού (εάν εργάζεστε στο γραφικό κέλυφος X Window του Linux OS ή των Windows 9x/NT/2000) και δημιουργήστε μια σύνδεση με το MySQL DBMS εισάγοντας mysql στη γραμμή εντολών. Θα πρέπει να σας ζητηθεί να εισαγάγετε εντολές mysql> ως απάντηση.

Βήμα 1

Ας δημιουργήσουμε τη βάση δεδομένων μας πληκτρολογώντας:

ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ db_website;

Αφού εισαγάγετε κάθε εντολή, μην ξεχάσετε να πληκτρολογήσετε το σύμβολο (;). Αυτό είναι πολύ σημαντικό γιατί σηματοδοτεί το τέλος της εισαγωγής εντολών στη MySQL.

Χρήση db_website.

Βήμα 4

Ας δημιουργήσουμε έναν πίνακα tbl_news_items, όπου ορίζουμε τον τύπο των δεδομένων που θα αποθηκευτούν στα πεδία του. Εισάγω:

1. CREATE TABLE tbl_news_items (2. col_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 3. col_title VARCHAR(100), 4. col_author VARCHAR(100), 5. col_body TEXT, 6. col_d.

Βήμα 5

Τώρα που δημιουργήσαμε έναν πίνακα για την αποθήκευση των δεδομένων μας, πρέπει να τον συμπληρώσουμε με μερικά δείγματα δεδομένων. Σημειώστε ότι στην παρακάτω εντολή δεν θα ορίσουμε το πεδίο col_id γιατί συμπληρώνεται αυτόματα καθώς προστίθενται νέα δεδομένα. Λάβετε επίσης υπόψη ότι η σύνταξη για την ημερομηνία είναι<год/месяц/день>. Έτσι, στη γραμμή εντολών mysql>, πληκτρολογήστε την ακόλουθη εντολή.

8. INSERT INTO tbl_news_items (col_title, _ col_author, col_body, col_date) 9. VALUES (10. 'Το πρώτο μου δελτίο τύπου', 11. 'Το όνομά σας', 12. 'Αυτό το δελτίο τύπου είναι αποθηκευμένο στη βάση δεδομένων MySQL', 13 '2001/4/15' 14.);

Εισαγάγετε μερικά ακόμη παρόμοια ερωτήματα εισαγωγής. Για να δείτε τι είναι αποθηκευμένο στη βάση δεδομένων, στη γραμμή εντολών mysql>, πληκτρολογήστε:

ΕΠΙΛΟΓΗ * ΑΠΟ tbl_news_items;

ΕΠΙΛΟΓΗ * ΑΠΟ tbl_news_items;

Προετοιμασία για δουλειά

Για να εκτελέσετε προγράμματα Perl, θα χρειαστείτε έναν διερμηνέα Perl έκδοση 5.005 ή 5.6 των διανομών Perl Standard ή ActiveState Perl για UNIX ή Win32. Εάν αναπτύσσετε εφαρμογές για εκτέλεση με Win32, τότε το πακέτο από το ActiveState είναι κάπως πιο βολικό στη χρήση και περιλαμβάνει επίσης ένα βοηθητικό πρόγραμμα PPM για την εγκατάσταση πρόσθετων λειτουργικών μονάδων.

Για να οργανώσουμε την αλληλεπίδραση των προγραμμάτων μας Perl με το MySQL DBMS, είναι απαραίτητο η μονάδα DBI να συμπεριληφθεί στη διανομή Perl. Δεδομένου ότι η ενότητα βασικά δεν κάνει τίποτα από μόνη της, αλλά μετατοπίζει όλες τις λειτουργίες αλληλεπίδρασης με βάσεις δεδομένων στο αντίστοιχο πρόγραμμα οδήγησης, απαιτείται η εγκατάσταση της βιβλιοθήκης DBD-Mysql (πρόγραμμα οδήγησης βάσης δεδομένων MySQL για τη μονάδα DBI). Όπως δήλωσε ο Tim Bunce, ο συγγραφέας και ο προγραμματιστής της συγκεκριμένης ενότητας, «Το DBI είναι ένα API για την οργάνωση της πρόσβασης σε βάσεις δεδομένων από προγράμματα Perl. Η προδιαγραφή DBI API ορίζει ένα σύνολο συναρτήσεων, μεταβλητών και κανόνων που χρησιμοποιούνται για διαφανή διασύνδεση με βάσεις δεδομένων."

Η έννοια των προγραμμάτων οδήγησης βάσης δεδομένων είναι πολύ βολική, καθώς στην εφαρμογή σας Perl χρησιμοποιείτε τυπικές κλήσεις DBI, οι οποίες στη συνέχεια προωθούνται από μονάδες στο κατάλληλο πρόγραμμα οδήγησης, το οποίο, με τη σειρά του, θα αλληλεπιδράσει άμεσα με τη βάση δεδομένων, χωρίς να σας ζητήσει να μελετήσετε τις τεχνικές χαρακτηριστικά κάθε συγκεκριμένου DBMS. Υπάρχουν λοιπόν προγράμματα οδήγησης DBD::Sybase, DBD::Oracle, DBD::Informix κ.λπ. (Εικ. 1, 2).

Ρύζι. 1. Αρχιτεκτονική DBI

Ρύζι. 2. Ροή δεδομένων μέσω διεπαφής DBI

Ας ξεφύγουμε λίγο από τα όρια του άρθρου. Ας υποθέσουμε ότι το πακέτο DBI δεν περιλαμβάνει πρόγραμμα οδήγησης για ένα συγκεκριμένο DBMS. Σε αυτήν την περίπτωση, η γέφυρα DBD-ODBC θα έρθει στη διάσωση. Αρκεί να δημιουργήσετε μια νέα πηγή δεδομένων (Όνομα πηγής δεδομένων) για το πρόγραμμα οδήγησης ODBC (Open DataBase Connectivity), όπου πρέπει να επιλέξετε τον τύπο αυτού του DBMS, τη διεύθυνση κεντρικού υπολογιστή στον οποίο θέλετε να δημιουργήσετε μια σύνδεση, το όνομα της βάσης δεδομένων και δεδομένα εξουσιοδότησης, δηλαδή το όνομα χρήστη και τον κωδικό πρόσβασης (Εικ. .3). Στη συνέχεια, χρησιμοποιώντας τη μονάδα DBI, αλληλεπιδράστε με τη βάση δεδομένων. Επιπλέον, το ActiveState Perl συνήθως συνοδεύεται από μια λειτουργική μονάδα Win32::ODBC (Win32-ODBC). Η εργασία με αυτό είναι λίγο διαφορετική από την εργασία με το DBI, αλλά συνολικά πολύ παρόμοια. Η μόνη διαφορά είναι ότι το Win32::ODBC είναι μια λειτουργική μονάδα μόνο για συστήματα Win32 και σας επιτρέπει να εργάζεστε με εγγενείς λειτουργίες ODBC πιο αποτελεσματικά από το DBD::ODBC.

Ρύζι. 3. Προσθήκη νέας προέλευσης δεδομένων μέσω του διαχειριστή ODBC

Μπορεί να γίνει ένας παράλληλος μεταξύ ODBC και DBI. Το DBI είναι ένα ανάλογο του ODBC Administrator (διαχειριστής προγραμμάτων οδήγησης βάσης δεδομένων). Κάθε πρόγραμμα οδήγησης DBD αντιστοιχεί στις λειτουργίες του σε ένα πρόγραμμα οδήγησης ODBC. Το μόνο που μπορεί να σας μπερδέψει είναι το γεγονός ότι, όπως αναφέρθηκε παραπάνω, υπάρχει πρόγραμμα οδήγησης DBD::ODBC. Αλλά σας επιτρέπει μόνο να δημιουργήσετε επικοινωνία DBI με προγράμματα οδήγησης ODBC.

Για να εγκαταστήσετε το DBI και το DBD-Mysql, χρησιμοποιώντας το βοηθητικό πρόγραμμα PPM σε περιβάλλον Win32, εισαγάγετε στη γραμμή εντολών:

Ppm εγκατάσταση DBI

Λάβετε υπόψη ότι ο υπολογιστής σας πρέπει να είναι συνδεδεμένος στο Διαδίκτυο σε αυτό το σημείο. Εάν έχετε την αντίστοιχη μονάδα στον τοπικό σας δίσκο, χρησιμοποιήστε τις πληροφορίες βοήθειας εισάγοντας την εντολή:

ppm βοήθεια εγκατάστασης

Για χρήστες UNIX, η εγκατάσταση της μονάδας DBI θα είναι σχεδόν ίδια με την εγκατάσταση άλλων λειτουργικών μονάδων Perl:

Tar –zxvf DBI-1.06.tar.gz cd DBI-1.06/ perl Makefile.PL make make test make install

Μπορείτε επίσης να χρησιμοποιήσετε το κέλυφος CPAN. Εάν έχετε εγκατεστημένη στον υπολογιστή σας την έκδοση UNIX του πακέτου ActiveState, μπορείτε επίσης να εργαστείτε με το βοηθητικό πρόγραμμα εγκατάστασης PPM. Μερικές φορές συμβαίνει ότι τα κελύφη CPAN και PPM δεν λειτουργούν εάν ένα τείχος προστασίας ή ένα τείχος προστασίας είναι εγκατεστημένο στο εταιρικό δίκτυο στο οποίο είναι συνδεδεμένος ο υπολογιστής σας. Σε αυτήν την περίπτωση, θα σας βοηθήσουν μόνο οι μονάδες με πηγαίους κωδικούς που έχουν ληφθεί με μη αυτόματο τρόπο. Για να τα εγκαταστήσετε και να συνδεθείτε σε Perl ή Apache, θα χρειαστείτε έναν διερμηνέα Perl, έναν μεταγλωττιστή C/C++ ή GCC/PGCC και ένα από τα βοηθητικά προγράμματα δημιουργίας (από έναν από τους κλώνους του UNIX, καθώς και το Microsoft Visual C++). nmake ή dmake. Έτσι, η διαδικασία εγκατάστασης μονάδων γίνεται κάπως πιο περίπλοκη. Σχεδόν όλα συνοδεύονται από τεκμηρίωση "κατασκευής", οπότε δεν θα πρέπει να έχετε πολύ πρόβλημα.

Εμφάνιση λίστας άρθρων

Τώρα που έχετε μια λειτουργική βάση δεδομένων δελτίου τύπου, μπορείτε εύκολα να τη συνδέσετε στην ιστοσελίδα σας. Ας ξεκινήσουμε δημιουργώντας μια απλή σελίδα που εμφανίζει μια λίστα με όλα τα διαθέσιμα δελτία τύπου. Σημειώστε ότι από προεπιλογή ο διακομιστής Web Apache πιστεύει ότι όλα τα έγγραφά σας πρέπει να βρίσκονται στον κατάλογό του htdocs και τα εκτελέσιμα αρχεία σας πρέπει να βρίσκονται στο cgi-bin. Επομένως, πρέπει να τοποθετήσετε όλα τα αρχεία με την επέκταση .pl στον κατάλογο cgi-bin. Με τη σειρά του, τα δημιουργημένα αρχεία προτύπου HTML πρέπει να τοποθετηθούν στον κατάλογο tpl. Η ιεραρχία του καταλόγου θα μοιάζει με αυτό:

/ (ρίζα οποιουδήποτε δίσκου) /local /local/usr /local/usr/bin /local/usr/cgi-bin /local/usr/htdocs /local/usr/tpl

Για συστήματα DOS/Windows, η διαδρομή προς το cgi-bin μπορεί να μοιάζει με αυτό:

C:\local\usr\cgi-bin

σημαντική δράση

Χρησιμοποιώντας τον αγαπημένο σας επεξεργαστή κειμένου, δημιουργήστε ένα αρχείο pr-list-tpl.htm:

15. 16. 17. Δελτία τύπου 2001 18. 19. 20. @BLOCK@ 21.

22.

Αυτό το αρχείο προορίζεται να εμφανίσει μια λίστα με όλα τα διαθέσιμα δελτία τύπου.

Βήμα 1

Δημιουργήστε ένα αρχείο pr-list-block-tpl.htm που θα εμφανίζει κάθε μπλοκ με το δελτίο τύπου που βρέθηκε με τη μορφή πίνακα:

23.

24. 25. 26.
@ΤΙΤΛΟΣ@
@ΣΥΓΓΡΑΦΕΑΣ@, _ @DATE@

Βήμα 2

Δημιουργήστε ένα αρχείο pr-content-tpl.htm που θα εμφανίζει το περιεχόμενο του δελτίου τύπου:

27. 28. 29. Δελτία τύπου 2001: @TITLE@ 30. 31. 32.

@ΤΙΤΛΟΣ@

33. 34. 35. 36. 37.
@ΤΙΤΛΟΣ@
Συγγραφέας: @ΣΥΓΓΡΑΦΕΑΣ@Ημερομηνία: @DATE@
@ΣΩΜΑ@
38. Εμφάνιση της λίστας με τα δελτία τύπου.. 39.

40.

Βήμα 4

Δημιουργήστε ένα σενάριο Perl pr-list-dbi.pl που θα διαβάζει δεδομένα από τη βάση δεδομένων db_website και, χρησιμοποιώντας αρχεία προτύπων HTML, θα εμφανίζει μια λίστα με δελτία τύπου (μπορείτε να βρείτε το κείμενο αυτού του σεναρίου στο CD μας).

Τώρα ας περάσουμε από τη λίστα κωδικών και ας δούμε πώς λειτουργεί το πρόγραμμα για την εμφάνιση λίστας δελτίων τύπου.

Οι γραμμές 1-9 είναι σαν ένα μπλοκ αρχικοποίησης στο οποίο δηλώνονται όλες οι καθολικές μεταβλητές και σταθερές:

41. #!/local/usr/bin/perl 42. 43. χρήση DBI; 44. $dbh = DBI->connect('dbi:mysql:db_website','root',''); 45. $path = "/local/usr/tpl"; 46. ​​$TPL_LIST = "$path/pr-list-tpl.htm"; 47. $TPL_LIST_BLOCK = "$path/pr-list-block-tpl.htm"; 48. 49. εκτύπωση "Content-type:text/html\n\n";

Αρχικά λέμε στον διακομιστή Web Apache τη διαδρομή προς το σημείο όπου βρίσκεται ο διερμηνέας Perl, η οποία εκτελείται όταν ζητηθεί το σενάριο, το ελέγχει για σφάλματα και στη συνέχεια το εκτελεί. Στη συνέχεια, δηλώνουμε το module DBI (DataBase Interface), οι μέθοδοι του οποίου θα χρησιμοποιηθούν στο πρόγραμμα για την αλληλεπίδραση με τη βάση δεδομένων (γραμμή 3). Στη συνέχεια, δημιουργούμε μια σύνδεση με τη βάση δεδομένων μας db_website(4) χρησιμοποιώντας root (διαχειριστής) ως όνομα χρήστη σύνδεσης και μια κενή συμβολοσειρά (η προεπιλογή) ως κωδικό πρόσβασης. Στη μεταβλητή $path υποδεικνύουμε τη διαδρομή όπου βρίσκονται τα αρχεία προτύπου HTML (5). Στις μεταβλητές $TPL_LIST και $TPL_LIST_BLOCK υποδεικνύουμε τα ονόματά τους (6, 7) αντίστοιχα. Στη συνέχεια, λέμε στον διακομιστή Ιστού ότι όλα τα εξερχόμενα δεδομένα πρέπει να παρουσιάζονται σε μορφή κειμένου/html MIME για έξοδο της ροής HTML στο πρόγραμμα περιήγησης του χρήστη (9).

Οι γραμμές 11-22 αντιπροσωπεύουν το σώμα του προγράμματος:

50. 51. open(L, "$TPL_LIST"); 52. ενώ ($line1= ) ( 53. chomp($line1); 54. if ($line1=~/\@BLOCK\@/) ( 55. read_db(); 56. ins_data(); 57. ) else ( 58. print "$line1 \n"; 59. ) 60. ) 61. κλείσιμο(L); 62. 63. $dbh->disconnect;

Ανοίξτε το αρχείο προτύπου pr-list-tpl.htm (11) και κοιτάξτε το σε βρόχο (12-20), γράφοντας κάθε γραμμή που διαβάζεται στη μεταβλητή $line. Κατά τη διάρκεια κάθε επανάληψης, ελέγχουμε για την παρουσία της λέξης-κλειδιού @BLOCK@ (14-19) σε αυτή τη γραμμή, πράγμα που σημαίνει ότι θα πρέπει να εισαχθεί ένα μπλοκ με δελτίο τύπου σε αυτό το σημείο. Μόλις βρεθεί, καλούμε τις διαδικασίες read_db() και ins_data().

Οι γραμμές 26-39 είναι το σώμα της διαδικασίας read_db(), που έχει σχεδιαστεί για να διαβάζει τα περιεχόμενα του πίνακα tbl_news_items, ο οποίος αποθηκεύει τα δελτία τύπου μας:

64. 65. 66. sub read_db ( 67. $c=0; 68. my($sql) = "SELECT * FROM tbl_news_items"; 69. $rs = $dbh->prepare($sql); 70. $rs ->execute; 71. while (my $ref = $rs->fetchrow_hashref()) ( 72. $id[$c] = "$ref->('col_id')"; 73. $title[$c] = "$ref->('col_title')" 74. $author[$c] = "$ref->('col_author')" 75. $date[$c] = "$ref->('; col_date')"; 76. $c++; 77. ) 78. $rs->finish(); 79. )

Αρχικοποιούμε τον μετρητή $c=0, δημιουργούμε ένα ερώτημα για την επιλογή όλων των δεδομένων από τον πίνακα (28), εκτελούμε το ερώτημα (29, 30) και μεταφέρουμε τα δεδομένα στο σύνολο εγγραφών (σύνολο εγγραφών) $rs. Στη συνέχεια, στον βρόχο (31-37), εξάγουμε δεδομένα από το σύνολο εγγραφών χρησιμοποιώντας τη μέθοδο fetshrow_hashref και επιστρέφουμε έναν σύνδεσμο στον συσχετιστικό πίνακα %ref (31), που περιέχει τα ονόματα και τις τιμές των πεδίων της τρέχουσας εγγραφής. Γράφουμε τα εξαγόμενα δεδομένα (32-35) στους συνηθισμένους πίνακες @id, @title, @author και @date που αντιστοιχούν στους τύπους τους. Κλείνουμε το ρεκόρ (38).

Γραμμές 41-53 - το σώμα της διαδικασίας ins_data(), η οποία υλοποιεί την εισαγωγή δεδομένων που εξάγονται από τη βάση δεδομένων στη ροή εξερχόμενων δεδομένων. γραμμές 55-63 - το σώμα της διαδικασίας pr_block(), που καλείται σε βρόχο από τη διαδικασία ins_data():

80. 81. sub ins_data ( 82. $toread = "pr-read-dbi.pl"; 83. για ($i=0; $i<$c; $i++) { 84. $line = &pr_block; 85. 86. $line =~ s/\@NUMBER\@/$id[$i]/; 87. $line =~ s/\@TITLE\@/$title[$i]/; 88. $line =~ s/\@AUTHOR\@/$author[$i]/; 89. $line =~ s/\@DATE\@/$date[$i]/; 90. $line =~ s/\@READ\@/$toread/; 91. print "$line"; 92. } 93. } 94. 95. sub pr_block { 96. my($block) = ‘’; 97. open (B, "$TPL_LIST_BLOCK"); 98. while ($line=) ( 99. $block = $block.$line; 100. ) 101. close(B); 102. επιστροφή ($block); 103.)

Έτσι, έχοντας λάβει τη μέγιστη τιμή του μετρητή $c ως αποτέλεσμα της διαδικασίας read_db(), στον βρόχο (43-52) ξεκινάμε τη διαδικασία pr_block(), η οποία διαβάζει τα περιεχόμενα του προτύπου HTML pr-list- block-tpl.htm και την εγγράφει στη μεταβλητή $block (59), η τιμή της οποίας στη συνέχεια επιστρέφεται (62) στη μεταβλητή $line (44) της διαδικασίας ins_data(). Περαιτέρω στον ίδιο βρόχο αντικαθιστούμε (46-50) τις λέξεις-κλειδιά @NUMBER@, @TITLE@, @AUTHOR@, @DATE@, @READ@ που βρίσκονται στη γραμμή εξερχόμενης ροής $ με τις τιμές του πίνακα που αντιστοιχούν σε αυτήν την επανάληψη του βρόχου ($i) @id, @title, @author, @date και της μεταβλητής $toread.

Εκτύπωση του κειμένου του δελτίου τύπου

Αφού εμφανίσουμε μια λίστα με όλα τα δελτία τύπου που είναι διαθέσιμα στη βάση δεδομένων (Εικ. 4), πρέπει να δώσουμε στον χρήστη την ευκαιρία να δει το κείμενο οποιουδήποτε από αυτά (μπορείτε επίσης να βρείτε το αντίστοιχο σενάριο στο CD μας).

Ρύζι. 4.

Το νέο σενάριο pr-read-dbi.pl θα διαφέρει ελαφρώς από το pr-list-dbi.pl που έχουμε ήδη δημιουργήσει.

Αυτή η καταχώριση είναι κατά 98% παρόμοια με την Καταχώριση 1, αν και υπάρχουν κάποιες μικρές διαφορές:

  • η βιβλιοθήκη CGI είναι συνδεδεμένη για την ανάγνωση της παραμέτρου id (9) από τη συμβολοσειρά ερωτήματος (για παράδειγμα, http://localhost/cgi-bin/pr-content-dbi.pl?id=1).
  • χρησιμοποιείται μόνο ένα πρότυπο HTML (pr-content-tpl.htm).
  • το ερώτημα της βάσης δεδομένων συμπληρώνεται με μια υπό όρους δήλωση SQL WHERE για την ανάκτηση όλων των δεδομένων που αντιστοιχούν σε ένα συγκεκριμένο δελτίο τύπου από το col_id.
  • Το πεδίο col_body με το κείμενο του επιλεγμένου δελτίου τύπου διαβάζεται επίσης από τη βάση δεδομένων.

Δημιουργία νέου δελτίου τύπου

Ας επεκτείνουμε τη λειτουργικότητα του συστήματός μας προσθέτοντας τη δυνατότητα δημιουργίας νέων δελτίων τύπου, χωρίς την ανάγκη άμεσης συνεργασίας με τη βάση δεδομένων για την αναπλήρωση του πίνακα tbl_news_items με νέες πληροφορίες.

Έτσι, το νέο πρόγραμμα Perl (το οποίο, όπως και τα δύο προηγούμενα, είναι σε CD) θα διαφέρει από τα προηγούμενα κυρίως στο ότι δεν προορίζεται για την εμφάνιση δεδομένων, αλλά για την προσθήκη τους στη βάση δεδομένων. Επομένως, πρέπει να αλλάξουμε ελαφρώς το τμήμα που είναι υπεύθυνο για την αλληλεπίδραση με τη βάση δεδομένων χρησιμοποιώντας το ερώτημα INSERT SQL και τους αντίστοιχους τελεστές της μονάδας DBI.

Οι γραμμές 12-18 είναι το σώμα του κύριου προγράμματος:

12. if ($cmd ne "add") ( 13. &show_form; 14. ) other ( 15. $dbh = DBI->connect('dbi:mysql:db_website', _ 'root',''); 16. &add_pr; 17. dbh->disconnect;

Εδώ ελέγχουμε αν έχει ληφθεί η εντολή προσθήκης του δελτίου τύπου στη βάση δεδομένων. Μόλις φτάσει, δημιουργούμε μια σύνδεση με τη βάση δεδομένων (15), εκτελούμε την υπορουτίνα app_pr() (16) και τερματίζουμε τη σύνδεση (17). Εάν δεν υπήρχε εντολή, τότε απλώς εμφανίζουμε τη φόρμα συμπλήρωσης (13) για τα δεδομένα του δελτίου τύπου - τη διαδικασία show_form().

Μόλις φτάσει, δημιουργούμε μια σύνδεση με τη βάση δεδομένων (15), εκτελούμε την υπορουτίνα app_pr() (16) και τερματίζουμε τη σύνδεση (17). Εάν δεν υπήρχε εντολή, τότε απλώς εμφανίζουμε τη φόρμα συμπλήρωσης (13) για τα δεδομένα του δελτίου τύπου - τη διαδικασία show_form().

19. 20. sub add_pr ( 21. $title = $q->param("pr_title"); 22. $author = $q->param("pr_author"); 23. $body = $q->param( "pr_body"); 24. $body =~ s/\r\n/;
/σολ; 25. 26. my($sql) = "INSERT INTO tbl_news_items (col_title,col_author,col_body,col_date) VALUES (\'$title\',\'$author\',\'$body\',CURDATE()) "; 27. $rs = $dbh->do($sql); 28. 29. if ($@) ( 30. $rc = $dbh->rollback; 31. ) else ( 32. $rc = $dbh->commit; 33. ) 34. 35. print "Location: /cgi -bin/pr-list-dbi.pl\n\n"; 36.)

Αρχικά, επεξεργαζόμαστε τα δεδομένα της φόρμας (22-25), συνθέτουμε ένα ερώτημα SQL (27) και το εκτελούμε (27) χρησιμοποιώντας τη μέθοδο DBI $dbh->do(). Δεδομένου ότι η διαδικασία εισαγωγής δεδομένων στη βάση δεδομένων εκτελείται εδώ, πρέπει να φροντίσετε για τη δυνατότητα ακύρωσης της λειτουργίας σε περίπτωση αποτυχίας. Για να γίνει αυτό, εισάγαμε κωδικό για να ακυρώσουμε τη συναλλαγή και να επαναφέρουμε στην προηγούμενη κατάσταση (30-34). Εάν η $dbh->do() αποτύχει, απορρίπτουμε τις αλλαγές που έγιναν (31). Εάν δεν προκύψει αποτυχία, επιβεβαιώνουμε τις αλλαγές που έγιναν (33). Στη συνέχεια, μετά από όλα τα βήματα, απλώς μεταβαίνουμε στη σελίδα με μια λίστα με όλα τα δελτία τύπου (36).

Οι γραμμές 37-55 είναι το σώμα της διαδικασίας εξόδου της φόρμας για την εισαγωγή πληροφοριών σχετικά με ένα νέο δελτίο τύπου (χρησιμοποιώντας το πρότυπο HTML του οποίου το όνομα καθορίζεται στη μεταβλητή $TPL_INSERT, pr-add-tpl.htm):

37. 38. sub show_form ( 39. print "Content-type:text/html\n\n"; 40. 41. open (L, "$TPL_INSERT"); 42. while ($line= ) ( 43. chomp($line); 44. if ($line=~/\@/) ( 45. if ($line=~/\@ADD\@/) ( 46. $toadd = "pr-add -dbi.pl"; 47. $line =~ s/\@ADD\@/$toadd/; 48. ) else ( 49. $tolist = "pr-list-dbi.pl"; 50. $line =~ s/\@LIST\@/$tolist/ 51. ) 52. ) 53. print "$line\n" 54.

) ( 43. chomp($line); 44. if ($line=~/\@/) ( 45. if ($line=~/\@ADD\@/) ( 46. $toadd = "pr-add -dbi.pl"; 47. $line =~ s/\@ADD\@/$toadd/; 48. ) else ( 49. $tolist = "pr-list-dbi.pl"; 50. $line =~ s/\@LIST\@/$tolist/ 51. ) 52. ) 53. print "$line\n" 54.

Εφόσον αναπτύσσετε έναν δυναμικό ιστότοπο, ο όγκος των πληροφοριών σε αυτόν μπορεί να αυξηθεί αρκετά γρήγορα. Επιπλέον, καθώς αυξάνεται η δημοτικότητα του πόρου σας, αυξάνεται και ο αριθμός των επισκεπτών του, γεγονός που μπορεί να οδηγήσει σε υπερφόρτωση διακομιστή, δηλαδή σε μείωση της απόδοσης του συστήματος. Πριν ξεκινήσετε να αναζητάτε τρόπους για να αυξήσετε την ισχύ του υλικού και προσπαθήσετε να βρείτε μια νέα διαμόρφωση συστήματος, μπορείτε να προσπαθήσετε να εξαλείψετε μία από τις πιθανές αιτίες υπερβολικής κατανάλωσης RAM. Ο ένοχος μπορεί να είναι η ίδια Perl. Το γεγονός είναι ότι κάθε φορά που αποκτάτε πρόσβαση σε ένα ή άλλο σενάριο Perl, ο διακομιστής Web φορτώνει τον διερμηνέα στη μνήμη RAM (καταλαμβάνει 500-1000 KB στον σκληρό δίσκο) και ο τελευταίος αναλύει το πρόγραμμα από την αρχή μέχρι το τέλος σε αναζήτηση σύνταξης λάθη. Μετά από αυτό, το διαβάζει ξανά, αρχικοποιώντας μεταβλητές και συναρτήσεις, διαβάζοντας τα δεδομένα εισόδου (παραμέτρους), επεξεργάζεται και επιστρέφει τα αποτελέσματα. Μπορείτε να φανταστείτε τι θα συμβεί αν εκατοντάδες επισκέπτες στον ιστότοπό σας θέλουν να βλέπουν τα δελτία τύπου σας ταυτόχρονα;

Για να επιταχυνθεί αυτή η διαδικασία, έχουν δημιουργηθεί ειδικές λύσεις, οι οποίες είναι πρόσθετες ενότητες για τον διακομιστή Web Apache - mod_fastcgi και mod_perl.

Η ενότητα FastCGI (mod_fastcgi) περιλαμβάνει την ευρεία χρήση εργαλείων ανταλλαγής δεδομένων μεταξύ των εκτελούμενων διεργασιών (εργασιών) του λειτουργικού συστήματος. Όταν ο διακομιστής Web ξεκινά να εκτελείται, ενεργοποιεί ένα πρόγραμμα CGI και αφήνει αυτό το πρόγραμμα και πολλά αντίγραφά του να εκτελούνται στο παρασκήνιο. Τυχόν αιτήματα προς το πρόγραμμα απλώς θα μεταφερθούν σε ήδη ενεργά αντίγραφα, γεγονός που θα απαλλάξει τον διακομιστή από το πρόσθετο φορτίο που σχετίζεται με την επανενεργοποίηση της διαδικασίας.

Η ενότητα mod_perl σάς επιτρέπει να φορτώσετε την Perl στη μνήμη RAM στον ίδιο χώρο διευθύνσεων με τον ίδιο τον διακομιστή Web Apache και να αφήσετε την Perl στη μνήμη μέχρι να τερματιστεί η τελευταία, αποτρέποντας τη φόρτωση του επόμενου αντιγράφου του διερμηνέα κατά την πρόσβαση σε ένα πρόγραμμα CGI. Αυτή η ενότητα χρησιμοποιείται πιο συχνά από το FastCGI επειδή δεν απαιτεί αλλαγές στο πρόγραμμα.

Πρόσθετες πληροφορίες

Ο Apache τοποθετείται στην αγορά ως ένας ισχυρός και ευέλικτος διακομιστής Web που είναι συμβατός με το πρότυπο HTTP/1.1. Περίπου το 60% όλων των διακομιστών Ιστού στο Διαδίκτυο εκτελούν Apache. Η λειτουργικότητα του Apache μπορεί εύκολα να αυξηθεί εγκαθιστώντας ελεύθερα διαθέσιμες μονάδες επέκτασης. Ο πηγαίος κώδικας για αυτόν τον διακομιστή Ιστού είναι διαθέσιμος για σχεδόν οποιαδήποτε πλατφόρμα. Ένα άλλο χρήσιμο χαρακτηριστικό είναι το γεγονός ότι ο Apache σας επιτρέπει να εργάζεστε με πολλές γλώσσες προγραμματισμού, καθώς και να φορτώνετε ορισμένες από αυτές στο χώρο διευθύνσεών του, αυξάνοντας έτσι την ταχύτητα αλληλεπίδρασης μεταξύ του χρήστη του Διαδικτύου και του συστήματος.

Η MySQL είναι ένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων πολλαπλών πλατφορμών (RDBMS, Σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων) που χρησιμοποιεί τη γλώσσα ερωτημάτων SQL (Structured Query Language). Αρχικά, η MySQL, όπως ο Apache και ακόμη και η Perl, κυκλοφόρησε μόνο σε έκδοση για συστήματα UNIX, επομένως εξακολουθεί να διατηρεί τη διεπαφή της γραμμής εντολών. Ωστόσο, πρόσφατα κυκλοφόρησε ένας τεράστιος αριθμός διαχειριστών γραφικών που διευκολύνουν τις εργασίες διαχείρισης. Επιπλέον, η MySQL για Linux και Windows συνοδεύεται από έναν διαχειριστή του οποίου το γραφικό περιβάλλον είναι παρόμοιο με αυτό που χρησιμοποιεί ο διαχειριστής παραθύρων του KDE στο κέλυφος X Window του Linux.



Συνιστούμε να διαβάσετε

Κορυφή