WWW-ohjelmointi ANTTI SAND TIETA12

Samankaltaiset tiedostot
Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Mark Summary Form. Tulospalvelu. Competitor No Competitor Name Member

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Käytin tehtävän tekemiseen Xubuntu käyttöjärjestelmää aikaisemmin tekemältäni LiveUSB-tikulta.

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

HELIA 1 (11) Outi Virkki Tiedonhallinta

WWW-ohjelmointi ANTTI SAND TIETA12

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Mark Summary Form. Taitaja Skill Number 205 Skill Tietokoneet ja verkot. Competitor Name

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Paavo Räisänen. WampServer palvelimen asennus ja käyttö Eclipsen kanssa, sekä ensimmäinen FTP yhteys.

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Selvitysraportti. MySQL serverin asennus Windows ympäristöön

Security server v6 installation requirements

Amazon Web Services (AWS) on varmaankin maailman suosituin IaaS-tarjoaja. Lisäksi se tarjoaa erilaisia PaaS-kategoriaan kuuluvia palveluita.

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Uutta Remote Support Platform 3.1 -versiossa

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

Webpalvelin muistitikulle - Ohje

Tietokannat II -kurssin harjoitustyö

Tikon Ostolaskujenkäsittely versio SP1

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Automaster tai MBS. 2. ODBC - ajurin asennus (jos ei ole jo asennettu)

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Järjestelmäarkkitehtuuri (TK081702)

Web Services tietokantaohjelmoinnin perusteet

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

server "Ismo" $ uname -a Linux ismo #1 SMP Thu Sep 16 19:35:51 UTC 2010 i686 GNU/Linux $ cat /etc/issue Debian GNU/Linux 5.

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Security server v6 installation requirements

Tietokannat II -kurssin harjoitustyö

Yleinen ohjeistus Linux tehtävään

Yleistä tietoa Windows tehtävästä

ELM GROUP 04. Teemu Laakso Henrik Talarmo

EMVHost Online SUBJECT: EMVHOST ONLINE CLIENT - AUTOMAATTISIIRROT COMPANY: EMVHost Online Client sovelluksen käyttöohje AUTHOR: DATE:

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

MY STANDARD -OHJE. mystandard.hansaworld.com. Standard ERP Pilvipalvelu Sivu 1/6

Written by Administrator Saturday, 28 August :51 - Last Updated Tuesday, 22 February :45

Johdanto PHP PostgreSQL. PHP & PostgreSQL. Paul Tötterman 5. helmikuuta PHP & PostgreSQL.

HAME PostGIS-tietokanta

Digikoulu Pilviteknologiat - Tunti 1001: Tiedon varastointi Amazon Simple Storage Service (Amazon S3) palveluun

Ylläpitodokumentti Labra

MySQL Maestro. Aleksi Korpela IST4SO Markus Lamminaho IST4SO

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

812336A C++ -kielen perusteet,

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

T Henkilökohtainen harjoitus: FASTAXON

Visma Avendon asennusohje

Erittäin nopea tapa saada kehitysympäristö php:lle pystyyn Voidaan asentaa muistitikulle

Kaakkois-Suomen Ammattikorkeakoulu Oy Mikkelin Ammattikorkeakoulu Oy Kymenlaakson Ammattikorkeakoulu Oy

TIETOKANTOJEN PERUSTEET MARKKU SUNI

SELVITYSRAPORTTI LABRA-VERKON MYSQL:n JA PHP:n KÄYTTÖÖNOTOSTA. Jarkko Kähkönen

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

FuturaPlan. Järjestelmävaatimukset

Bitnami WordPress - Asenna WordPress koneellesi. Jari Sarja

Tietojärjestelmä tuotantoympäristössä. Sovellusohjelmat Helsingin ammattikorkeakoulu Stadia / Tekniikka ja liikenne Vesa Ollikainen

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

Tiedon suojaaminen ja hallinta. Sytyke seminaari

Ryhmäharjoitus III: Mitä on koodaaminen? A. TIEY4 Tietotekniikkataidot, kevät 2017 Tehdään ryhmäharjoitustunnilla 20.3.

LINUX-HARJOITUS, MYSQL

SmartShip Connect Lite lisäosa WooCommerce alustalle (c) Webbisivut.org

TW-EAV510AC-LTE OpenVPN ohjeistus

Yleinen ohjeistus Linux-tehtävään

Yleinen ohjeistus Windows tehtävään

Maiju Mykkänen Susanna Sällinen

NAVITA BUDJETTIJÄRJESTELMÄN ENSIASENNUS PALVELIMELLE

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

Täysautomatisoitu raportointiympäristö. Joni-Petteri Paavilainen Jani Alatalo

ITKP102 Ohjelmointi 1 (6 op)

