Ανάπτυξη ιστοτόπου σε περιβάλλον Debian/php
Εγκατάσταση php
[επεξεργασία]Παρακάτω αναφέρονται το ελάχιστο των πακέτων που πρέπει να είναι εγκατεστημένα για να μπορεί ο εξυπηρετητής apache να επεξεργάζεται αρχεία που περιέχουν κώδικα php. Εννοείται έχει εγκατασταθεί ο apache.
Το λειτουργικό ελάχιστο των πακέτων που χρειάζονται :
- libapache2-mod-php5server-side, HTML-embedded scripting language (apache 2 module)
- php5-common Κοινά αρχεία για πακέτα που δημιουργήθηκαν από τον πηγαίο κώδικα του php5
- php5-mysql
Αυτόματα γίνονται και ρυθμίσεις στα αρχεία php.ini και httpd.conf , πιθανολογώ από τα post-pre installation scripts που υπάρχουν μέσα στα πακέτα, οπότε δεν χρειάζεται να τα διορθώσεις.
Δημιουργία ενός ιστότόπου δοκιμών php
[επεξεργασία]Έστω ότι θέλουμε να δοκιμάσουμε και να πειραματιστούμε στην php .
Θα χρειαστούμε την τελευαταία σταθερή έκδοση της php και να προσθέσουμε στο αρχείο /etc/hosts το όνομα του τοπικού ιστοτόπου μας έστω
Χρησιμοποιώντας κάποιο πρόγραμμα διαχείρισης πακέτων .deb μεταφορτώστε τα πακέτα που χρειάζονται.
Έστω ότι θέλουμε ο ιστότοπος μας αυτός να είναι προσβάσιμος με το όνομα local-phptest. Φυσικά αφού δεν θα είναι προσβάσιμος από άλλους υπολογιστές του δικτύου ίσως αυτό δεν είναι αναγκαίο. πχ θα μπορούσαμε να τον τοποθετήσουμε σαν ξεχωριστο κατάλογο και να είναι προσβάσιμος http://localhost/php-test Όμως αν θέλουμε να μπορούμε να δοκιμάζουμε έυκολα ιστοτόπους διαφορετικής προέλευσης, php,ruby on rails,joomla, κτλ είναι καλύτερη η προσέγγιση που αναλύουμε ,δηλαδή να έχουμε τόσους εικονικούς διακομιστές όσους τοπικούς ιστοτόπους θέλουμε. Οπότε αρχικά κάνουμε την αλλαγή στο /etc/hosts.
127.0.0.1 localhost local-phptest
Κατόπιν πρέπει να δημιουργήσουμε το αρχείο ρυθμίσεων που αφορούν αυτόν τον εικονικό ιστότοπο στον κατάλογο /etc/apache2/sites-available
$ su password: ********** # cd /etc/apache2/sites-available # nano local-phptest <VirtualHost *> ServerName local-phptest DocumentRoot /var/www/phptest/ </VirtualHost> # a2ensite local-phptest # /etc/init.d/apache2 reload
Και αν όλα έχουν καλώς το url http://local-phptest θα πρέπει να μας οδηγήσει στον ιστότοπό μας.
Έμφανιση-έξοδος σε php σενάρια
[επεξεργασία]Κάτι πολύ σημαντικό που πρέπει να έχουμε υπόψην μας όταν θέλουμε να χρησιμοποιήσουμε εντολές εκτύπωσης-εξόδου όπως echo ,print είναι ότι αυτό που θα βγάλει σαν έξοδο η εκτέλεση του php σεναρίου μας από την php μηχανή δεν είναι απαραίτητα αυτό που θα δούμε στην οθόνη του πλοηγού μας. Αυτό συμβαίνει γιατί η έξοδος του php σεναρίου χρησιμοποιείται για την κατασκευή ενός εγγράφου xhtml το οποίο και θα σταλεί στον πελάτη πλοηγό του παγκόσμιου ιστού που ξεκίνησε αυτήν την αίτηση. Αυτό το html έγγραφό λοιπόν εμφανίζεται από τον πλοηγό με κάποιους κανόνες ,όπως πχ την αφαίρεση όλων των λευκών χαρακτήρων από ένα κομμάτι κειμένου. Δείτε σχετικά τα δύο παραδείγματα.
<?php $keimeno = "αυτή η γραμμή καταλαμβάνει τέσσερις γραμμές οι οποίες θα υπάρχουν στην έξοδο του σεναρίου αλλά όχι και στον πλοηγό" ; echo "$keimeno"; ?>
αυτή η γραμμή καταλαμβάνει τέσσερις γραμμές οι οποίες θα υπάρχουν στην έξοδο του σεναρίου αλλά όχι και στον πλοηγό
<?php $color = "κόκκινο" ; echo "Γειά σου κόσμε.\n"; echo "Το αγαπημένο μου χρώμα είναι το $color\n" ; echo "Το αγαπημένο μου χρώμα είναι το \$color\n" ; echo 'Το αγαπημένο μου χρώμα είναι το $color\n' ; echo "α!" ; ?> ?>
Γειά σου κόσμε. Το αγαπημένο μου χρώμα είναι το κόκκινο Το αγαπημένο μου χρώμα είναι το $color Το αγαπημένο μου χρώμα είναι το $color\nα!
Απασφαλμάτωση
[επεξεργασία]Η αποσφαλμάτωση μπορεί να γίνει με χρήση της php επέκταση xdebug. Το πακέτο .deb λέγεται php5-xdebug
Σε περίπτωση μη αυτόματης εγκατάστασης πρέπει να κάνετε λήψη και τοποθέτηση της επέκτασης στον σωστό κατάλογο και κατόπιν στο αρχείο php.ini (που στην έκδοση etch βρίσκεται στον κατάλογο /etc/php5/apache2/) να προσθέσετε
zend_extension="/usr/lib/php5/*/xdebug.so",
και τέλος να κάνετε επανεκκίνηση του πλοηγού.
Αφού έχει γίνει η εγκατάσταση μπορείτε να ελέγξετε αν έγινε μεσω μιας απλή κλήσης της php συνάρτησης phpinfo σε ένα σενάριο κοιτάζωντας δίπλα στο zend λογότυπο.
Το επόμενο βήμα είναι η χρήση ενός περιβάλλοντος εργασίας php εγχειρημάτων που θα μπορεί να εκκινήσει μια σύνοδο αποσφαλμάτωσης (με το πρωτόκολλο DBGp) με την επέκταση Xdebug της php μηχανής. Πιθανά περιβάλλοντα:
- emacs + geben
- eclipse PDT
- Quanta_Plus (λόγω μετάβασης του Squeeze στο KDE4 το quanta δεν συμπεριλαμβάνεται στο squeeze αφού ακόμα βασίζεται στις βιβλιοθήκες kde3)
Emacs + geben
[επεξεργασία]Αφού έχουμε ρυθμίσει σωστά την πλευρά του εξυπηρετητή (xdebug επέκταση) αυτό που μένει είναι η πλευρά του πελάτη που θα επικοινωνήσει μέσω του πρωτοκόλλου DBGp με τον εξυπηρετητή για μια σύνοδο αποσφαλμάτωσης.
Η εγκατάσταση του geben στο etch γίνεται από τον τον ιστότοπο του εγχειρήματος geben με λήψη του αρχείου geben-VER.tar.gz , την αποσυμπίεση του και την εγκατάσταση του ακολουθώντας της οδηγίες του README αρχείου. Στην περίπτωση μου έκανα την αποσυμπίση στον κατάλογο ~/.emacs.d/geben-0.24 και στο αρχείο ~/.emacs πρόσθεσα
(add-to-list 'load-path "/home/chomwitt/.emacs.d/geben-0.24") (autoload 'geben "geben" "PHP Debugger on Emacs" t)
Ελέγχουμε το αρχείο /etc/php5/conf.d/xdebug.ini και αν δεν έχει προσθέτουμε τις παρακάτω ρυθμίσεις:
# nano /etc/php5/conf.d/xdebug.ini zend_extension=/usr/lib/php5/20090626/xdebug.so xdebug.remote_enable=On xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_autostart=On xdebug.remote_handler="dbgp"
Κατόπιν επανεκκινούμε τον emacs.
Η διαδικασία για να γίνει αποσφαλμάτωση ενός τοπικού ιστοτόπου είναι η εξής:
- Έχουμε καταρχάς στήσει έναν τοπικό ιστότοπο που εξυπηρετείται από τον apache μας και είναι προσβάσιμος από τον πλοηγός πχ με το url http://testsite
- Ενεργοποιούμε το geben major(;) mode με M-x geben.
- Φορτώνουμε στον πλοηγό μας τo υπο-εξέταση php σενάριο πχ: http://testsite/test.php?XDEBUG_SESSION_START=1 . Η παράμετρος XDEBUG_SESSION_START απαιτείται ή όχι ανάλογα με την διαμόρφωση του xdebug.
Κατόπιν μπορούμε να δίνουμε τις παρακάτω εντολές για να κάνουμε την αποσφαλμάτωση:
- spc step into/step over
- i step into
- o step over
- r step out
- g run
- c run to cursor
- b set a breakpoint at a line
- B set a breakpoint interactively
- u unset a breakpoint at a line
- U clear all breakpoints
- \C-b display breakpoint list
- > set redirection mode
- \C-u t change redirection mode
- d display backtrace
- t display backtrace
- v display context variables
- w where
- q stop