====== PHP - εκτέλεση εντολών ====== * Στην προηγούμενη άσκηση είδαμε κάποια προγραμματιστικά στοιχεία της php όπως μεταβλητές και δομή επανάληψης και πως συνδυάζονται με την html * Στην νέα άσκηση θα δούμε επιπλέον δυνατότητες, όπως ανανέωση σελίδας, εκτέλεση εντολών στον server και άλλα.. - **Ανανέωση σελίδας** - Ακριβώς πριν κλείσει η php με **?>** πάνω από το **** και μέσα στην php, θα προσθέσουμε τις εξής εντολές * $page = $_SERVER['PHP_SELF']; header( "refresh:5;url=$page" ); * Η 1η εντολή αποθηκεύει σε μια μεταβλητή **$page** την σελίδα που βρισκόμαστε (εδώ την **demo.php**). * Η 2η εντολή ορίζει στην επικεφαλίδα (header) της σελίδας να ανανεώνει τον εαυτό της κάθε 5 δλ. - Αλλάξτε την ανανέωση να γίνεται κάθε 10 δλ ή ότι άλλο θέλετε εσείς. - Εκτέλεση εντολών * Γνωρίζουμε ήδη κάποιες [[el:school:lessons:linux:theory:commands|εντολές στο linux]] - Ανοίγουμε ένα τερματικό και εκτελούμε την εντολή **pwd**. Θα μας εμφανίσει τον φάκελο στον οποίο βρισκόμαστε. - Πάμε να δούμε πως θα εκτελέσει μια τέτοια εντολή η php. Πάνω από την εντολή **$page = $_SERVER['PHP_SELF'];** κάνουμε χώρο και εισάγουμε τις παρακάτω εντολές * $output = shell_exec('pwd'); echo "
Βρισκόμαστε στον φάκελο
$output
";
* Η 1η καλεί την συνάρτηση **shell_exec**, η οποία εκτελεί την **pwd** και αποθηκεύει τα αποτελέσματα στην **$output** * Η 2η εμφανίζει τα περιεχόμενα της **$output** μέσα στην ετικέτα **
** ώστε να είναι όμορφα μορφοποιημένα.
    - Τα αποτελέσματα εμφανίζονται σε ένα τυχαίο χρώμα κειμένου που ίσως δεν φαίνεται καλά. Εισάγετε με την εντολή **echo** της php την ετικέτα **** με την ιδιότητα που ξέρετε από την html ώστε να ορίσει **χρώμα κειμένου μαύρο** στο κείμενο **Βρισκόμαστε στον φάκελο ..**. Μην ξεχάσετε να κλείσετε την ετικέτα μετά.
    - Με τον ίδιο τρόπο με πριν χωρίς να σβήσετε τα προηγούμενα εκτελέστε επίσης την εντολή **ls -lart**, εμφανίστε το μήνυμα **Τα αρχεία στο φάκελο είναι** και από κάτω εμφανίστε το αποτέλεσμα της εντολής **ls -lart**
    - Ομοίως εκτελέστε την **whoami** και εμφανίστε το μήνυμα **Είμαι ο χρήστης** και δίπλα το αποτέλεσμα της εντολής **whoami**
      * Η **whoami** εμφανίζει τον χρήστη που εκτελεί την php. Εάν είναι ο **www-data** δηλαδή ο ίδιος ο webserver, τότε έχουμε πρόβλημα ασφάλειας.
      - Μπορείτε να φτιάξετε ένα κενό αρχείο **hacked.php** στον φάκελο ενός άλλου χρήστη; Αν ναι κάντε το.
      * **ΠΡΟΣΟΧΗ! Μην εκτελέσετε εντολές που δεν πρέπει γιατί μπορούν να χαθούν αρχεία άλλου χρήστη. **
  - **Τυχαίες εικόνες - τερματικό**
    * Θέλουμε να επιλέξουμε μία τυχαία εικόνα. Ας δούμε πως μπορεί να γίνει στο τερματικό.
    - Ανοίξτε ένα τερματικό και **μετακινηθείτε στον φάκελο** που βρίσκεται το αρχείο **demo.php** π.χ. στον φάκελο **public_html/www** 
    - Εάν έχετε μία εγκατάσταση joomla στον φάκελο **joomla** εκτελέστε την εντολή find joomla -type f -name "*.jpg"
      * Θα εμφανίσει τις εικόνες .jpg που υπάρχουν εκεί.
      * Εναλλακτικά εάν έχετε εικόνες σε έναν φάκελο **Εικόνες** //(2 φακέλους πάνω)// εκτελέστε find ../../Εικόνες -type f -name "*.jpg"
    - Μετρήστε τις εικόνες με την εντολή  find joomla -type f -name "*.jpg" | wc -l
    - Τέλος εμφανίστε π.χ. την 3η εικόνα με την εντολή  find joomla -type f -name "*.jpg" | sed '3q;d'
  - **Τυχαίες εικόνες - PHP**
    * Πάμε να χρησιμοποιήσουμε τις παραπάνω εντολές ώστε να εμφανίσουμε την τυχαία εικόνα μέσω php.
    - Εισάγουμε τις παρακάτω εντολές στην php 
      * $numofimages=shell_exec('find joomla -type f -name "*.jpg" | wc -l');
$randomnum=rand(1, $numofimages);
echo "Θα εμφανίσω την $randomnum" . "η από τις $numofimages εικόνες
";
* Η 1η εντολή βρίσκει τον αριθμό των εικόνων και τον αποθηκεύει στην μεταβλητή **$numofimages** * Η 2η εντολή υπολογίζει έναν τυχαίο αριθμό από **1** έως **$numofimages** και τον αποθηκεύει στην μεταβλητή **randomnum** - Πάμε να πάρουμε το όνομα του τυχαίου αρχείου εικόνας ώστε να το βάλουμε στην συνέχεια στην ετικέτα ****. Εισάγετε τις παρακάτω εντολές. * $cmd="find joomla -type f -name \"*.jpg\" | sed '" . $randomnum . "q;d'"; $randomimg=shell_exec($cmd); echo "Εκτέλεσα την εντολή
 $cmd 

"; echo "Θα εμφανίσω την εικόνα $randomimg
";
* Αρχικά έχουμε την εντολή που θα εμφανίζει μόνο μια τυχαία εικόνα από όλες, αυτήν που βρίσκεται στην γραμμή **$randomnum**. Αποθηκεύουμε την εντολή που θα εκτελέσουμε (δεν έχει εκτελεστεί ακόμα) στην μεταβλητή **$cmd** * Η 2η εντολή εκτελεί την **$cmd** και αποθηκεύει την τυχαία εικόνα στην μεταβλητή **$randomimg** - Πλέον έχουμε την εικόνα που θέλουμε στην μεταβλητή **$randomimg**. Γνωρίζουμε από την html πως να εμφανίσουμε μια εικόνα. Θα χρησιμοποιήσουμε την **echo** της php ώστε να εισάγουμε τον html κώδικα που θα εμφανίσει την εικόνα **$randomimg**. **ΠΡΟΣΟΧΗ!** Για να εμφανίσει η echo **"** //(διπλά εισαγωγικά)// θα πρέπει να τα βάζουμε ως **\"** * Εάν τα καταφέραμε, έχουμε μια ιστοσελίδα πλέον που αλλάζει συνεχώς και εικόνες.