Tapahtumakalenteri & Jäsentietojärjestelmä Toteutus

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Käytin tehtävän tekemiseen Xubuntu käyttöjärjestelmää aikaisemmin tekemältäni LiveUSB-tikulta.

DNS- ja DHCPpalvelut. Linuxissa. Onni Kytönummi & Mikko Raussi

Hirviö. Design Patterns

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Delegaatit ja tapahtumakäsittelijät

Ohjelmoin*kielet ja - paradigmat 5op. Markus Norrena

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

Tech Conference Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

WWW-ohjelmointi ANTTI SAND TIETA12

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

1. Olio-ohjelmointi 1.1

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro

Netikka verkkotila - käyttöohje

Ohjelmoinnin jatkokurssi, kurssikoe

Vagrant, Homestead, Laravel

T Projektikatselmus

Harjoitustyö: virtuaalikone

Objective Marking. Taitaja 2014 Lahti. Skill Number 205 Skill Tietokoneet ja verkot Competition Day 1. Competitor Name

Tietokannat ja sovelluskehitys. QASW Summit

Tikon ostolaskujen käsittely

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

TIE Principles of Programming Languages CEYLON

Transkriptio:

WWW-ohjelmointi ANTTI SAND TIETA12

Funktio ja luokat 2

PHP on sekä funktionaalinen, että OO 3 Funktio debuggaukseen Var_dump() tulostaa muuttujan arvon Die() lopettaa ohjelman suorituksen Die(var_dump($var)); on käytännöllinen keino tarkastella muuttujaa Laajennetaan se funktioksi Function dd($data) { echo <pre> ; var_dump($data); echo </pre> ; die(); }

Laajennetaan micro frameworkkiamme 4 Luodaan uusi hakemisto funktioille ja siirretään dd() sinne. Index.php lataa funktiotiedoston ja saa pääsyn kutsumaan funktiota.

Luokat 5 Public, protected $this->propertyname $this->methodname() Magic methods construct, clone, get,

Luokat 6 On hyvin tavallista käyttää taulukkoa luokkainstanssien tietorakenteena. Sama nuolisyntaksi toimii edelleen.

7 PHP ja *SQL PDO

Esimerkkinä MySQL / MariaDB 8 MySQL kaikkein suosituin avoimen lähdekoodin tietokanta, toiseksi eniten käytetty kaikista tietokannoista MariaDB on alkuperäisen kehittäjän drop-in replacement MariaDB on kuitenkin hiukan jäljessä mm. Json-kenttien ja klusteroinnin osalta Mutta perusasioissa toimii yksi yhteen Jos asensit XAMPP, MAMPP, tai LAMPP paketin, tai jos asensit Vagrantin ja siihen ohjelmat, sinulla on jo MySQL tai MariaDB asennettuna Jos asensit brew kautta, asenna myös brew install mysql Koulun koneilla PostgreSQL, mutta koska tietokantarakenne abstraktoidaan, sovellus ei riipu tietystä tietokantamoottorista

Ensin valmisteluja 9 Luodaan uusi tietokanta esimerkkidatalle: Sitten lisätään sinne taulu tietorakenteelle:

PHP PDO 10 PHP tukee funktionaalisia tietokantafunktioita, mutta sisältää myös OOP tietokantaluokan Funktionaaliset komennot sidottuja tiettyyn tietokantatoteutukseen (mysql_connect, ), johtaa vahvaan sidokseen tiettyyn tietokantaan (mysql) PDO luokan avulla tietokanta abstraktoidaan ja voidaan helpommin vaihtaa toteutuksesta toiseen https://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-fordatabase-access--net-12059

PDO ja tietokannat 11

DSN data source name 12 DSN määrittää tietokantayhteyden PDO:lle Hostname tai IP Portti Tietokannan nimi Merkistökoodaus, DSN vaihtelee riippuen itse tietokantatoteutuksesta (MySql, PostgreSQL) PDO luokan konstruktori aiheuttaa poikkeuksen PDOException, jos yhteyttä ei voitu muodostaa

Prepared statement 13 $pdo->prepare() valmistelee kyselyn suorittamista varten Valmistelussa mahdolliset muuttujat sidotaan niille varatuille paikoille EI: DELETE FROM users WHERE id = $_GET[ id ]; OK: DELETE FROM users WHERE id = :muuttuja; Jos muuttujat otettaisiin suoraan mukaan kyselyihin, se altistaisi SQL Injektion hyökkäykselle (tästä lisää omalla luentokerrallaan) Prepared statement sanitoi muuttujat siten, että ne eivät aiheuta kyselyssä sivuvaikutuksia Se ei kuitenkaan validoi syötettä, eli varmista, että muuttuja olisi oikeaa tyyppiä

