Προγραµµατισµός στην πλευρά του εξυπηρετητή Μάθηµα #4 Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 1
Web services/ protocols XML, που περιλαµβάνει βασική XML, XML schemas και XML parsers. SOAP (Simple Object Access Protocol), που αποτελεί ένα πρωτόκολλο επικοινωνίας εφαρµογών βασισµένο σε XML. WSDL (Web Services Description Languages), που είναι ένα XML schema για περιγραφή των µηνυµάτων, λειτουργιών και αντιστοιχήσεις πρωτοκόλλων των υπηρεσιών διαδικτύου. UDDI (Universal Description Discovery and Integration), που είναι ο χώρος αποθήκευσης για καταχώρηση και αναζήτηση περιγραφών υπηρεσιών διαδικτύου. Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 2
ιασύνδεση µε εφαρµογές στον εξυπηρετητή Φυλλοµετρητής (επεξεργασία πλευράς χρήστη π.χ. JavaScript ή Java) Web server (APACHE, IIS κλπ) CGI, ISAPI ASP, PHP custom program (Java, C++ Perl) script Data Base ODBC HTML Λειτουργικό σύστηµα JDBC XML εξυπηρετητής Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 3
Επεξεργασία αιτηµάτων στον server Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 4
CGI Common Gateway Interface Τρόπος επικοινωνίας µε προγράµµατα (γραµµένα σε γλώσσες όπως C, C++, Pascal, Fortran κλπ) στην πλευρά του εξυπηρετητή. Παράδειγµα προγράµµατος CGI σε C #include <stdio.h> #include <unistd.h> main() { int i, n; printf("content-type: text/plain\n\n"); n = 0; if (getenv("content_length")) n = atoi(getenv("content_length")); for (i = 0; i < n; i ++) putchar(getchar()); putchar('\n'); fflush(stdout); } Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 5
Μηχανισµός Server-side script Όταν ο φυλλοµετρητής ζητήσει ένα αρχείο HTML o εξυπηρετητής το επιστρέφει αµέσως Όταν όµως ο φυλλοµετρητής ζητήσει µια σελίδα.asp ή.php τότε ο εξυπηρετητής περνάει το αίτηµα στη µηχανή ASP ή PHP H µηχανή ASP/PHP διαβάζει το αρχείο και εκτελεί το script γραµµή-γραµµή. Τέλος το αρχείο ASP/PHP επιστρέφεται στον φυλλοµετρητή ως απλή HTML Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 6
Τυπικές χρήσεις ενός script στο server Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 7
ASP vs PHP Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 8
ASP (Active Server Pages) Μόνο σε περιβάλλον IIS. Ορίζονται RESPONSE, REQUEST, SESSION, APPLICATION. Π.χ. Η request ζητάει δεδοµένα από τον χρήστη: <% Request.QueryString("Quantity") %> H write στέλνει δεδοµένα στον χρήστη. <% Response.write( Hello world ) %> χρήση cookies για αποθήκευση ενδιάµεσων πληροφοριών στην πλευρά του χρήστη: <% Request.Cookie("Cookiename") %> Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 9
ASP: παράδειγµα <HTML><HEAD> <TITLE>Form1.htm</TITLE></HEAD> <BODY><H2>Please enter:</h2> <FORM <HTML><HEAD><TITLE>ProcessForm.asp</TITLE></HEAD> ACTION="ProcessForm.asp" METHOD="post"> <P>Your name: <INPUT TYPE="text" SIZE=20 NAME="FullName"> <BODY><H2>You entered:</h2><p> <P>Your phone number: <INPUT TYPE="text" SIZE=11 NAME="Phone"> <P>Your <% e-mail address: <INPUT TYPE="text" SIZE=45 NAME="EMail"> <P><INPUT Response.Write( TYPE="submit" "<B>Your VALUE="Do name:</b> It!"></FORM> " & </BODY></HTML> Request.Form("FullName") & "<BR>") Response.Write( "<B>Your phone number:</b> " & Request.Form("Phone") & "<BR>") Response.Write( "<B>Your e-mail address:</b> " & Request.Form("EMail") & "<BR>") %> </BODY> </HTML> Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 10
πλεονεκτήµατα Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 11
Π.χ. Hello World! ΠΡΟΣΟΧΗ: <?php...?> είναι προτιµότερο από <?...?> στην PHP 4.0 Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 12
Hello World / 2 print $greeting = <html> print ($greeting) <body> <% dim greeting dim num greeting = "Hello " num = 3 + 2 num = num+1 response.write greeting & num & " people!" %> </body> </html> <html> <body> <? $greeting="hello "; $num=3+2; $num=$num+1; print $greeting.$num." people!";?> </body> </html> Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 13
PHP variables valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscore <?php $var = "Bob"; $Var = "Joe"; echo "$var, $Var"; // outputs "Bob, Joe" $4site = 'not yet'; // invalid; starts with a number $_4site = 'not yet'; // valid; starts with an underscore $täyte = 'mansikka'; // valid; 'ä' is ASCII 228.?> Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 14
$_SERVER πιο πρόσφατο PHP 4.1.0. $HTTP_SERVER_VARS πιο παλιό PHP 3 Server Variables Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 15
PHP $_SERVER παράµετροι 'PHP_SELF' 'argv' 'argc' 'GATEWAY_INTERFACE' 'SERVER_NAME' 'SERVER_SOFTWARE' 'SERVER_PROTOCOL' 'REQUEST_METHOD' 'QUERY_STRING' 'DOCUMENT_ROOT' 'HTTP_ACCEPT' 'HTTP_ACCEPT_CHARSET' 'HTTP_ACCEPT_ENCODING' 'HTTP_ACCEPT_LANGUAGE' 'HTTP_CONNECTION' 'HTTP_HOST' 'HTTP_REFERER' 'HTTP_USER_AGENT' 'REMOTE_ADDR' 'REMOTE_HOST' 'REMOTE_PORT' 'SCRIPT_FILENAME' 'SERVER_ADMIN' 'SERVER_PORT' 'SERVER_SIGNATURE 'PATH_TRANSLATED' SCRIPT_NAME' 'REQUEST_URI' 'PHP_AUTH_USER' 'PHP_AUTH_PW' 'PHP_AUTH_TYPE' Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 16
Arrays Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 17
PHP Arrays array( [key =>] value,... ) // key is either string or nonnegative integer // value can be anything <?php $arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; echo $arr[12];?> Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 18
οµές ελέγχου: for Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 19
PHP for (expr1; expr2; expr3) statement ή for (expr1; expr2; expr3): statement;...; endfor; /* example 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* example 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; } print $i; } /* example 3 */ $i = 1; for (;;) { } if ($i > 10) { } break; print $i; $i++; /* example 4 */ for ($i = 1; $i <= 10; print $i, $i++); Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 20
οµές ελέγχου: if Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 21
PHP if if ($a > $b) { print "a is bigger than b"; $b = $a; } ---------------------- if ($a > $b) { print "a is bigger than b"; } elseif ($a == $b) { print "a is equal to b"; } else { print "a is smaller than b"; } Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 22
Login form Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 23
Φόρµες: διαχείριση στοιχείων Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 24
Η χρήση cookies για τη διαχείριση συνόδου του χρήστη Το cookie είναι ένα µικρό αρχείο που δηµιουργείται στο περιβάλλον του φυλλοµετρητή του χρήστη. Κάθε φορά που ο ίδιος φυλλοµετρητής ζητάει µια σελίδα από τον server, στέλνει µαζί και το cookie. Τα script ASP/PHP µπορούν και να πάρουν και να ορίσουν τις τιµές των cookies. ηµιουργείται ένα µοναδικό cookie από τον server για κάθε χρήστη, που στέλνεται στον φυλλοµετρητή το αντικείµενο session object Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 25
ASP Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 26
PHP Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 27
Σύνδεση µε Β Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 28
ASP Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 29
PHP Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 30
PHP Σύνδεση µε Β Mysql <?php // άνοιγµα σύνδεσης $conn = mysql_connect("localhost", "joeuser", "somepass"); // Επιλογή µε βάση δεδοµένων testdb mysql_select_db("testdb",$conn); // δηµιουργία εντολής SQL $sql = "CREATE TABLE testtable (id int not null primary key auto_increment, testfield varchar (75))"; // εκτέλεση εντολής SQL $result = mysql_query($sql, $conn); // echo the result identifier echo $result;?> Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 31
PHP Εισαγωγή δεδοµένων σε Β Mysql <?php // open the connection $conn = mysql_connect("localhost", "joeuser", "somepass"); // pick the database to use mysql_select_db("testdb",$conn); // create the SQL statement $sql = "INSERT INTO testtable values ('', 'some value')"; // execute the SQL statement if (mysql_query($sql, $conn)) { echo "record added!"; } else { echo "something went wrong"; }?> Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 32
PHP Ανάκτηση δεδοµένων από Β Mysql <?php // open the connection $conn = mysql_connect("localhost", "joeuser", "somepass"); // pick the database to use mysql_select_db("testdb",$conn); // create the SQL statement $sql = "SELECT * FROM testtable"; // execute the SQL statement $result = mysql_query($sql, $conn) or die(mysql_error()); //go through each row in the result set and display data while ($newarray = mysql_fetch_array($result)) { // give a name to the fields $id = $newarray['id']; $testfield = $newarray['testfield']; //echo the results on screen echo "The ID is $id and the text is $testfield <br>"; }?> Ειδικά Κεφάλαια Συστηµάτων Λογισµικού στο ιαδίκτυο 33