Ανάπτυξη ιστοτόπου σε περιβάλλον 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 κώδικας:

<?php
 $keimeno = "αυτή η γραμμή  
καταλαμβάνει τέσσερις γραμμές
οι οποίες θα υπάρχουν στην έξοδο του σεναρίου 
αλλά όχι και στον πλοηγό" ;
 echo "$keimeno";
?>

PHP έξοδος:

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

HTML εμφάνιση:

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


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

PHP κώδικας:

<?php
 $color = "κόκκινο" ;
 echo "Γειά σου κόσμε.\n";
 echo "Το αγαπημένο μου χρώμα είναι το $color\n" ;
 echo "Το αγαπημένο μου χρώμα είναι το \$color\n" ;
 echo 'Το αγαπημένο μου χρώμα είναι το $color\n' ;
 echo "α!" ;
?>
?>

PHP έξοδος:

Γειά σου κόσμε.
Το αγαπημένο μου χρώμα είναι το κόκκινο
Το αγαπημένο μου χρώμα είναι το $color
Το αγαπημένο μου χρώμα είναι το $color\nα!

HTML εμφάνιση:

Γειά σου κόσμε. Το αγαπημένο μου χρώμα είναι το κόκκινο Το αγαπημένο μου χρώμα είναι το $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