Value binding 14 Käyttäjältä tulevaa syötettä ei saa konkatenoida osaksi kyselyä, koska se altistaa SQL Injektiolle PDO luokka tarjoaa bindvalue() metodin muuttujien turvalliseen sitomiseen, estäen SQL Injektioita

Data mapping 15 Voidaan hakea assosiatiivinen taulukko Tai voidaan hakea luokan instansseina Luokan instanssista voidaan kutsua luokan metodeja ja käyttää nuolisyntaksia $task[0]->description; vs. $task[0][ description ];

PDO hakuliput 16 PDO::FETCH_ASSOC Assosiatiivinen taulukko, sarakkeen nimi avaimena PDO::FETCH_NUM Indeksoitu taulukko, sarakkeen numero avaimena PDO::FETCH_BOTH Yhdistää kaksi edellistä PDO::FETCH_CLASS Palauttaa objektin, jonka ominaisuuksina sarakkeiden nimet, kutsuu luokan konstruktoria PDO::FETCH_OBJ Palauttaa standardiobjektin, jonka ominaisuuksina sarakkeiden nimet

PDO ja luokat 17 Jos haetaan tietoa luokan instanssina, voidaan luokkaan määritellä julkiset muuttujat vastaamaan tietokannan sarakkeita Mutta ne voidaan jättää myös määrittelemättä PHP:ssa on standardi luokka stdclass $dog = new stdclass; $dog->name = jeff ; // voidaan dynaamisesti lisätä julkisia muuttujia luokkaan Luokan instansseihin voidaan dynaamisesti lisätä julkisia muuttujia ja sulkeumia

Refaktoroidaan micro frameworkkia 18

Refaktoroidaan luokkiin 19

Static -keyword 20

Muuttujat pois koodin seasta 21

Ensimmäinen tietokantaluokka 22

Luokan 23 vastuu QueryBuilder ottaa vastuulleen PDO:n käytön Valmistelee kyselyn Sitoo muuttujat Ajaa kyselylauseet Palauttaa tulokset

Lisätään 24 tyypitys Eksplisiittinen tyypitys on vapaaehtoista Mutta pienellä metodilla sekin saadaan asetettua vastaamaan PHP:n muuttujan tietotyyppiä Ilman tyypitystä PDO saattaa joissain tapauksissa johtaa 1 => 1 TIETA12-2017 - A.S.

Lukumetodit 25 Vastuut jaettu luokan sisällä metodeille Mieti, miten haluaisit käyttää luokkaa ja suunnittele luokan metodit sen mukaan

CRUD 26 Create Read Update Delete

Create 27

Read 28

Update 29

Delete 30

Luonnollisempi API ketjuttamisella 31 Jos luokan metodi palauttaa luokan instanssin (l. Itsensä), voidaan metodeja ketjuttaa Nyt voidaan ketjuttaa komennot jonoksi

Tietokantaluokan hyödyntäminen 32

Tietokantaluokan käyttö 33 Jos Model tyypin luokka haluaisi vastata tietojensa käsittelystä tietokannan kanssa (kuten MVC:ssä halutaan), miten se saa pääsyn tietokantaluokkaan? Luokassa Task on metodi getall(), jonka tulisi palauttaa kaikki rivit tietokannan taulusta todo. Tähän Task tarvitsee QueryBuilder luokan metodeja. Miten Task voi saada käsiinsä $db muuttujan?

Globaali muuttuja? 34

Luokan instanssi parametrina? 35 Annetaan jokaiselle hyödyntävän luokan metodille parametrina viittaus tietokantaluokkaan? Pallotellaan muuttujaa paikasta toiseen Luokat ovat vahvasti riippuvaisia toisistaan Riippuvuuksista alkaa muodostua verkko Muutokset rakenteessa vaikeutuvat TIETA12-2017 - A.S.

Singleton 36 pattern

Singleton pattern? 37 Yleinen suunnittelumalli siihen, että saadaan täsmälleen yksi luokan instanssi Luokalla on staattinen muuttuja instanssi, yksityinen konstruktori ja julkinen staattinen metodi instanssin palauttamiselle Oikeastaan vain toisenlainen tapa luoda globaali muuttuja https://blogs.msdn.microsoft.com/scottdensmore/2004/05/25/why-singletonsare-evil/

Dependency Injection pattern 38 Luokka ei vastaa sellaisen luokan instanssin rakentamisesta, josta luokan toiminta riippuu, vaan luokka saa sen muualta Kutsuvalta luokalta Dependency injection containerista Käytetään myös termiä inversion of control http://php-di.org/doc/understanding-di.html https://en.wikipedia.org/wiki/dependency_injection https://en.wikipedia.org/wiki/inversion_of_control

