154 37 12MB
Polish Pages [404] Year 2010
ORACLE.
Oracle Database
Tworzenie aplikacji internetowych
w
AJAX i PHP
Wykorzystaj możliwości najlepszych technologii!
Lee Barney
Michael McLaughlin
�Hello11
Tytuł oryginału: Oracle Database Ajax & PHP Web Application Development Tłumaczenie: Andrzej Stefański (wprowadzenie, rozdz. I
-
12, dodatki A,
8),
Rafał Jońca (dodatki B - E)
ISBN: 978-83-246-1977-1 Original edition copyright© 2008 by The McGraw-Hill Companies, Inc. All rights reserved. Polish edition copyright© 20 I O by Helion S.A. All rights reserved.
All rights reserved. No part ofthis book may be reproduced or transmitted in any fonn or by any means, electronic or mechanical, including photocopying, recording or
by any infonnation storage retrieval system, without pennission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znald występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania infonnacji zawartych w książce.
Wydawnictwo HELION ul. Kościuszki I c, 44-1 OO GUWICE
tel. 32 231 2219, 32 230 98 63 e-mail:
[email protected] ht1p://helion.pl (księgarnia internetowa, katalog książek)
WWW:
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pllprzyklady/ordatw.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.plluserlopinie?ordatw Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
\
.
I
'
Dla mojej wspaniałej żony Joan i moich synów: Benjamina, Daniela, Joshuy, Samuela i Elijaha. Wieczność z Wami to za mało. Dla Joela DuMonda, najlepszego przyjaciela, jakiego można sobie wyobrazić, i najlepszego pielęgniarza w branży. Bez Ciebie ta książka oraz wiele dużo ważniejszych rzeczy nie byłoby możliwych. Dla właścicieli stacji benzynowej w Palisades Reservoir za jeden idealny dzień pisania przy Waszym stoliku ogrodowym z widokiem na rzekę Snake i góry. - Lee Bflrney
Dla Lisy- mojej odwiecznej towarzyszki, inspiracji, żony i najlepszej przyjaciółki - oraz Sarah, Josepha, Elise, lana, Ariela, Callie, Nathana, Spencera i Christianne - naszych wspaniałych, zesłanych przez niebo, dzieci. Dziękuję Wam za stałe wsparcie, cierpliwość i poświęcenie, które uczyniło możliwym napisanie jeszcze jednej książki. - Michael McLaughlin
Spis treści O autorach
„ . .„ ...........................................................................................
O redaktorze technicznym Wprowadzenie
:zęść I
.......
.
.........
Tworzenie podstaw
.
....
........................................................................
11
........................................................................
13
..... ............................................. .
łozdział 1. Skalowalność JavaScript i PHP Skalowalność
.„ .. „ •. „ ..••••..... „..„ ...............„„ ......
....
17
...........
19 20 21 22 26 28 33 35 36 36 38 40
Skalowanie struktur kontrolnych
....
.
„ „ „ „ „ „ „ „ „ „ „ . „ „ „ „ . „ „ „ „ „ „ „ „ „ „ „ „ „ „„„„„„„„„„„„„
„ ................................................................... „ .... „ .......... „ ...
Skalowanie przetwarzania ciągów znaków
„ „ „ .. „ „ . „ „ „ „ „ „ .. „ „ .. „ „ „ . „ „ . „ „ „ „ „ .. „ „ „ „ „ „ ... „ .. „ „ ..
Skalowanie prostych operacji matematycznych Wpływ obiektów i ich metod na skalowanie
. „ „ „ „ „ „ „ „ . „ . „ . „ „ „ „ . „ . „ . „ . „ . „ .. „ „ . „ „ „ . „ „ „.„.„.
„ „ „ „ „ „ „ . „ „ „ „ „ „ „ „ „ „ „ „ . „ „ „ „ „ „ „ „. . „ „ . „ „ „ „ „ .
Wpływ wielokrotnych żądań wydruku na skalowanie Redukcja obciążenia sieci
„„
„ . „ „ „ „ „ „ . „ . „ . „ „ „ . „ .... „ „ „ „ „ „ . „ „ „ „ „ „ „ „ „ . „ . „ . „ . „ . „ . „ „ „ „ „ „ „ . „ . „ „ . „ .
Wykorzystanie kompresji do zmniejszenia obciążenia Podsumowanie
.'
„ „ „ „ „ . „ . „ . „ „ „ „ „„.„„.„„„„„„. „ „ . „ „ . „ „ „ .
Wykorzystanie AJAX do zmniejszenia obciążenia sieci
„„„„„„.„„„„„„„„„„„„„„„„„„„„„
„„„.„.„„„„„„.„„„„„„„.„„.„.„„„„„.
.......................... „ ..... „ .... „ ..... „ .... „ ........... „ ..... „ .............................................„....
łozdział 2. Modularność PHP i JavaScript
......................„ .. „„ ...............„
.
.. „..............
41 41 42 49 50 52 .54
... „ ............................... „ ...... „ ......... „ .......... „ ....... „ ..........„ . . „ .... „ ............... „...... „...
Projektowanie w rzeczywistym świecie Główny moduł i kontrolery
.... „ .. „ . „ „ . „ . „ „ „ „ „ . „ „ „ . „ „ . „ „ „ . „ „ .. „ „ „ . „ „ „ „ „ „ „ „ „ . „ „ .
. . „ . „ . „ „ „ „ . „ „ „ „ „ „ . „ „ „ . „ „ „ „ „ „ . „ . „ . „ . . „ „ . „ . „ . „ „ „ „ „ . „. . „ . „ „ „ „ „ „ „ „
Kontroler aplikacji i odwzorowania
.... „ ......„ .......................................... „ .. „ ...... „ .. „ ..... „ ....... „ ..
Modularność JavaScript z kontrolerami i odwzorowaniami Podsumowanie
Definiowanie i tworzenie klas Dziedziczenie
„ „ „ „ „ „ „ . „ „ . „ „ ..„ „ . „ „ „ „ „„„„.„„ „„
..... „ .................. „ ..................„........................ „ ....„................„ ...........................
lozdział 3. Obiekty JavaScript i PHP Konstruktory
.
....
. . . . „ ............ „. . . .„ ..... „ . . . . „ . . „ „ ... „ „ . . „ „ .... „ ..... „ . . „ „ .... „ .... „ .... „ .. „ „ . . „ „ .........„ .... „ . . .
Redukcja obciążenia procesora i pamięci
Modulamość
9
...
.
. „....„ .....„ .... „ .... „ ..... „ .... „ ............... „ .... „ .... „
.... 55 55 59 61 63 66 69 74 76
„ „ „ . „ „ „ „ „ .. „ . „ . „ „ „ . „ . „ . „ . „ .. „ . „ . „ . „ . „ . „ . „ . „ . „ . „ „ „ „ „ „ „ „ „ „ „ „ „ . „
„ ..... „ ...........„ ..... „ ..... „ .... „ ..... „ .... „ .... „ ..... „ .... „ .... „ .... „ .... „ .... „ .......... „ .... „.... „
„.„ ..„ . „ . „.. „.„ .. „ . „ . „ . „ .. „ . „ . „ . „ ..... „ . „ . „ . „ .. „ . „ „ „ „ . „ . „ .. „ „ . „ . „ . „ . „.„.„.„.„„„„.„.„.„
Publiczne, chronione i prywatne Atrybuty i metody w JavaScript
„ „ . „ „ „ „ . „.. „ . „ .. „ . „ . „ „ „ . „ „ „. „ „ „ „ „ „ „ „ „ „ . „ „ . „ . „ „ „ „ „ „ „ „ . „ .. „ .
.„. . „ .. „ . „ „. . „ . „ ..... „ . „ .. „ „ . . „ . „ . „ . „ . .„ „ . „ . „ . „ . „ „ „ „ . „ . „ . „ . „ . „ . „ . „ .
Obiekty modelu, kontrolera i obiekty kontrolne w PHP
„ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „„ „ . „ „ „ „ . „ . „ „ „ „ .
Obiekty modelu, kontrolera i obiekty kontrolne w JavaScript Podsumowanie
„ . „ „ „ . „ . „ . „ . „ „ „ .„ „ „ . „ „ „„„„„„„„
............... „ ........................„ .....„....„ ........................ „ .......... „ .......... „.... „ ..„ „ .......
6
Część li Rozdział 4.
Oracle Database. Tworzenie aplikacji internetowych w AJAX i PHP
Dynamiczna prezentacja: komunikacja między interfejsem użytkownika i serwerem Obiekt XMLHttpRequest
Tworzenie modułu Server Access Object .... . . .... .. ....
••.....••••••••••.....•••........•••..•
Obiektowy model dokumentu (DOM)
93
••.....••...•••••..•..•......••.........••...
„„„„„„.„„.„ „„„„„„„„„„„ „„„ „„„„ „„„„„„„„„„„„„„.„„.„„„„„
„„„„. „„„„„„. „„„„„„„„„„. „„„. „„„.„„„.„„„„„„„„„„„.„„„.
„„„„„„„„„.„„.„„.
.„„.. „„.. „ „.. „..... „.....„....„ ..................„ ..... „.... „............ „......„„....„.......„. ... ... .
.
Rozdział 7. Dostęp do danych z innych aplikacji Zdalne wywołania w PHP i HTTP-RPC Zdalne wywołania
za
.
137
„„.„„.„„„.„.„„„„.„„„„„„
. . . . . . ... . „ .................„„....„. . .„„. .„„. . .„„...„.„. . . .„.....„. . . . .„ . . .„ . „......„....„.„...„. . .„
Generowanie danych do wykresu
.•.•.......•„ .......„..„.
155
1 55 „. 1 59 „„. 1 62 165
„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„.„.„.„.„.„.„„„„„
„„„„„„„„„„.„„„.„„„.„.„ ...„ „.. „„„..„„„„„.„„.„„„„. .
. .. . . . . . . . . . .„ ...... „ ..„„............................„..... „.....„ .....„.....„ .....„...............„.........„.
Rozdział 9. Przycisk cofania w AJAX Dodawanie śledzenia historii Korzystanie z historii iframe Sesje po stronie klienta
.••..•.••....•• „...••.„„....„ .•...„ .....„. • •„••••.. „... „„. .„..
167
„„.„„„„.„„„„„.„„„„„„.„.„„„.„„„„„.„.„„.„„„„„„„.„„„„„„„„„.
„„„„„„„„.„„„„„„„„„„„„„.„„„„„„.„„„.„„„.„„.„„„„.„„„„„„„„
„„„„„„„„„„„„„„„„„„ „„„„„„„„„„„„„„.„„„„„„„„.„.„„„„.„„„„„„„„
„. „.„.„. „ .„. „ .... „„ „.„. „. „.„. „. „ .. „. „ .. „.„. .„.„. „ ..„..„.„. „.„.. „„„.. „„.„ .. „ ...„. „„„.
Część IV Tworzenie bardzo elastycznych, skalowalnych aplikacji Rozdział 10. Sesje po stronie klienta i po stronie serwera
........
Wykorzystanie preferencji zapisanych przez użytkownika
183
„„„„„„„„.„„„„„„.„.„„„„„„
.„„.„„„.„.„„„„.„.„.„„„„„„.
Definiowanie i przechowywanie preferencji użytkownika między sesjami
167 175 1 77 I 79
181
.•.• „„.„.„ .„.„ •••••„ ••••••„„.„ •••
Śledzenie i wykorzystywanie stanu logowania po stronie klienta Śledzenie i wykorzystywanie stanu logowania po stronie serwera
.„„„„„„„„„„„„„„„
„„„„„„„„„„„„„„„„„„„.„„„„„„„„
1 83 192 197 201 204 205
. . . .. . . . . . . . . . . . . .. . .. . .. . .. . . . . ..... . „ . . . . . . • . . . . • . . . • . • . • . . . • . . • . . . . • . . . • . • • • • . • • • • • • . • . • • • . .. . • • • . • . • • . • . . • . • . • . . . • . • . . • . . . . . • • • • • • • •
Podsumowanie
I 38 142 I 52
„„.„„.„„„„.„„„„„„„„„.„.„„„„„.„.„„.„„„„„„„„„.„„„„„ ..
Pobieranie danych za pomocą AJAX
JSON
135
........
..•••..•.••....•.•....•••...•..•....•.••.....•..••.„ ...
pomocą klientów i usług XML-RPC z PEAR
Korzystanie z biblioteki SimpłePlot
Podsumowanie
.
..
„„„„„„„„.„„„„„„„„„.„„„„„„„„„.„„„„.„„„„„„„„„„
Rozdział 8. AJAX, tworzenie wykresów i proste przesyłanie danych
Podsumowanie
I IO I I2 I I2 I 22 I 25 I 30 I 33
.„„ .. „„„„„„„„„„„„.„„„.„„.„„„.„„„.„„„.. „„„„„„.„„„.„„„„„„„„„„„„.„„„.„„„
Zaawansowane zagadnienia dynamicznej prezentacji i komunikacji ................... ........................................
Podsumowanie
109
„ „„„„„„„„„„„„„„„„„„„„„„„„ „„„„„„ „„ „„„.„.„.„.„„.
Zapisywanie informacji z mechanizmu przeciągnij i upuść w bazie danych
Część Ili
I 08
„„„ „„„.„„„ „„„ „„.„ „„„ „„„. „„„. „„„. „„. „ „„„„„„„ „.„„ „„.„.„„„„. „„.„.„...
Obiekty kontrolne JavaScript
93 I 02
.„„.„.„„„„„.„„„„„„„„„„„„„„„„„„„„„„„.
Rozdział 6. Modyfikowanie DOM za pomocą JavaScript
Obiekty kontrolne w PHP
79 83 90
.„„.„„„„„„„.„„„„„„.„„„„.„„„.„.„„„.„„„„.„„„„„„„„.„„.
. . .. . . . . .. . . „„ ...........„................. „.....„......„.... „............ „.............„.......„ . . . ... . . . . . . . .. .
Przeciągnij i upuść
79
. . ... . . . ...
. . „„ ..„.„„„.„„.„„..„ ...„.„„...„„„.„.„...„ ... „..„..„„.. „„. .
Nagłówki HTTP, błędy i komunikacja z serwerem
Podsumowanie
77
. . . .„ ..... „ .....„ ........... „.... „....................„.....„ ..... „......„ ....... „...... „ . . . . .. .. .
Tworzenie rozwijanych tabel HTML
Biblioteka
„
„„. . . .„....................„ .....„„ ...„ ................ „...
Rozdział 5. AJAX, zaawansowany HTML i komunikacja HTTP
Podsumowanie
.
•••••••••••.••••••••••••.•••••••••• ••••••.••..•••••••.••..••••.••••.•••••••
Tworzenie żądania i obsługa jego rezultatów Podsumowanie
..... ........ ..........
. . . . . . . . . . . . . . . . . . . ........................... . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . .. . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .
7
Spis treści
Rozdział 11. Tworzenie modyfikowanych przez użytkowników serwisów typu mashup ... 207 .
Tworzenie prostej strony typu mashup ......................................................................................208 Wbudowanie mashupa do systemu obsługi danych medycznych ..............................................2 1 I Jak to działa 214 Podsumowanie ...........................................................................................................................2 1 8 ........................................................................................................................... ....
Rozdział 12. Wielowymiarowa komunikacja: VOiP, IM oraz predefiniowane raporty . . . 219 ..
.
Udostępnianie VOiP i IM ..........................................................................................................220 Rozproszone, ukierunkowane, raportowane ..............................................................................225 Podsumowanie ...........................................................................................................................243
Dodatki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Dodatek A
Indeks znaczników HTML .. ........ ..... .... ..... .... .... ..... .. .. .... .... .... 247
B
Wprowadzenie do PHP .. ..... .... ..... ....... ... .......... .. .. ........ .. .. . .. .. . 255
Dodatek
Dodatek C
..
.
..
..
.
..
..
..
.
..
.
.
.
.
.
.
.
.
..
.
.
.
.
.
..
.
.
Historia i tło ...............................................................................................................................256 Czym jest PHP? ............................................................................................ .......................256 Czym jest Zend? .................................................................................................................. 257 Tworzenie aplikacji internetowych ............................................................................................ 257 Co z czym łączyć i dlaczego? ................................................................................... ........ „.257 Co Oracle wnosi do PHP? ...................................................................................................258 Dlaczego PHP 5 jest ważny? ......................................................... ......................................259 Jak korzystać z PHP? .......................................................................................................... 259 Jak za pomocą PHP i OCl8 korzystać z bazy danych Oracle? .... ........................................ 278 Podsumowanie ...........................................................................................................................299
Wprowadzenie do administracji bazą danych Oracle ......... .
...... .. .......... 301
...
.
.
Architektura baz danych Oracle ................................................................................................302 Uruchamianie i wyłączanie bazy danych Oracle ....................................................................... 307 Operacje w systemie Linux . . . .. .. .. . . . . . . . . . . .. . . .. 307 Operacje w systemie Windows ........................................................................................... 3 1 1 Uruchamianie i wyłączanie procesu nasłuchującego . .. . .. . . . . .. . . . . 314 Korzystanie z programu SQL *Plus . .. . . . .. .... . . .. . . . . . . 319 Interfejs wiersza poleceń .....................................................................................................3 2 I Zmienne łączące ........................ ..........................................................................................323 Podsumowanie ................................................................... ........................................................323 ..... .. ..
.....
....
..... ..
.
. ..
Dodatek D
.
.. ...
.......... .
„.
..
..
..... ..... ..... .. .. ........ ..... .
„
.
.. ..... ... . . ....
.. .. .
.. .. „....
„.
.. . ..
1• • • • •
........... ........... .. .. .
..... ........ ........ .........
Wprowadzenie do SQL .. .. .. .. .. ... .... .. . .. . .. .. . .. .... .... .... .... .. .. 325 .
.
.
.
.
.
..
.
..
. ..
.
.
.
..
..
..
.
.
.
Typy danych Oracle SQL ..........................................................................................................326 Język definicji danych (DOL) ...................................................................................................329 Zarządzanie tabelami i ograniczeniami ...............................................................................330 Zarządzanie widokami ........................................................................................................333 Zarządzanie procedurami składowanymi ............................................................................334 Zarządzanie sekwencjami ............ ........................................................................................335 Zarządzanie własnymi typami ........................................................... .................... ..............336 Język pobierania danych (DQL) ................................................................................................ 338 Zapytania ............................................................................................................................. 338 Język modyfikacji danych (DML) . ... . . . .. .. . . . . . . . . .. . 342 Polecenia fNSERT .............................................................................................................. 342 Polecenia UPDATE . . . . . . .. . . . ... . .. .. . . . . 344 Polecenia DELETE . .. . . . .. .. .. . . . . . . . 345 Język sterowania danymi (DCL) . .. ... . .. . . . . . . . . . . 345 Podsumowanie . . . .. . . . . . .. . . . . . . . 346 . . ..... „ . . . . . .....„ . . . .
..... .. .. ..
........... ....... ......... ... ... .. .
.. ..... . ....
. ..
.... ... .. .....
.....
....
.. ... .....
..... ..... ..... . . ..... .. .. ..... .
... .
..
... „ ..... ...... ...„ ...... . . . .
................ „ .... ..
.. . . ...
.
...
.... ...
. . . . . . ............... ............ .....
..
................ ..... .. .. „.... .
. . . „.„ . . . „ . . . .. .............. .
. .. .. .. .. .. ..... ... .................. .. ...
........... ..... ..... ..... .. .. . . . . . . . . . . . . . . . . . ..
Oracle Database. Tworzenie aplikacji internetowych w AJAX i PHP
8
Dodatek
E
Wprowadzenie do PL/SQL
....„„„„„„ •••„ •••„ ....„ ...•..„ .....„ ....„„„ ....„„.„. .
Struktura bloków PUSQL Zmienne, przypisania i operatory Struktury sterujące Instrukcje warunkowe Pętle Procedury składowane, funkcje składowane oraz pakiety Funkcje składowane Procedury Pakiety Wyzwalacze bazodanowe Wyzwalacze DOL Wyzwalacze DML Wyzwalacze „zamiast" Wyzwalacze systemowe lub bazodanowe Kolekcje Typ danych VARRA Y Typ danych NESTED TABLE Tablica asocjacyjna Interfejs kolekcji Wykorzystanie pakietu DBMS_LOB Konfiguracja i weryfikacja środowiska dla typów LOB Zapis i odczyt typu danych CLOB Podsumowanie
347
348 352 354 355 358 360 361 364 366 369 370 370 372 372 373 374 375 376 379 379 379 381 386
..... .. . .. . ............. ......... . ............. . . . . . . ................. ....... ....... ..................... . . . . . . . . ... . .. . ......... . ........... „ . . . . . . . . ... „„ .. . ...................... .......... . . . . . .
. . . . . . .................. ............................... . . . .. ... . ...... . ..... . .......... . . . . . . . ......... . . ... . .. . . ... .
....... . ...... . .. . . . . . . . . . . . . . ... . . . . . . . . ......... ............. . .. . . .. . .... .. . . . . ... .. ..... .... . ....... . .
.......... . . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . ............. .................... ............... ........ . . .................... „.„„„.„„„.„„„.„.„ ....... „.„.. „„„.„.„„
.............. .......... ......................... ............ . . . . . . . . . ....... .... .... .......... .......... ...
. .. . . . . . . . . . . . . . . . . . .. . ...... . ..... . .. .. . . . ..... . ... .. . .................... . .. . ...... . ... . ............... . ..................
. .. . .. . ..... . .. . ..... . ............ . . . . . . . ............ . ..... . .. .
... . ....... . . . . . . ..... .......... ...... . ...... .. ......... . .........
... . ... . .. . .................. . . . . . . . ............ .. .. . .. ......... ...................... ....................
.. . .... . . . ................ .. . ..... . ..... .. ......................... . ...... . ....... . ... . ......... ............. . .
.. . ... ....... . . . . . . . . . ....... ... . . . . . . . . . . . . . . . . . . . . . . ..................... . . . . . . . .. . . . . . . . . ..... .............. ................. . . . . . . . . . . . . . . . . . . . . ................. ....... ........... . . . ............. . . . . . . . . . . . .. . . .
............ . . . . . . . . . . . . ...... . .................... . ... ..... . . . . . .. . .. .... .
... .................. ...... ........... . ......... . ..... . ... ......... . ... ...... ... . .... .. . ...... . ....... . . . . . ......... ... . ............ ........... . ............... ......... . ............ .. ..... .. ............. ......... .................. ...... ..... ....... ............. ..... . ... ................. . ................... ......... . ........ . . .
............................ . ...... ............. ............. . ...... . ................................. .......
. ... . . . ....... ... . . . . ................................................................... . ........ .... . ....... . .... ..... . .......... ..... . . . . . ...... . ... ... . ... . .. . ... . . ............... . . . . . . ..... . . . . . .. . . . ............... . ... . .................................
....... . ........ .. .............. „ .......•.................. „ ........................
. . . . . . . . . . . . . . . . . . . . ......... . . . . . . . ...... ....... ........................................ ............ .. ... . . . ..... . . ... ....
Skorowidz
...„„ ..„ ......„.„ ..„ ....„ ..„„.„„„„„„.„„„.„„„„.„„„ ...„ ...„ ......„„
387
O autorach Lee Barney jest profesorem technologii informatycznych na Brigham Young University w Idaho. Pracował jako CIO/CTO w firmie @Home Software, która tworzyła oparte na sieci źródła danych oraz aplikacje wspomagające planowanie dla branży domowej opieki medycznej. Wcześniej pracował przez ponad siedem lat jako programista, starszy inżynier oprogramowania i kontroler jakości, twórca oprogramowania oraz menedżer produktu dla AutoSimulations, Inc. - wiodącego dostawcy oprogramowania planistycznego dla branży półprzewodników.
Michael McLaughlin jest profesorem na Brigham Young University w Idaho na Wydziale Tech nologii Informatycznych Szkoły Biznesu i Komunikacji oraz ?.ałożycielem firmy TechTinker.com ?.ajmującej się tworzeniem aplikacji i jego technologiami. Pracował w Oracle Corporation przez ponad osiem lat przy konsultingu, tworzeniu i wsparciu oprogramowania. Zajmował się centralną częścią aplikacji i tworzeniem kompilacji Oracle E-Business Suite. Przed ?.atrudnieniem w ,Oracle Corporation pracował jako programista Oracle, analityk systemowy i biznesowy oraz admini strator baz danych od Oracle 6. Jest autorem książki
rzenie aplikacji internetowych w PHP oraz wanie wjęzyku PL/SQL.
Oracle Database I Og Express Edition. Two Oracle Database / Og. Programo
współautorem
10
Oracle Database. Tworzenie aplikacji internetowych w AJAX i PHP
O redaktorze technicznym A . Scott Mikolaitis jest architektem aplikacji w Oracle Corporation i pracuje tam o d ponad dziesięciu lat. Zajmuje się prototypowaniem i tworzeniem standardów dla technologii SOA w Oracle Fusion. Scott lubi też wykorzystywać usługi Web Services w Java oraz Jabber przy tworzeniu wzorców interakcji między człowiekiem a systemem. W wolnym czasie zajmuje się domowym majster kowaniem oraz napędzanymi gazem, zdalnie sterowanymi modelami samochodów.
12
Oracle Database. Tworzenie aplikacji internetowych w AJAX i PHP
Wprowadzenie Połączenie technologii AJAX, PHP i koncepcji modułamości umożliwia tworzenie nowych i ekscytujących opcji w aplikacjach, jednocześnie redukując czas potrzebny na wspieranie i pisanie kodu. Część I zawiera podstawowe koncepcje wykorzystywane w kolejnych rozdzia łach książki. Czytelnicy, dla których ta technologia jest nowością, powinni rozpocząć właśnie od tej części. Czytelnicy biegłe posługujący się obiektami oraz modularnym programowaniem w PHP i JavaScript znajdą w części I dobry przegląd zagadnień. Dodatki od A do E zawierają pomocnicze infonnacje z wprowadzeniem do HTML, PHP, SQL oraz do administracji bazą danych Oracle i PL/SQL wykorzystywanych w tej książce.
Część I: Tworzenie podstaw Część I zawiera wprowadzenie do zagadnień modulamości, obiektowości oraz podejmowania decyzji związanych ze skalowalnością zarówno w JavaScript, jak i PHP.
+ Rozdział
I. „Skalowalność JavaScript i PHP" pokazuje, jak wpływa na skalowalność wybieranie różnego typu pętli, sposobów obliczeń numerycznych, wykorzystywanie zmiennych i korzystanie z metod obiektów w porównaniu z funkcjami.
+ Rozdział
2. „Modularność PHP i JavaScript" wprowadza pojęcie modularności i pokazuje, jak ją osiągnąć zarówno w JavaScript, jak i PHP.
+ Rozdział 3. „Obiekty JavaScript i PHP" wprowadza pojęcie obiektów, wyjaśnia, jak tworzyć i korzystać z nich zarówno w JavaScript, jak i PHP, oraz pokazuje, jak zaimplementować modularne komponenty z rozdziału 2. jako obiekty. Obiekty modularnych komponentów są wykorzystywane w dalszych częściach książki.
l I
l
.
14
Oracle Database. Tworzenie aplikacji internetowych w AJAX i PHP
Część li: Dynamiczna prezentacja: komunikacja między interfejsem użytkownika i serwerem Część II omawia podstawy komunikacji AJAX. Pokazuje, jak korzystać z obiektu XMLHttpRequest oraz jak zamykać jego funkcjonalność w ułatwiającym korzystanie z niego obiekcie. Przedsta wiono też tutaj, jak w prosty sposób tworzyć złożoną komunikację z serwerem.
+ Rozdział 4. „Obiekt XMLHttpRequest" omawia API obiektu XMLHttpRequest oraz pokazuje, jak stworzyć proste żądanie za pomocą tego obiektu i odpowiedzieć po stronie serwera za pomocą PHP. Przedstawia też, jak opakować ten obiekt, by uczynić go bardziej modularnym i ułatwić korzystanie z niego.
+ Rozdział S. ,,AJAX, zaawansowany HTML i komunikacja HTTP" pokazuje, jak korzystać z prostego HTTP i komunikacji do przesyłania kodu HTML stosowanego w rozwijanych tabelach oraz jak korzystać z nagłówków HTTP do przesyłania infonnacji o błędach po stronie serwera.
+ Rozdział 6. „Modyfikowanie DOM za pomocą JavaScript" wprowadza strukturę modelu obiektowego dokumentu (ang. Document Object Model- DOM). Pokazuje też, jak można wykorzystać JavaScript do ustalania i modyfikowania stanu elementów DOM przy tworzeniu funkcjonalności przeciągnij i upuść (ang. drag and drop) z możliwością uaktualniania bazy danych przez serwer PHP.
Część Ili: Zaawansowane zagadnienia dynamicznej prezentacji i komunikacji Część nr wprowadza obiekty wykorzystywane do łączenia z usługami Web Services. Pokazane tu jest, jak można stosować AJAX do tworzenia dynamicznych wykresów po stronie klienta oraz jak zapewnić poprawne działanie przycisku coa f (/ przeglądarki w aplikacjach AJAX.
+ Rozdział 7. „Dostęp do danych z innych aplikacji" pokazuje, jak stworzyć przygotowany do ponownego wykorzystania kod pozwalający na dostęp do różnego typu usług sieciowych z aplikacji PHP w prosty sposób. Kod ten korzysta z HTTP-RPC, XML-RPC i biblioteki PEAR przy tworzeniu i korzystaniu z usług sieciowych XML.
+ Rozdział 8. „AJAX, tworzenie wykresów i proste przesyłanie danych" wprowadza przenośne między przeglądarkami tworzenie wykresów po stronie klienta i wyjaśnia, jak generować dane do takich wykresów za pomocą PHP.
+ Rozdział 9. „Przycisk cofania w AJAX" pokazuje, jak zapewnić normalne działanie przycisku
cofa!/ Przeglądarki
w sposób przenośny między platformami.
Wprowadzenie
15
Część IV: Tworzenie bardzo elastycznych, skalowalnych aplikacji Część I V pokazuje, jak umożliwić użytkownikowi wybór sposobu korzystania z aplikacji oraz jak integrować aplikację z usługami VOiP i komunikatorami.
ł Rozdział 10. „Sesje po stronie klienta i po stronie serwera" wprowadza śledzenie stanu i przechowywanie danych za pomocą sesji oraz transfer danych za pomocąJSON.
ł Rozdział 11. „Tworzenie modyfikowanych przez użytkowników serwisów typu mashup" pokazuje, jak umożliwić użytkownikowi definiowanie i przechowywanie niezależnych części strony internetowej oraz lokalizacji na pojedynczej stronie. Język PHP jest tu wykorzystywany do takiego przechowywania ustawień użytkownika, że sposób wyświetlania może być odtworzony przy następnym logowaniu użytkownika i może zawierać aktualne informacje z tych niezależnych stron internetowych.
ł Rozdział 12. „Wielowymiarowa komunikacja: VOIP, IM oraz predefiniowane raporty" omawia, jak stworzyć i przeglądać raporty dla konkretnych użytkowników, przechowując definicje raportów, a nie ich dane. Ponadto rozdział ten pokazuje, że definiowanie i przeglądanie raportów może być na tyle elastyczne, iż w przypadku zmiany struktury tabel bazy danych nie jest konieczna zmiana kodu raportów w PHP i AJAX. Przedstawione jest także śledzenie tworzenia i przeglądania raportów. Pokazane są też proste dodatki ułatwiające korzystanie z VOIP i komunikatorów w aplikacji.
Dodatki Część ta zawiera pięć dodatków pomagających w korzystaniu z HTML, PHP, SQL, PL/SQL i przy administrowaniu bazą danych Oracle.
ł Dodatek A „Indeks znaczników HTML" zawiera przegląd najważniejszych znaczników HTML i XHTML, które pomagają w analizie kodu HTML zawartego książce.
ł Dodatek B „Wprowadzenie do PHP" zawiera podstawy języka PHP oraz omawia zagadnienia związane z tworzeniem aplikacji sieciowych wykorzystujących bazę danych Oracle.
ł Dodatek C „Wprowadzenie do administracji bazą danych Oracle" zawiera informacje na temat pracy ze środowiskiem SQL *Plus, uruchamiania i kończenia pracy procesu nasłuchującego oraz serwera bazy danych.
ł Dodatek D „Wprowadzenie do SQL" tłumaczy i demonstruje implementację SQL w Oracle, omawia standardowe i tworzone przez użytkownika definicje typów oraz przykłady użycia DOL (Data Definition Language), DQL DML (Data
(Data Query Language), Manipulation Language) oraz DCL (Data Control Language).
ł Dodatek E „Wprowadzenie d o PL/SQL" tłumaczy i demonstruje implementację PL/SQL
w Oracle, omawiając strukturę blokową, zmienne, przypisania, operatory, struktury
kontrolne, funkcje/procedury/pakiety składowane, wyzwalacze, kolekcje oraz pakiet DBMS LOB.
16
Oracle Database. Tworzenie aplikacji internetowych w AJAX i PHP
Część
I
Tworzenie podstaw
Rozdział 1.
Skalowalność JavaScript i PHP Pisanie aplikacji w PHP jest łatwe. Dzięki AJAX coraz lepiej reagują one na działania użyt kownika. Dobre połączenie tych dwóch technologii czyni aplikacje w AJAX/PHP skalowal nymi w pełnym tego słowa znaczeniu. Wyjątkowe możliwości otwierają się przed tym, kto planuje stworzyć coś naprawdę dobrego. Książka ta zawiera kilka dodatków o PHP, PL/SQL i innych przydatnych zagadnieniach. Są to skrótowe omówienia najważniejszych kwestii. Więcej infonnacji można znaleźć w książce Michaela McLaughlina
Oracle Database JOg Express Edition. Tworzenie aplikacji interne
towych w PHP. W tym rozdziale wprowadzone zostaje pojęcie skalowalności i kilka zagadnień umożliwiają cych wykorzystanie PHP oraz JavaScript do zwiększenia skalowalności i szybkości działania aplikacji. Zagadnienia są omawiane w następującej kolejności:
ł skalowalność, ł redukcja obciążenia procesora i pamięci, ł skalowanie struktur kontrolnych, ł skalowanie przetwarzania ciągów znaków, ł skalowanie prostych operacji matematycznych, ł wpływ obiektów i ich metod na skalowalność, ł wpływ wielokrotnych wywołań funkcji pri nt na skalowalność, ł redukowanie obciążenia sieci: ł wykorzystanie AJAX do redukowania obciążenia sieci, ł wykorzystanie kompresji do redukowania obciążenia. Przeczytanie tego rozdziału pozwoli podejmować świadome decyzje o tym, jak pisać kod PHP iJavaScript, by wykorzystać możliwości skalowania i uniknąć zagrożeń z tym związanych.
20
Część I • Tworzenie podstaw
Skalowalność AJAX to sposób komunikacji asynchronicznej, który umożliwia stronie internetowej wielo krotne komunikowanie się z serwerem. Pozwala to aplikacji na dodawanie danych do wyświe tlonej strony zamiast ponownego ładowania wszystkich jej elementów z serwera. W większości tworzonych dotychczas aplikacji internetowych nie było to możliwe. Zazwyczaj ładowały one całą wyświetlaną stronę przy każdej aktywności użytkownika niezależnie od tego, jaka część zawartości się zmieniała. Skalowalność po stronie serwera staje się ważna w aplikacjach AJAX, ponieważ użytkownik wysyła tu zazwyczaj więcej zapytań o dane. Powodem przejścia na AJAX jest chęć zwiększe nia szybkości działania. Aby zachować stabilność działania aplikacji AJAX przy wzroście liczby użytkowników do tysięcy, dziesiątek tysięcy i więcej, należy wziąć pod uwagę najważniejsze zagadnienia związane ze skalowalnością. Skalowalność jest jedną z najbardziej pożądanych, najczęściej omawianych i najsłabiej rozu mianych cech aplikacji. Wbrew obiegowym opiniom skalowalność to nie jedno, ale trzy zagadnienia:
ł szybkość przetwarzania danych i ich rozmiar, ł łatwość naprawiania aplikacji, ł łatwość modyfikowania i rozwijania aplikacji w czasie. Każdy z tych trzech elementów jest istotnym składnik.iem sukcesu każdej aplikacji. Podczas opracowywania koncepcji oraz planowania, projektowania i tworzenia aplikacji pamiętanie o tych elementach istotnie zwiększa prawdopodobieństwo sukcesu jej lub projektu. Oracle, PHP i AJAX dobrze wykorzystane przy tworzeniu aplikacji internetowej dostarczają unikalnych możliwości, które pozwalają na spełnienie wymagań skalowalności. Ten rozdział omawia tylko pierwszy z trzech elementów - szybkość przetwarzania danych i ich rozmiar. W kolejnych rozdziałach przedstawiono pozostałe dwa elementy. Większość frameworków PHP/AJAX projektuje się tak, by umożliwić szybkie prototypowanie i tworzenie aplikacji. Skąd użytkownik - twórca aplikacji - wybierając dany framework, ma wiedzieć, że będzie on naprawdę skalowalny? Sam fakt, że został on napisany i jest wyko rzystywany przez jedną z dużych firm, nie gwarantuje skalowalności we wszystkich przypad kach. Skalowalności nie gwarantuje też fakt, że framework ma otwarte lub zamknięte źródła albo że jest darmowy lub płatny czy też prosty lub złożony. Jeśli wybrany framework nie będzie odpowiednio skalowalny w tworzonej aplikacji, jak można go zmodyfikować, by uzyskać wymaganą skalowalność w sytuacji, gdy większość frameworków zawiera bardzo złożony kod? Jeśli we frameworku zostanie wykryty krytyczny dla aplikacji błąd, jak.i będzie czas jego usu nięcia i czy będzie go trzeba usuwać we własnym zakresie? Gdy potrzebna aplikacja została już napisana, za późno jest na to, aby „przesiąść się" na inny framework; zresztą nie wiadomo, czy nowy framework nie będzie miał tyle samo lub więcej defektów ani czy wręcz nie okaże się również nieskalowalny. Pozostawianie tak.ich pytań bez odpowiedzi do zakończenia two rzenia aplikacji może doprowadzić do tragedii. Choć istnieją narzędzia do profilowania umożliwiające wykrywanie problemów ze skalowal nością, mają one jednak słabe punkty. Narzędzia wyszukujące zmarnowane cykle procesora
Rozdział 1. • Skalowalność JavaScript i PHP
21
wskazują trudności pojawiające się w dużej skali, ale nie ich rozwiązania. Poza tym sygnalizują problemy dopiero w gotowym kodzie. Narzędzia te nie pokazują często występujących punk tów, w których jest marnowana mała ilość cykli procesora. Zazwyczaj mierzą czas wykonania mniejszych i/lub większych części kodu i wskazują potencjalne wąskie gardła; robią to jednak dopiero po tym, jak kod zostanie napisany. Pear (http://pear.php.net/package/Benchmark), DBG (http://ddcron.ru/dbgl) oraz PHP Profiler Tool SD (http://www.semdesigns.com/Productsl Profilers/PHPProfiler.htmf) to przykłady tego typu narzędzi. Poza tymi narzędziami do profilowania również parsery i kompilatory kodu usuwają niepo trzebny kod, ale nie zawsze są w stanie rozpoznać takie miejsca. Stają się w tym coraz lepsze, ale kto ma czas, by czekać? Podczas pisania kodu ciągle podejmowane są ręczne działania, takie jak przeglądy kodu i inne zabiegi, w celu wychwycenia marnowanych cykli. Sprawdza się to, ale może być źle wyko rzystywane i nadużywane. Każde z tych narzędzi jest dobre i potrzebne. Ale czy istnieje sposób na to, żeby zwiększyć skalowalność aplikacji przed jej napisaniem? Popularne frameworki są wartościowe. Koncentrują się one jednak na funkcjonalności, a nie skalowalności, i są ciężkie zarówno po stronie klienta, jak i serwera. Tworząc podejście lub rramework, które są proste do zrozumienia, używania i skalowania, można sprawić, że aplikacje PHP/AJAX wzniosą się na nowe wyżyny funkcjonalności i użyteczności. Jednym z zadań tej książki jest opisanie, wytłumaczenie i pokazanie takiego podejścia.
Redukcja obciążenia procesora i pamię�i Zawsze niezbędny jest kompromis pomiędzy szybkością aplikacji i jej rozmiarem. Zapisy wanie i ponowne wykorzystywanie pobranych danych zwiększa prędkość kosztem zwiększenia ilości zajmowanej pamięci. Ciągłe pobieranie danych pozwala zmniejszyć ilość zajmowanej pamięci kosztem prędkości. Które rozwiązanie jest najlepsze - zależy od konkretnej sytuacji. Marnowanie pamięci albo czasu jest zawsze złym wyborem. Jeżeli najważniejsza jest pręd kość, a pamięć jest tania, należy korzystać w projektach z pamięci podręcznej cache. Jeśli ilość pamięci jest ograniczona, należy wybrać drugie rozwiązanie. W większości przypadków niezbędne jest połączenie obu tych podejść w celu uzyskania najlepszych rezultatów w danej aplikacji. Niektóre dane lub funkcjonalności muszą być ciągle wykorzystywane i trzeba je prze chowywać w pamięci. Inne dane lub funkcjonalności są wykorzystywane stosunkowo rzadko i dlatego mogą być bezpiecznie pobierane w razie potrzeby bez szkody dla aplikacji. Jednym z największych osiągnięć w rozwoju języków skryptowych takich jak PHP jest możli wość przechowywania przez serwer kodu pośredniego (opcode) do późniejszego wykorzy stania. Takie rozwiązanie znacząco redukuje czasy odpowiedzi serwera. Początkowo może się wydawać, że cała koncepcja dynamicznego generowania stron jest zupełnie sprzeczna z mechani zmem cache. Jak strona może być zarazem dynamiczna i niezmienna w sposób umożliwiający jej ponowne wykorzystanie? Załóżmy, że strona PHP zawiera między innymi kod wyświetla jący aktualną datę i czas w treści strony HTML, tak jak w poniższym przykładzie:
< 1 DOCTYPE html PUBLIC " - //W3C//DTD XHTML 1 . 0 Trans i t i on a l / /EN" "http : / /www . w3. org/TR/xhtm l l/DTD/xhtml l-trans i t i ona l . dtd">
Loop Test