I.Wojnicki, JiTW. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Podobne dokumenty
I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie

Bazy Danych i Usługi Sieciowe

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Język PHP. Studium Podyplomowe Sieci Komputerowe i Aplikacje Internetowe. v1.7, 2007/11/23

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Ktedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Bazy Danych i Usługi Sieciowe

I.Wojnicki, Tech.Inter.

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Laboratorium 1 Wprowadzenie do PHP

Systemy internetowe Wykład 3 PHP

Wykład 5: PHP: praca z bazą danych MySQL

Obiektowe bazy danych

Internetowe bazy danych

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

Wprowadzenie do Internetu Zajęcia 5

INSTALACJA I KONFIGURACJA SERWERA PHP.

Aplikacje internetowe

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

Internetowe bazy danych

Dlaczego PHP? - zalety

Aplikacje WWW - laboratorium

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

SIECI KOMPUTEROWE I BAZY DANYCH

Podstawy programowania III WYKŁAD 2

Podstawy JavaScript ćwiczenia

Zaawansowane bazy danych i hurtownie danych

Aplikacje WWW - laboratorium

Programowanie internetowe

Podstawy programowania (PHP/Java)

Autor: Joanna Karwowska

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

SIECI KOMPUTEROWE I BAZY DANYCH

Spis treści. Wstęp 5 Rozdział 1. Praca z AJAX-em 9. Rozdział 2. Współpraca ze skryptami PHP 55. Rozdział 3. Obsługa formularzy 81

15. Funkcje i procedury składowane PL/SQL

Przykładowa integracja systemu tpay.com KIP S.A. ul. Św. Marcin 73/ Poznań.

Bazy danych. dr Radosław Matusik. radmat

NoSQL Not Only SQL, CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Igor Wojnicki

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

I.Wojnicki, PHP. Smarty. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie. 28 marca 2014

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Automatyki Akademia Górniczo-Hutnicza w Krakowie. 20 października 2013

Internetowe bazy danych

Programy CGI dla baz danych

SSK - Techniki Internetowe

Umieszczanie kodu. kod skryptu

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

PHP. Tematyka wykładów: Język PHP PHP i bazy danych Rozszerzenia PHP

Na początku utworzymy formularz w czystym języku HTML i przetestujemy go za pomocą przeglądarki WWW.

NoSQL Not Only SQL: CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków.

Wykład 03 JavaScript. Michał Drabik

Zajęcia 13 wykorzystanie MySQL w PHP cz. 2

Szablon główny (plik guestbook.php) będzie miał postać:

Języki skryptowe - PHP. Podstawy PHP. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Internetowe bazy danych

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Przykładowa integracja systemu Transferuj.pl

Należy ściągnąć oprogramowanie Apache na platformę

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Aplikacje internetowe - laboratorium

Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia

Podstawowe wykorzystanie Hibernate

Database Connectivity

Bazy danych i strony WWW

spis treści wprowadzenie 9 1. tworzenie bazy danych przeglądanie pracowników przeglądanie z wykorzystaniem technologii ajax 45

PHP + MySQL w laboratorium (1)

PHP: bloki kodu, tablice, obiekty i formularze

Tworzenie serwisów WWW. Pierwsza pomoc

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Personal Home Page PHP: Hypertext Preprocessor

Dodatek Technologie internetowe 1. UTF-8 wg 2. Adresy URL

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

XHTML - Extensible Hypertext Markup Language, czyli Rozszerzalny Hipertekstowy Język Oznaczania.

Aplikacje WWW - laboratorium

Składowane procedury i funkcje

Zajęcia 11 wykorzystanie MySQL w PHP

Ćwiczenie 7 - PHP (3)

MVC w praktyce tworzymy system artykułów. cz. 2

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

PHP5. Praktyczny kurs

Baza danych do przechowywania użytkowników

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Wprowadzenie. Rozdział 23 PDO. Podstawowe kroki aplikacji. Źródło danych

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Specyfikacja implementacyjna aplikacji serwerowej

Formularze w PHP dla początkujących

AKADEMIA GÓRNICZO-HUTNICZA im. Stanisława Staszica w Krakowie. Wydział Geologii, Geofizyki i Ochrony Środowiska. Bazy danych 2