39 Dependency Injection Container Staattinen luokka, johon voidaan varastoida riippuvuuksia Ja josta voidaan noutaa riippuvuuksia TIETA12-2017 - A.S.

DIC:n käyttö 40 Riippuvuutta aiheuttavat luokat voidaan nyt säilöä yhteen paikkaan ja hakea sieltä tarpeen mukaan Jos luokkaa pitäisi testata, sille voitaisiin asettaa halutut testiriippuvuudet

Tietoturvavaroitus 41 Tuotantopalvelimella web-palvelin tarjoilee yleensä public_html kansiota Nimeämiskäytäntö saattaa vaihdella Tuohon julkiseen kansioon tulee sijoittaa vain front controller ja staattiset resurssit, kuten kuvat, tyylitiedostot ja JavaScript Ohjelman koodit sijoitetaan tämän kansion ulkopuolelle Sinulla voisi olla siis vaikkapa ppt/app hakemistossa ohjelman koodi ja ppt/public_html/ssl hakemistossa vain index.php Huomaa, että require:n polut tulee määrittää suhteessa index.php tiedostoon (kontekstiin, jossa kutsutaan) Index.php kutsuu../../app/bootstrap.php, joka kutsuu config.php, mutta konteksti on index.php:n

Muutama sana tuotannosta 42

Kun haluat ohjelmasi maailmalle 43 Koulun palvelin on hyvin rajattu, eikä siihen saa tehdä muutoksia Siellä ei myöskään saa pyörittää juuri muuta kuin kurssien harjoitustehtäviä Kun haluat ohjelmasi maailmalle, sinulla on muutama vaihtoehto Shared hosting VPS Oma palvelin PaaS

Shared hosting 44 Hyvin halpa kotisivutila, jossa voi ajaa PHP ohjelmia Ohjelma kilpailee samoista fyysisistä resursseista muiden asiakkaiden kanssa Muisti, suoritinaika, siirtokaista Ei yleensä tarjoa SSH tunnuksia tai ei ainakaan tarjoa root oikeuksia Ei (yleensä) voida asentaa laajennoksia, kuten Memcached, Redis Ylläpito käytännössä (s)ftp:n yli, ei välttämättä versiohallinnasta Ei voida automatisoida tuotantoketjua commit, test, deploy Todella paljon tarjoajia ja poljetut hinnat, mutta harvoin riittää vakavasti otettavien palveluiden toteutukseen

Virtual Private Server 45 Kuin oma fyysinen palvelin, vaikkakin virtualisoitu Lähtöhinnaltaan vain vähän kalliimpi Yleensä puhdas käyttöjärjestelmäasennus ja root SSH oikeudet Fyysiset resurssit varattu asiakkaalle (maksat 2gb ram, saat 2gb ram) Oma IP-osoite Täysi vapaus asennella mitä haluaa ja toimia miten haluaa Mutta samalla vastuu kaikesta DEV-Ops toiminnasta Palomuuri, DNS, päivitykset, tietoturva, sähköpostipalvelin, Esimerkiksi Digital Ocean

Oma palvelin 46 Muuten sama, kuin VPS, mutta omat vastuut kasvavat Laiterikot (tarvitaan hot swap kiintolevyt ja käytännössä useampi varapalvelin ja liikenteen ohjaaminen rikkoutuneelta palvelimelta ehjälle mahdollisimman nopeasti, ) Sähkökatkokset (oma generaattori automaattisesti käyntiin) Varkaudet Verkkoyhteys (kiinteä IP, langallinen yhteys ja varalla mobiiliyhteys) Jäähdytys Vaatii käytännössä paljon rahaa ja jatkuvan päivystyksen, jos haluaa, että ohjelma on luotettavasti aina saatavilla

PaaS Platform as a service 47 Pilvipalvelu, jossa joku muu vastaa sekä raudasta, että suoritusympäristöstä Hieman kuin shared hosting, mutta kiinnitetyillä fyysisillä resursseilla ja kohdennettu sovelluskehittäjille Paremmat työkalut ylläpitoon, mutta ei niin laajoja valtuuksia, kuin omalla (virtuaali) palvelimella AppFrog, AWS, Engine Yard, Fortrabbit, Google App Engine, Heroku, Azure, Pagoda Box, OpenShift, Zend Developer Cloud) Myös ilmaisia tilauksia pienillä resursseilla, jotka riittävät juuri ohjelman demoamiseen, mutta harvoin raskaaseen käyttöön

Hyödyllistä luettavaa 51 What is Reflection (in PHP) http://culttt.com/2014/07/02/reflection-php/ What are PHP s Magic Methods? http://culttt.com/2014/04/16/php-magic-methods/ Dealing with times and dates in PHP http://culttt.com/2015/12/07/dealing-with-scheduling-in-php/

Kysymyksiä? 52