Werken met bestanden 1



Vergelijkbare documenten
Tekst en standaarden

styleguide POWERNATION

NPS score: -77 Lorem Ipsum Donec sodales lorem in libero rhoncus, ac egestas augue rhoncus.

LICENTIEOVEREENKOMST SOFTWARE

COMPANY NAME. Onderwerpregel 2. Opdrachtgever. Inschrijving / Offerte. Onderwerpregel 1. Onderwerpregel 3. ten behoeve van

Gegevens burgers niet veilig bij politie

Voor vragen: of mail naar

Huisstijl-Boek -- Cards 4 Free

L AVION Huisstijlhandboek

ZAGIS - Inkopen voor ziekenhuisapotheken

Nieuws. Familieleden of naaste van een cliënt in de GGZ. Nummer juni 2017 Informatiebulletin voor Familievertrouwenspersonen

Functioneel Ontwerp. Mousegestures

Latex Cursus. Eigen Naam

Beste masterproef ooit al geschreven

GROEP 14. Huisstijl handboek

kunstpunt CARÉ... een vrij zinnige kunstkring

TITEL SUBTITEL OF PROJECTNUMMER

Brandpepper. Navigatiestructuur.

Ontwikkelen Projecten: detailweergave

INHOUDS KEUKENS EN RECEPTEN BORIS & YVONNE 5

Server Side Scripting

digital art 2d - over posters - opdracht drugs poster en website

Zoning. Header. Header biedt identiteit en vaste links, los van schermen.

Stijlboek. jacquelinevanzetten.nl

Mijn gezondheid Uitslagen Onderzoek axtion

meergrevelingen huisstijlhandboek

Algemene richtlijnen & instructies voor gebruik van de huisstijl Fnac bij profilerende toepassingen.

WIJ ZIJN PAUL. jaaroverzicht 2017 grafisch ontwerp web-apps illustraties

VAARDIGHEDEN GRAMMATICA UITSPRAAK VOORTGANG BERICHTEN

10 TIPS VOOR BETERE WEBSITES (EN REDACTEUREN) DIALOGUE IS KING CONTENT IS QUEEN

HUISSTIJLHANDBOEK DRUKWERK

ABCD systematiek Deze systematiek levert een gestructureerde beoordeling van je patiënt op.

DUURZAME ECONOMIE. 25 kansen op concurrentievoordeel [DUMMIE] [DUMMIE]

het extra dikke nazomernummer

Opdracht Analyse en ontwerp van je website

Inleiding: Huisstijl. Wat is een Huisstijl? Waarom een Huisstijl?

DE ACINIPO HEALTH SEMINARS WILKO VAN DER VEGT

HUISSTIJL HANDLEIDING. Algemene richtlijnen & instructies voor het gebruik van de huisstijl van De Oude Veiling.

Onze melk is niet houdbaar!

IDENTITEIT LANDELIJK PLATFORM COMMUNICATION & MULTIMEDIA DESIGN

Texel 600 jaar Stad DE NAAM. De naam Texel 600 jaar Stad dient altijd geschreven te worden als: Texel 600 jaar Stad

Factotum. Ons complete aanbod gebundeld in een handig Actueel Magazine. Aanbod van de maand september 2012

Wazzup Real Estate TE KOOP ,- K.K. JACOB CREMERSTRAAT DC ARNHEM. Wazzup Real Estate. Utrechtseweg 310 H AR Arnhem

Huisstijl handboek. Algemene richtlijnen & instructies voor het gebruik van de huisstijl.

WHITEPAPER NUT EN NOODZAAK VEILIG WERKEN OP HOOGTE?



VORMSTUDIE. Hierbij een korte handleiding waar je op moet letten als je een bestand aanlevert om een boekje te laten printen

De Wordpress Workshop

Welkom bij de Friese Bond van Binnenvissers. 4 juni 2013

Het atrium van JFK wordt nu gebouwd. Meer zien? Klik hier!


Strategie //// Concept //// Ontwerp //////////////////////////////////////// Mark Moget & Taco Sipma