MVC w praktyce tworzymy system artykułów. cz. 1

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Transkrypt:

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 1 / 29 Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie 10 grudnia 2013 $Id: php1.tex,v 1.1 2011/11/19 19:14:25 wojnicki Exp wojnicki $

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 2 / 29 Spis Treści 1 Optymalizacja Przesyłanie plików Współpraca z Bazami Danych

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 3 / 29 Spis Treści Optymalizacja 1 Optymalizacja Przesyłanie plików Współpraca z Bazami Danych

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 4 / 29 Debugging Optymalizacja http://www.php-debugger.com/dbg/ Wymaga zainstalowania modułu dla serwera HTTP. http://www.xdebug.org/ WYmaga odpowiedniej konfiguracji interpretera i instalacji oprogramowania na serwerze. FireBug + Fire (przesyłanie komunikatów do konsoli FireBug) Śledzenie wartości zmiennych: var_dump() print_r()

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 5 / 29 Optymalizacja Skryptów I Optymalizacja FireBug Pomiar wydajności w. function get_microtime() { list($usec, $sec) = explode(, microtime()); return ((float) $usec + (float)$sec); } microtime(true) - wartość jako liczba rzeczywista. 0.31258300 1382259058 vs. 1382259058.3126 Profiler: http://www.php-debugger.com/dbg/

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 6 / 29 Optymalizacja Optymalizacja Skryptów II Cytowanie zamiana podwójnych cudzysłowów na apostrofy daje kilka procent zysku. $zmienna1 = "$a $b $c"; //wolne // szybsze o kilka procent: $zmienna2 = $a.. $b.. $c;

Optymalizacja Optymalizacja Skryptów III Wyświetlanie (generacja standardowego wyjścia) Uzywaj echo przewaga nad wychodzeniem z trybu znacznikiem?> i ponownym wchodzeniem w ten tryb jest niewielka. cudzysłów vs. apostrof cytowanie zmiennej powoduje znaczne obniżenie wydajności. printf() jest znacznie mniej wydajna, bogate możliwości formatowania napisów, używaj tylko wtedy gdy jest to konieczne. Igor Wojnicki (AGH, KIS) 10 grudnia 2013 7 / 29

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 8 / 29 Optymalizacja Optymalizacja Skryptów IV Niepotrzebne zmienne Niepotrzebne funkcje Niepotrzebne wywołania funkcji $arr = array(1,2,3,4,5,6,7,8,9,10); //count() przy każady przebiegu! for ($i=0; $i<count($arr); $i++) { echo $arr[$i]; }

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 9 / 29 Optymalizacja Optymalizacja Skryptów V Programowanie obiektowe (od 5.1.0 znacznie lepiej)

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 10 / 29 Optymalizacja Optymalizacja Skryptów VI Operacje na plikach Wczytanie całego pliku do tablicy: $dane = implode (, file( plik )); Zabiera dużo pamięci. $plik = file( nazwa ); $linia = $plik[1]; Lepiej zrobić to tak: $fd = fopen( plik, r ); fgets($fd); $linia = fgets($fd); fclose($fd);

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 11 / 29 Optymalizacja Optymalizacja Skryptów VII Zapytania SQL Let Others Do Pętla w pętli vs. bardziej złożone zapytanie SQL.

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 12 / 29 Spis Treści Przesyłanie plików 1 Optymalizacja Przesyłanie plików Współpraca z Bazami Danych

