5 For begyndere
- Hvad er PHP? - Hurtigt historisk overblik - Installation - Indstillinger - Hello world - Tekststrenge - PHP og HTML - En doven programmør er en god programmør - Include filer - Funktioner - Interaktion med bruger/klient - Validering - Database: MySQL - Dokumentation
Hvad er PHP? PHP er et scriptsprog primært udviklet til at lave dynamiske hjemmesider med. I version 4.3 kom PHP CLI (Command Line Interface), dvs. at PHP også kan bruges til cronjobs mv. Traditionelle programmer compiles og konverteres permanent til eksekverbare filer. Et scriptsprog fortolkes kommando for kommando hver gang programmet afvikles og er derfor langsommere men til gengæld hurtigere/nemmere at udvikle i. Bl.a. fordi man ikke skal spekulere i allokering og deallokering af hukommelse (malloc og free).
Hurtigt historisk overblik PHP/FI 1995 Personal Home Page / Forms Interpreter udvikles af danske Rasmus Lerdorf PHP/FI 2.0 1997 Sproget er stadig en enmandsprojekt, men tusindvis af udviklere rundt om i verden, bidrager nu med kode. Ca. 50.000 domæner benytter PHP. PHP 3.0 1998 I 1997 beslutter to studerende, Andi Gutmans og Zeev Suraski at den eksisterende version er alt for begrænset i forhold til det ecommerce projekt de arbejder på, og laver en komplet omskrivning. Andi, Zeev og Rasmus beslutter at samarbejde. PHP 3.0 frigives efter 9 måneder i brugertest. PHP begynder nu at ligne det sprog vi benytter i dag. PHP 5.3 2009 Seneste release. I dag er PHP et rekursivt akronym for PHP: Hypertext Preprocessor PHP 6? - Under udvikling Mere historie: http://dk.php.net/manual/en/history.php
Installation PHP kan installeres på stort set alle platforme, herunder Linux, Unix, Mac OS og Windows. Er afhængig af Apache webserver, som derfor også bliver installeret, når du installerer PHP. Se yderligere info for din Linux distro / Unix variant. Du behøver stort set ikke foretage dig noget efter installation. Bare start en browser og gå til http://localhost/. Er installationen udført korrekt, vil du her se Apaches velkomstside. Har du installeret PHP/Apache på en server der har en offentlig IP adresse, vil Apache velkomstsiden være at finde på http://www.ditdomaene.tld eller bare din ip adresse: http://123.456.789.876 Mere om installation: http://dk.php.net/manual/en/install.php
Indstillinger PHP har forholdsvis mange indstillinger man kan vælge fra/til og skrue på. Denne fil hedder php.ini. Placeringen af filen afhænger af din Linux distribution / Unix variant. Husk at ændringer ikke træder i kraft før Apache er genstartet: # apachectl restart Alle indstillinger er beskrevet her: http://dk2.php.net/manual/en/ini.core.php En kort gennemgang af de mest almindelige:
Hukommelse og diskplads memory_limit Hvor meget hukommelse et script må bruge max_execution_time Hvor lang tid et script må køre post_max_size Hvor meget information man kan sende til scriptet via en formular upload_max_filesize Hvor stor en fil man kan uploade upload_tmp_dir Sti til midlertidige filer Note: Brug evt. php_value og php_flag i din virtualhost (Apache). http://dk.php.net/configuration.changes ini_set() og ini_get() henholdsvis sætter og henter indstillinger under afvikling (runtime). Se hvilke her: http://dk.php.net/manual/en/ini.list.php Fejlrapportering error_reporting Niveau for fejlrapportering display_errors Hvorvidt scriptet skal printe fejl til skærmen log_errors Hvorvidt fejl skal logges eller ej error_log Sti til logfil Variabler magic_quotes_gpc Håndtering af tekststrenge fra klienter register_globals Forsvinder i PHP 6 - er off som standard og skal forblive off
Apache virtualhost Listen 80 ServerName laptop NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /var/www/html/thecamp ServerName local.thecamp.dk ErrorLog /var/www/html/data/logs/thecamp_error.log CustomLog /var/www/html/data/logs/thecamp_access.log common php_flag display_errors On </VirtualHost> hosts filen (/etc/hosts) 127.0.0.1 laptop localhost.localdomain localhost local.thecamp.dk Derefter... # apachectl restart... og genstart din browser
Hello world Åben en tekst editor (gedit, vim etc) og skriv følgende: echo Hello world\n ; Gem filen med endelsen.php, eks. helloworld.php Afvikling via web: http://localhost/helloworld.php Afvikling via kommandolinien: $ php helloworld.php
echo Hello world\n ; Start- og slut tag echo Hello world\n ; Kommando echo Hello world\n ; Parameter til kommando echo Hello world\n ; Kommando afslutning echo Hello world\n ; Specialtegn: linieskift Denne ene linie kode skriver ganske enkelt Hello world på skærmen
Tekststrenge Konkatenering af strenge: $firstname = Peter ; $lastname = Hansen ; $fullname = $firstname..$lastname; Brug af citationstegn: $firstname = Peter's ; $lastname = Hansen\ s ; $firstname = 'Peter\'s'; $lastname = 'Hansen s';
PHP og HTML PHP bruges primært til udvikling af dynamiske hjemmesider, dvs. man laver et php script der genererer HTML som sendes til brugerens browser. <html> <head> <title>hilsen</title> </head> <body> <p> if (date( H ) < 12) { echo <b>godmorgen</b> ; } else { echo <em>goddag</em> ; } </p> </body> </html> Når en bruger går ind på denne side eksekveres PHP delen, og derefter sendes resultatet browseren. Vi fortæller systemet hvilken del der er PHP ved at omslutte koden med Man kan naturligvis have så mange sektioner PHP i sit script som man har lyst til.
At blande PHP og HTML som vist i det foregående eksempel, bliver dog hurtigt grimt at se på. if (date( H ) < 12) { $greeting = <b>godmorgen</b> ; } else { $greeting = <em>goddag</em> ; } echo <<<EOFHTML <html> <head> <title>hilsen</title> </head> <body> <p> $greeting </p> </body> </html> EOFHTML; Udfør funktionalitet øverst i scriptet Print indholdet nederst i scriptet (Brug af <<<EOF kaldes for Heredoc syntax)
En doven programmør er en god programmør Undlad at gentage dig selv det er hårdt arbejde og gør din kode umulig at vedligeholde. Husk Brug funktioner og include filer til kode du skal bruge mere end ét sted. Det mest optimale er at beslutte sig for at bruge et godt design pattern og udvikle objektorienteret. Dette vil kun blive berørt meget kort i slutningen af denne præsentation men det er et mål du bør sætte dig.
Include filer Include filer egner sig fortrinligt som skabelon til hjemmesiden. template.php echo <<<EOFHTML <html> <head> <title>hilsen</title> </head> <body> <p> $content </p> </body> </html> EOFHTML; greeting.php if (date( H ) < 12) { $content = <b>godmorgen</b> ; } else { $content = <em>goddag</em> ; } include( template.php ); year.php $content = Vi er i år ; $content.= date( Y ); include( template.php );
Funktioner Funktioner gør det muligt at genbruge kode. functions.php function greeting() { if (date( H ) < 12) { return <b>godmorgen</b> ; } else { return <em>goddag</em> ; } } greeting.php include( functions.php ); $content = greeting(); include( template.php ); function thisyear() { return date( Y ); }
Interaktion med bruger/klient Når der sendes data fra en klient, bliver det tilgængeligt i ét af disse 3 arrays, alt efter hvilken metode der er benyttet. $_POST via formular $_GET via url $_COOKIE via cookie $_SERVER browser information Husk! Stol aldrig på data der kommer fra klienten. Gå altid ud fra, at brugeren er ualmindeligt dum, eller en meget ond hacker. Validering, validering, validering! Husk
<form action= script.php method= post > Fornavn: <input type= text name= firstname value= ><br> Efternavn: <input type= text name= lastname value= ><br> Køn: <input type= radio name= gender value= male > <input type= radio name= gender value= female ><br> <input type= submit name= submit_name value= Send > </form> Fornavn: Efternavn: Køn: Mand Kvinde Send script.php echo Dit fornavn:.$_post[ firstname ]; echo Dit efternavn:.$_post[ lastname ]; echo Dit køn:.$_post[ gender ]; echo Du har klikket på knappen:.$_post[ submit_name ];
<a href= script.php?firstname=peter&lastname=hansen >Klik her</a> Klik her script.php echo Dit fornavn:.$_get[ firstname ]; echo Dit efternavn:.$_get[ lastname ]; Husk Hvis magic_quotes_gpc er On er enkelt- og dobbelt citationstegn i tekststrenge via cookie, get og post escaped. I PHP5 er magic_quotes_gpc Off og i PHP6 er den fjernet helt.
Validering Simpel validering... if (empty($_post[ firstname ])) { echo Du har glemt at udfylde feltet 'Fornavn' ; } else if (strlen($_post[ firstname ]) < 5 strlen($_post[ firstname ]) > 50) { echo Dit fornavn skal være mellem 5 og 50 karakterer. ; } Eksempel med regex. Tjek flere ting på én gang med meget mindre kode. if (eregi( ^[a zæøå]{1,50}$,$_post[ firstname ])) { echo Dit fornavn skal være mindst 5 karakterer langt ; }
Brug af æ, ø og å (lidt om character encoding) header( Content type: text/html; charset=utf 8 ); $firstname = Søren ; $lastname = Vestergård ; echo $firstname..$lastname; Husk at hvis du benytter utf-8 i din header, skal scriptfilen også være i utf-8 format. Dette afhænger af den editor du benytter. Bruger du en database der indeholder tekst, skal tekstfelterne i databasen, også benytte samme karaktersæt. UTF-8 er en af mange karaktersæt man kan benytte ved Character encoding. Et karaktersæt repæsenterer karakterer af en bestemt type og antal. Eksempler: Arabisk, græsk, kinesisk, vest europæisk osv... Nogle af de første karaktersæt var morsekoder, braille og ascii. Arbejder man på et internationalt website, bør man vælge UTF-8, da dette karaktersæt repræsenterer alle karakterer.
Database: MySQL Funktioner til brug for kommunikation med en mysql database, findes i en særskilt pakke der skal installeres. Der findes to pakker: php-mysql og php-mysqli Det er ikke sikkert de er navngivet præcis sådan på din Linux distro/unix variant, men php og mysqli indgår med stor sandsynlighed i navnet. mysqli <- med et i i enden betyder mysql improved og er altså efterfølgeren til mysql pakken. Væn dig derfor til at bruge mysqli fra starten. mysqli kan benyttes med MySQL version 4.1 og nyere.
//Connect to database $link = mysqli_connect( localhost, fake_user, my_password, my_db ); if (!$link) { die( Connect Error:.mysqli_connect_errno()); } //Create SQL $sql = SELECT Name FROM City LIMIT 10 ; //Fetch result if ($result = mysqli_query($link, $sql)) { $numberofrows = mysqli_num_rows($result); if ($numberofrows > 0) { //If we have rows... while ($row = mysqli_fetch_assoc($result)) { echo $row[ Name ]. <br> ; } } else { //...else inform the user echo Der er ingen byer i databasen ; } }
Brug ALTID mysqli_real_escape_string() //Create SQL $sql = SELECT Name FROM City WHERE CountryCode = '.$_GET[ cc ]. ' ; Røvfuld! Roulade //Create SQL $sql = SELECT Name FROM City WHERE CountryCode = '.mysqli_real_escape_string($link,$_get[ cc ]). ' ; Tænk over hvilke privilegier du giver en mysql bruger. Undgå destruktive privilegier som f.eks. DROP og DELETE. Giv aldrig globale privilegier. Lav én bruger pr. website... BRUG ALDRIG root!! $sql = SELECT * FROM City ; Fyføj!
Vil man gerne have lidt data at eksperimentere med, kan man hente en lille database på MySQL's hjemmeside: http://dev.mysql.com/doc/world-setup/en/world-setup.html På siden findes også en trin-for-trin beskrivelse af, hvordan man indlæser databasen. phpmyadmin er en meget populær frontend til MySQL. http://www.phpmyadmin.net
Dokumentation Brug et af de 2 danske mirrors, når du vil ind på PHP hjemmesiden: http://dk.php.net http://dk2.php.net En af de store fordele ved PHP, er at dokumentationen er skrevet i et letforståeligt sprog og altid er efterfulgt at kodeeksempler og kommentarer fra andre brugere. Kommentarerne er særdeles nyttige, i forhold til at undgå faldgruber. Bookmark denne side, så er dokumentationen altid kun et klik væk: http://dk2.php.net/manual/en/funcref.php