Les Voorbereiding. 2. Field Group

basisrichtlijnen visuele stijl

1. Home. 3. Het park 4. De regio. 4.4 Zaken doen 2.4 Vraag uitgebreide info aan (formulier) Ecologie en economie Hoogwaardige bedrijven

Eindverslag IAD Herkansing Maarten Meij CMD1b

STRIKT VERTROUWELIJK

localphotoprof.com (werktitel) WIREFRAME / FUNCTIONELE BESCHRIJVING

B. Smit. People improve performance. Reflector 360. inleiding. November details competenties. overzicht competenties. persoonlijke ontwikkeling

Houd medewerkers gemotiveerd en betrokken

Ons leefklimaat maken we samen. Burgers Ondernemers Gemeenten Waterschappen Veiligheidsregio s R.U.D. s

Communicatiematerialen Taalhuizen - Bestelhandleiding -

ALGEMENE HANDLEIDING WEBSITE

Updaten van de (klas) webpagina

Huisstijl handboek. Algemene richtlijnen & instructies voor het gebruik van de huisstijl.

STRIKT VERTROUWELIJK

CPNB Logo. kleur. zwart. wit

Deze keer in Saar: Gezonde salades met superfood. Alles over sushi + Maak het zelf. Luchtige cake

Ontwerpen van drukwerk

2. Bedenktijd: de termijn waarbinnen de consument gebruik kan maken van zijn herroepingsrecht;

Online vindbaarheid. Hoe kom je hogerop in de zoekresultaten?

Basis huisstijl. richtlijnen v Basishuisstijl richtlijnen v.1.0

HUISSTIJL GUIDELINES. Versie 0.1 / april 2017

Ontwerpen van drukwerk

Nota 0 Advies. Lorem ipsum dolor. E T

Samenvatting: dit document vind je op Toledo en moet hier ingevoegd worden.

SAMEN GROEIEN MET DE IT-OPLEIDER MET DE BESTE SERVICE VAN NEDERLAND

Les 10. Voorbereiding. Denk aan de update van de kern!

TALENT IS NOT ENOUGH

Weekthema: Afscheid nemen. Belangrijke data Belangrijke data. Rhondcus dolor. De leerlingen werken deze dag aan het project.

Persoonlijke rapportage van B. Smit

Huisstijlhandboek versie maart 2008

Persoonlijke rapportage van B. Smit

SJABLOON WETENSCHAPPELIJK RAPPORT OPMAAK COVER DOOR DIENST EXTERNE COMMUNICATIE

Klantrapport. Fixie. Quickscan