Przesyłanie plików, XHTML Przesyłanie plików <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>przykładowa obsługa plków</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> </head> <body> <form action="file.php" method="post" enctype="multipart/form-data"> <p> <input type="file" name="plik_pierwszy" /> <input type="file" name="plik_drugi" /> <input type="submit" value="wyślij" /> </p> </form> </body> Igor Wojnicki (AGH, KIS) 10 grudnia 2013 13 / 29

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 14 / 29 Przesyłanie plików Obsługa przesyłanych plików, <?php header( Content-type: text/plain ); var_dump($_files); if (move_uploaded_file( $_FILES[ plik_pierwszy ][ tmp_name ], /tmp/nazwa_pliku_po_przeslaniu )) echo ok ; else echo err ;?> move_uploaded_file() dodatkowo sprawdza czy plik został przesłany przez HTTP POST.

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 15 / 29 Rezultat I Przesyłanie plików array(2) { ["plik_pierwszy"]=> array(5) { ["name"]=> string(10) "files.html" ["type"]=> string(9) "text/html" ["tmp_name"]=> string(14) "/tmp/php3sbkza" ["error"]=> int(0) ["size"]=> int(570) }

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 16 / 29 Rezultat II Przesyłanie plików ["plik_drugi"]=> array(5) { ["name"]=> string(25) "qr-wojnicki-agh-email.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(14) "/tmp/php4f9qrw" ["error"]=> int(0) ["size"]=> int(353) } } ok

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 17 / 29 Inne wartości w $_FILES Przesyłanie plików $_FILES[ nazwa_pola ][ name ] $_FILES[ nazwa_pola ][ type ] $_FILES[ nazwa_pola ][ size ] $_FILES[ nazwa_pola ][ tmp_name ] $_FILES[ nazwa_pola ][ error ] Informacje w $_FILES przesyłane sa zawsze nawet, gdy nie jest przesłany żadny plik (informacja o błędzie: http://www.php.net/ manual/en/features.file-upload.errors.php).

Przesyłanie plików Igor Wojnicki (AGH, KIS) 10 grudnia 2013 18 / 29 Pliki na serwerze Przy przesyłaniu plików można je przenieść w dowolna lokalizację w systemie plików serwera. Właściciel przesłanego pliku, w zależności od konfiguracji: właściciel skryptu, właściciel interpretera. Konfigurowalny limit max wielkości przesyłanego pliku! Konfigurowalny limit max czasu wykonywania skryptu!

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 19 / 29 Code/Script Injection Przesyłanie plików Należy uniemożliwić: przesyłanie plików w sposób umożliwiajacy trafienie do innego katalogu (użycie separatorów nazw katalogów w nazwie pliku) basename() przesłanie kodu do uruchomienia (np. skryptu ) odpowiednia lokalizacja docelowego katalogu, bez możliwości wykonywania kodu (w przypadku bez dostępu dla serwera WWW)

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 20 / 29 Spis Treści Współpraca z Bazami Danych 1 Optymalizacja Przesyłanie plików Współpraca z Bazami Danych

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 21 / 29 Systemy Baz Danych i Połaczenia Współpraca z Bazami Danych Obsługiwane Systemy Baz Danych: PostgreSQL MySQL ODBC Oracle SQLite msql (minisql) Microsoft SQL Sybase Informix Połaczenia Stałe (persistent) vs. Tymczasowe (temporary) w zależności od RDBMS możliwy zysk wydajności.

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 22 / 29 Połaczenia z bazami danych Współpraca z Bazami Danych BerkleyDB. Natywne (sterowniki/funkcje dla konkretnych baz danych), dbx abstrakcyjny interfejs oparty o funkcje (nie jest częścia podstawowej dystrybucji poczawszy od 5.1.0). PDO j.w. ale obiektowy.

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 23 / 29 Połaczenie z MySQL I Współpraca z Bazami Danych $con_id = mysql_connect( localhost, root ); mysql_select_db( Test,$con_id); $query = SELECT * FROM Pracownicy ; $result = mysql_query($query, $con_id); #wygeneruj otrzymane wyniki w postaci tabeli echo "<table border=1 align=center>\n"; echo "<tr>\n"; echo "<td>id</td>\n"; echo "<td>nazwisko</td>\n"; echo "<td>imię</td>\n"; echo "<td>data urodzenia</td>\n"; echo "<td>stanowisko</td>\n"; #wypisz wszystkie rekordy while ($myrow = mysql_fetch_row($result)){

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 24 / 29 Połaczenie z MySQL II Współpraca z Bazami Danych printf("<tr><td>%s</td><td>%s</td> <td>%s</td><td>%s</td> <td>%s</td></tr>\n", $myrow[1], $myrow[2], $myrow[3], $myrow[4], $myrow[5]); } mysql_free_result($query); mysql_close($con_id); echo "</table>\n";

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 25 / 29 Współpraca z Bazami Danych Przykład obsługi takiej samej bazy danych ODBC I $con_id = odbc_connect("test", "tlogin", "tpassword"); $query = SELECT * FROM Pracownicy ; $result = odbc_exec($con_id, $query); #wygeneruj otrzymane wyniki w postaci tabeli echo "<table border=1 align=center>\n"; echo "<tr>\n"; echo "<td>id</td>\n"; echo "<td>nazwisko</td>\n"; echo "<td>imię</td>\n"; echo "<td>data urodzenia</td>\n"; echo "<td>stanowisko</td>\n"; #wypisz wszystkie rekordy while (odbc_fetch_row($result)) {

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 26 / 29 Współpraca z Bazami Danych Przykład obsługi takiej samej bazy danych ODBC II printf("<tr><td>%s</td><td>%s</td> <td>%s</td><td>%s</td> <td>%s</td></tr>\n", odbc_result($result, ID ), odbc_result($result, 2), odbc_result($result, Imie ), odbc_result($result, 4), odbc_result($result, Stanowisko )); } odbc_free_result($query); odbc_close($con_id); echo "</table>\n";

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 27 / 29 Połaczenie z PostgreSQL I Współpraca z Bazami Danych <?php $database="verlag"; $db_conn=pg_connect("host=localhost port=5432 dbname=$database user=me password=blah"); if (!$db_conn):?> <H1>Błąd przy połączeniu z bazą postgres <?php echo $database?></h1> <?php exit; endif; $qu = pg_query ($db_conn, "SELECT * FROM verlag ORDER BY autor"); $row = 0;

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 28 / 29 Połaczenie z PostgreSQL II Współpraca z Bazami Danych while ($data = pg_fetch_object ($qu, $row)) { echo $data->autor." ("; echo $data->jahr."): "; echo $data->titel."<br>"; $row++; } pg_free_result ($qu); pg_close ($db_conn);

Igor Wojnicki (AGH, KIS) 10 grudnia 2013 29 / 29 SQL Injection Współpraca z Bazami Danych Kuszace jest przesyłanie (częsci/całości) kodu SQL do wykonania jako wartości atrybutów za pomoca HTTP GET/POST np. frgment dot. sposobu sortowania danych, całość zapytania bezpośrednio budowana na podstawie wartości w formularzu. Potencjalnie może to być wykorzystane do uruchamiania dowolnych zapytań na bazie danych. Należy weryfikować wszystkie dane, które maja być użyte w zapytaniach.