Evaluatie Conclusies: samenvatting en gemiddelde (1 of meer portfolio's)

DE BUFFET GELOVIGE C O N C E P T R A P P O R T E L K E - N A B E R D I R K - S C H U T S E L A A R S D A T U M 2 1 / 1 1 /

Evaluatie Conclusies. Model Waarderingskader VO 2017 Voortgezet onderwijs. Printdatum

VOORSTEL VOOR

- pagina 2 van 27 - paragrafen

Campagnehandboek. Algemene richtlijnen & instructies voor gebruik van de campagne

INHOUDSOPGAVE. Over EHBO. Logo. Kleuren. Typografie. Elementen. Praktijkvoorbeelden

BlueBerry. interactie aan de magazines toe te voegen. Hierdoor veranderd een platte pub-

Een effectiëve WordPress website

De stijl van Den Haag. Een introductie

Weekthema: Afscheid nemen. Belangrijke data Belangrijke data. Rhondcus dolor. Weekthema: Griezelig

Evaluatie Conclusies: samenvatting (1 of meer portfolio's)

Transcriptie:

Werken met bestanden 1

Vakopzet C 1 2 3 4 5 6 7 8 9 WC TOETS

Lessen Lesweek 1 (47)Vakoverzicht en introductie Lesweek 2 (48)Doornemen Ch3 (40p) Lesweek 3 (49)Deeltoets 1, Doornemen Ch4+Ch5 (72p) Lesweek 4 (50)Doornemen Ch6+Ch7 (74p) [Ch 8] Lesweek 5 (51)Doornemen Ch9+Ch10 (60p) Lesweek 6 (2) Deeltoets 2, Doornemen Ch11 (32p) Lesweek 7 (3) Doornemen Ch13+Ch14 (52p) [Ch 12+Ch15] Lesweek 9 (5) Deeltoets 3 Maandag voor 12:00 's middags inleveren

Inhoudsopgave 1: What Is PHP And Why Should I Care? 2: Getting Ready to Work with PHP 3: How to Write PHP Scripts 4: Lightening Your Workload with Includes 5: Bringing Forms to Life 6: Uploading Files 7: Using PHP to Manage Files 8: [Generating Thumbnail Images] 9: Pages That Remember: Simple Login and Multipage Forms 10: Getting Started with MySQL 11: Connecting to MySQL with PHP and SQL 12: [Creating a Dynamic Online Gallery] 13: Managing Content 14: Formatting Text and Dates 15: [Pulling Data from Multiple Tables] 16: [Managing Multiple Database Tables] 17: [Authenticating Users with a Database]

Vragen?

Werken met bestanden 6

Bestandsrechten user, group, world 644 / 755 / 600 0: geen rechten 4: lezen 5: lezen en uitvoeren 6: lezen en schrijven 7: lezen, schrijven en uitvoeren

Manieren van openen met fopen() r w x Open in lees modus Open in schrijf modus Open in schrijf modus, maak het bestand aan als het nog niet bestaat, zet de schrijfkop aan het begin van het bestand, als het bestand bestaat geeft fopen() false terug a- Open in schrijf modus, maak het bestand aan als het nog niet bestaat w+ Open in lees-en-schrijf modus, zet de kop aan het begin van het bestand, wis de inhoud van het bestand als die bestaat, maak het bestand aan als het nog niet bestaat r+ Open in lees-en-schrijf modus, zet de kop aan het begin van het bestand a+ Open in lees-en-schrijf modus, zet de kop aan het eind van het bestand, maak het bestand aan als het nog niet bestaat x+ Open in lees-en-schrijf modus, zet de kop aan het begin van het bestand, als het bestand bestaat geeft fopen() false terug

les4/gastenboek/index.php 1. Open het bestand met fopen, deze functie geeft een file handle terug, de manier van openen wordt meegegeven 2. Zolang het bestand inhoud heeft 3. Vul een variabele met de inhoud van het bestand in chunks van 5000 bytes

les4/gastenboek/index.php 1. Open het bestand met fopen, let op de modus! 2. Schrijf iets naar het bestand 3. Sluit het bestand

Potentieel dodelijk?! unlink('file.txt'); unlink('file.php'); unlink('.htaccess');

git clone https://github.com/lbrt/ CMD-SSS-2013-2014.git

Uploaden van bestanden 13

Versturen van informatie post/ get INFORMATIE HTTP REQUEST HTTP RESPONSE $_POST['naam'] $_GET['naam'] PHP MySQL Mongo [...]

Upload formulier $_FILES['form_veld_naam'] ['name'] ['type'] ['tmp_name'] ['error'] ['size'] bestandsnaam MIME-Type verwijzing naar tijdelijke map op de server

Upload formulier 0: Upload succesvol 1: Bestand is te groot (waarde uit php.ini) 2: Bestand is te groot (waarde uit formulier) 3: Bestand is maar gedeeltelijk geüploaded 4: Formulier verstuurd zonder bestand 5: Niet gedefinieerd 6: Tijdelijke map bestaat niet 7: Mag niet schrijven naar tijdelijke map

Bestanden genereren 17

PHP genereert tekst Database (MySQL) Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Curabitur blandit tempus porttitor. Cras mattis consectetur purus sit amet fermentum. Vestibulum id ligula porta felis euismod semper. Nulla vitae elit libero, a pharetra augue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam porta sem malesuada magna mollis euismod. Donec ullamcorper nulla non metus auctor fringilla. Donec sed odio dui. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nulla vitae elit libero, a pharetra augue. Nullam quis risus eget urna mollis ornare vel eu leo. Maecenas sed diam eget risus varius blandit sit amet non magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Sed posuere consectetur est at lobortis.

HTTP-request

GET request GET /les2/voorbeelden/showvars.php?gettest=wauw%20het%20werkt%20echt!! HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en,nl;q=0.7,en-us;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Referer: http://localhost/les2/voorbeelden/showvars.php Connection: keep-alive Hogeschool van Amsterdam CMD - Serverside Scripting 20

POST request POST /les2/voorbeelden/showvars.php HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en,nl;q=0.7,en-us;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Referer: http://localhost/les2/voorbeelden/showvars.php Connection: keep-alive Content-Length: 56 Content-Type: application/x-www-form-urlencoded achternaam=de+vries&achternaam=jan&verstuurknop=stuur%21 Hogeschool van Amsterdam CMD - Serverside Scripting 21

HTTP-response

GET response HTTP/1.1 200 OK Date: Sun, 08 Dec 2013 18:20:22 GMT Server: Apache X-Powered-By: PHP/5.3.20 Content-Length: 1152 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html <!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" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>overzicht van GET en POST vars</title> <link href="/style/style_normal.css" rel="stylesheet" type="text/css" media="all" /> </head> <body> Hogeschool van Amsterdam CMD - Serverside Scripting 23

POST response HTTP/1.1 200 OK Date: Sun, 08 Dec 2013 18:25:29 GMT Server: Apache X-Powered-By: PHP/5.3.20 Content-Length: 1167 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html <!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" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>overzicht van GET en POST vars</title> <link href="/style/style_normal.css" rel="stylesheet" type="text/css" media="all" /> </head> <body> Hogeschool van Amsterdam CMD - Serverside Scripting 24

HTTP (80) vs HTTPS (443)?

Tekstformaten

MIME-types Multipurpose Internet Mail Extensions

Default PHP MIME-type output: text/html

HTML <!DOCTYPE html> <html> <head> <title>paginatitel</title> <link href="stylesheet" rel="stylesheet" type="text/css" /> </head> <body> de inhoud van de pagina komt hier </body> </html>

MIME-types

RSS 2.0 <?xml version="1.0"?> <rss version="2.0"> <channel> <title>titel van de RSS feed</title> <link>http://link_naar_de_bron_website</link> <description>beschrijving van de website</description> <language>nl</language> <pubdate>sat, 26 Dec 2010 16:06:00 GMT</pubDate> <lastbuilddate>sat, 26 Dec 2010 16:06:00 GMT</lastBuildDate> <docs>http://blogs.law.harvard.edu/tech/rss</docs> <generator>weblog Editor 2.0</generator> <managingeditor>editor@example.com</managingeditor> <webmaster>webmaster@example.com</webmaster> <item> <title>titel van het artikel</title> <link>http://link_naar_het_volledige_artikel</link> <description>hier een beschrijving van het artikel</description> <pubdate>tue, 03 Jun 2003 09:39:21 GMT</pubDate> <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid> </item> </channel> </rss>

MIME-type aanpassen via header();

header('content-type: application/rss+xml');

JSON {"menu": { "id": "file", "value": "File", }} "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] }

header('content-type: application/json');

XML <menu id="file" value="file"> <popup> <menuitem value="new" onclick="createnewdoc()" /> <menuitem value="open" onclick="opendoc()" /> <menuitem value="close" onclick="closedoc()" /> </popup> </menu>

header('content-type: application/xml');

CSV naam, kamer, expertise Walter Giannuzzi, 01a36, techniek Bart-Jan Steerenberg, 01a36, design Charlie Mulholland, 01a36, marketing Sonja Rouwhorst, 01a36, techniek Hein Bijvoet, 01a36, nederlands Jos Kok, 01a36, marketing Justus Sturkenboom, 01a36, techniek Marie Meussen, 01a36, nederlands etc...

header('content-type: text/csv');

Tekstmanipulatie

Tekstmanipulatie

Tekstmanipulatie

Tekstmanipulatie Form-invoer bewerken lowercase over gebruikersinvoer splitten op punten ucfirst op elke zin weer achter elkaar plakken wordwrappen op 80 tekens emailen

Patroonherkenning

Regular expressions (regexp/preg)

Regular expressions

les4/introtekst/index.php 1. knip de tekst op basis van de eerste punt, vraagteken of uitroepteken. het resultaat van preg_match( ) komt terug als array 2. geef het 2 e resultaat in de array weer

les4/introtekst/index.php 1. neem de eerste 100 tekens en breek af op het einde van een woord (of zin) het resultaat van preg_match( ) komt terug als array 2. geef het eerste resultaat in de array weer

Formvalidatie datum: /^(19 20)\d\d[- \/.](0[1-9] 1[012])[- \/.](0[1-9] [12][0-9] 3[01])$/ alpha: /^([ \u00c0-\u01ffa-za-z.'\-])+$/ alphanum: /^([ \u00c0-\u01ff0-9a-za-z.'\-])+$/ postcode (int): /^[ a-za-z0-9]+$/ postcode (nl): /^[0-9]{4}\s?[a-zA-Z]{3}+$/ (checken) phone: /^((\+ 00)[1-9](-\d+ \d*))?(\(\d+\))?\d+(-\d+)*$/ email: /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i

Server side validatie

Tekst naar HTML

Automatisch hyperlinken $link_rxp= ' (?<!href=")(https?://[a-za-z0-9+\-=._/*(),@\'$:;&!?%]+) i'; preg_replace($hrefpattern, '<a href="$1">$1</a>', $string); In stukjes: andere delimiter omdat slashes voorkomen in url's ( start van een patroon, komt in $0?<!href=" lookbehind, mag niet voorkomen ) ( start van een patroon, komt in $1 https?:// zoek op http, 0 of 1 keer s en :// [A-Za-z0-9+\-=._/*(),@\'$:;&!?%] + mag meerdere keren voorkomen ) i hoofdletter ongevoelig

Bestanden van servers ophalen

Links destilleren? $page = $_REQUEST["page"]; # weggeknipt: controle op validiteit van de meegestuurde URL $data = file_get_contents($page); preg_match_all(' <a\s[^>]*href="([^"]+)" i', $data, $matches); $all_links = array(); $js_links = array(); $full_links = array(); $local_links = array(); foreach ($matches[1] as $link) { } if ($all_links[$link]) { continue; # wait.. what? } $all_links[$link] = true; if (preg_match('/^javascript:/', $link)) { $js_links[] = $link; } elseif (preg_match('/^https{0,1}:/i', $link)) { $full_links[] = $link; } else { $local_links[] = $link; }

Links destilleren? $page = $_REQUEST["page"]; # weggeknipt: controle op validiteit van de meegestuurde URL $data = file_get_contents($page); preg_match_all(' <a\s[^>]*href="([^"]+)" i', $data, $matches); $all_links = array(); $js_links = array(); $full_links = array(); $local_links = array(); foreach ($matches[1] as $link) { } if ($all_links[$link]) { continue; # wait.. what? } $all_links[$link] = true; if (preg_match('/^javascript:/', $link)) { $js_links[] = $link; } elseif (preg_match('/^https{0,1}:/i', $link)) { $full_links[] = $link; } else { $local_links[] = $link; } Gevaarlijk

Bouw een scraper 1. Maak een script dat een HTML-pagina van een externe server ophaalt en alleen alle links van die opgehaalde pagina toont. 2. Filter de links uit opdracht 1 zodat alleen de linkjes getoond worden die naar externe sites verwijzen en verstuur de output als JSON.

Huiswerk Bestuderen: 9: Pages That Remember: Simple Login and Multipage Forms 10: Getting Started with MySQL