PHP er et akronym for «PHP: Hypertext Preprocessor».
Det er et tjenerside-skriptspråk som kan brukes til å lage dynamiske og interaktive vev-sider.
PHP er et åpent, plattformuavhengig, gratis under GNU lisens, høynivå, objekt-orientert skriptspråk (interpreterende programmeringsspråk).
Tjener-orientering.
Man kan si at PHP er et tjener-orientert språk
som lager dynamiske vev-sider,
som kjøres på tjeneren,
og brukes til å sette sammen dokument-kodene,
før de sendes til brukeren.
– (Til forskjell fra klient-orienterte språk som f.eks. Javascript, HTML, CSS
som prosesserer dokumentet etter at det er lastet ned til klient-maskinen.)
PHP-kode kan bl.a. inkluderes i vev-sider sammen med html, css og JavaScript.
Eksempel 1.
<html> <body> <p>Denne teksten er i ren html, og sendes direkte til klienten for visning.</p> <?php echo " <p>Denne teksten lages vha. echo-kommandoen i PHP.<br> Forskjellen er at koden tolkes på vevtjeneren; og omgjøres til HTML. Deretter deretter sendes resultatet til klienten for visning.</p> " ?> </body> </html>
PHP-skript starter med starttagg <?php
og avsluttes med sluttagg: ?>
.
Koden legges inn i html-dokumenter, som må ha .php
som filendelse (istedet for .html).
Koden kjøres på tjeneren, før resultatet lastes ned til nettleseren som ordinære html-koder.
Besøkende kan ikke se koden ved å klikke på «vis kilde» i nettleseren. Det er fordi tolkningen av PHP-koden skjer på tjeneren.
Eksempel 2. Kommandoen echo kan brukes til å skrive ut tekst til vevsiden.
<?php echo "Hei "; echo("verden! "); echo "<br>"; echo 'Hei og hå. '; ?>
echo
kan brukes med og uten parenteser.
"<br>"
gir en ny linje i html-kode.
Enkelfnutt
kan i noen tilfeller brukes isteden for dobbelfnutt.
Legg merke til at instruksjoner avsluttes med semikolon;
Variabler i PHP starter alltid med et $-tegn.
Variabler tilordnes en verdi med bruk av = tegnet, som betyr «settes lik».
Eksempel.
$x=1; // Navnet ‹$x› settes til å peke på en beholder som tildeles verdien 1. // I praksis sier man bare at x settes lik en. $abc = 123; // Variabelen $abc settes til tallet etthundre og tjuetre. $p = $abc; // Her settes $p til å være lik variabelen $abc som er 123. $q = "abc"; // Her settes $q til en tekststreng med teksten abc. $r = abc; // Her settes $r til en tekststreng med teksten abc. echo "$x $abc $p $q $r";
Legg merke til at tilordning av verdier til tekstvariabler bruker fnutter.
Doble skråstreker (//) er kommentartegn.
Kommandoen $r = abc; er tvetydig og bør unngås. Alle tekst-tilordninger bør ha fnutter.
// Flere variabler kan tilordnes en verdi samtidig: $x = $y = $z = 1; // er ekvivalent med: $x=1; $y=1; $z=1;
Variabler i PHP er case-sensitiv. Det vil si at f.eks. x og X er to forskjellige variabler.
Variabler deklareres ikke i PHP.
Det er ingen kommando for å deklarere en variabel, (til forskjell fra andre språk).
Variabler skapes idet de tilordnes en verdi.
Det anbefales å gi variabelen en utgangsverdi, men er ikke nødvendig.
Selv om variabelen er tilordnet et tall,
kan den i neste omgang settes til å peke på en tekst.
Denne koden $x=1; $x="abc";
er gyldig;
Variablene er ikke typedefinert og kan dermed peke til alle typer objekter. PHP er såkalt svakt typet, ift. andre språk som har sterk typing; hvor de ikke bare må deklareres på forhånd, men en må også si hvilken type data variabelen skal inneholde.
Kommandoen echo kan brukes for å skrive ut en variabel til vevsiden.
/* echo kan brukes for å skrive til vevsiden. */ $x = "abc"; echo $x; # Skriver tekststrengen "abc". echo "$x"; # Skriver tekststrengen "abc". echo '$x'; # Skriver variabelnavnet $x. echo "\$x"; # Skriver variabelnavnet $x.
print("Hei igjen. ");
print gjør det samme som echo, med noen små forskjeller,
bl.a:
– print trenger parenteser.
– print returnerer alltid 1. Echo returnerer ingenting.
print("må ha parenteser.");
echo "kan " . "klare " . "seg " . "uten parenteser.";
echo "kan " , "også " , "skrive " , "multiple parametre.";
Eksempel 1. Sette sammen (konkatenere) variabler.
<?php $x = "a"; // Variablene x og y, $y = "b"; // settes til henholdsvis bokstaven a og b. // Konkatenering. $t = $x . $y // $x og $y settes sammen til $t. $x .= $y // Kortform for $x = $x . $y. ($y føyes til $x.) // ($x er lik $t.) ?>
Eksempel 2. Fnutter.
<?php $x="abc"; // Her er $x lik tekststrengen «abc». echo "$x"; // Legg merke til forskjellen mellom dobbelfnutt og enkelfnutt. echo '$x'; // Ved dobbelfnutt evalueres variabelen, mens med enkelfnutter ikke. ?>
Eksempel 2. Substring.
<?php $tekst = "abcdef"; $start = 1; $lengde = strlen($tekst); // $lengde = 6. $lengde = $lengde-1; // $lengde = 5. $tekst = substr($tekst,$start,$lengde); echo $tekst; // Her skrives ut en del av den opprinnelige teksten. ?>
Variabelen $tekst inneholder tekststrengen «abcdef».
Deler av den kan skrives ut vha. funksjonen substr().
Eksempel 3. Substring.
<?php $tekst = "abcdef"; $t1 = substr($tekst,0,1); $t2 = substr($tekst,1,1); $t3 = substr($tekst,2,1); $t = $t1 . $t2 . $t3 ; // $t blir abc. ?>
Eksempel 1. Regne eksempler.
<?php // Addisjon. Summering. $a=0; // Deklarerer en variabel $a og tilordner en startverdi. $a = 1 + 2 + 3; // Legger sammen 1, 2 og 3 og lagrer resultatet i variabelen a. $a++; // a økes med 1. (Kortform for a = a + 1;) $a += 2; // Kortform for a = a + 2; $b = 10 - 3; // Subtraksjon. $b--; // b minkes med 1. (Kortform for b = b - 1;) $b -= 2; // Kortform for b = b - 2; $c = 2 * 3; // Multiplikasjon. $c *= 2; // Kortform for c = c * 2; $d = 11 / 3; // Divisjon. $d /= 2; // Kortform for d = d / 2; $e = 2 + 2/2 - 1; // Divisjon, addisjon, og subtraksjon. $f = (2 + 2 ) / (2 - 1); // Divisjon, addisjon, og subtraksjon med bruk av parenteser. $g = 11 % 3; // Heltallsdivisjon. // Modulus $g = 2 er rest etter heltallsdivisjon. $h %= 2; // Kortform for $h = $h % 2; $i = sqrt(9); // $i = √9 = 3.0. // Merk at sqrt returnerer et flyttall. $j = pi(); // j = 3.1415926535898. // pi-funksjonen gir tilnærmet π-verdi. $k = M_PI; // k = 3.1415926535898. // Konstanten gir det samme som pi-funksjonen. $l =2**4; // Eksponent. $l er to opphøyd i fjerde, som er 16. echo "$a $b $c $d $e $f $g $h $i $j $k $l"; ?>
Eksempel 2. Konstanter.
En konstant er en identifikator for en bestemt verdi.
<?php // Konstanter defineres med define-funksjonen. define("MAKS", 10); // Definerer en konstant som symboliserer en bestemt verdi. echo "Maksverdien er: " . MAKS; ?>
define() tar tre parametre, hvorav den første er navnet, den andre verdien og den tredje angir om navnet skal være case-sensitiv.
Konstanter er globale og kan ikke endres under kjøring.
Konstanter har også type.
Det er en fordel å bruke store bokstaver for KONSTANTER, for å skille dem fra andre variable.
PHP konverterer ofte automatisk fra en type til en annen når det er nødvendig.
Noen ganger vil man endre typen til en variabel. F.eks. gjøre om et heltall til et desimaltall eller en tekst.
Eksempel 1. Funksjoner som konverterer til heltall på litt ulike måter.
<?php $x = (integer)$x; // $x er nå av type heltall. $x = (int)$x; // $x er nå av type heltall. $x = floor($x); // Runder av nedover. $x = round($x); // Runder av på normalt vis. $x = ceil($x); // Runder av oppover. ?>
Eksempel 2. Funksjoner som konverterer til desimaltall.
<?php $x = (float)$x; // $x er nå av type desimaltall. $x = (double)$x; // $x er nå av type desimaltall. $x = (real)$x; // $x er nå av type desimaltall. ?>
Eksempel 3. Konvertering til tekst.
<?php $x = (string)$x; // $x er nå av type tekststreng. $x = "$x"; // Å legge variabelen i dobbelfnutter konverterer også til tekst. ?>
<?php // Her er to tekster som legges sammen. $x = "1abc"; $y = "2def"; echo $x + $y; // = 3. // Dette kommer av at PHP omgjør variablene til tall før regneoperasjonen. // I JavaScript ville dette blitt noe helt annet. ?>
Eksempel 4. Konvertering til matriser.
<?php $x = (array)$x; // $x er nå av type array. ?>
Eksempel 5. Konvertering til objekter.
<?php $x = (object)$x; // $x er nå et objekt. ?>
NULL er en spesiell type som bare har en verdi: NULL.
Funksjonen gettype($x) returnerer variabelens type.
Eksempel 6. Symbolet === sammenligner verdi og type.
<?php x === y // betyr at x er lik y og har samme datatype. ?>
Boolske verdier kan ha to verdier; TRUE og FALSE.
Eksempel 1.
<?php $a = 10; // $a tilordnes verdien 10. ($a er lik 10.) if ($a == 10) {echo '$a er lik 10 == TRUE.';} if ($a == 11) {} else {echo '$a er lik 11 == FALSE.';} if ($a === 10) {echo '$a er lik 10 og av samme type == TRUE.';} if ($a != 10) {} else {echo '$a er ikke lik 10 == FALSE.';} if ($a !== 10) {} else {echo '$a er ikke lik 10 og av samme type == FALSE.';} if ($a < 10) {} else {echo '$a mindre enn 10 == FALSE.';} if ($a > 10) {} else {echo '$a større enn 10 == FALSE.';} if ($a <= 10) {echo '$a mindre enn eller lik 10 == TRUE.';} if ($a >= 10) {echo '$a større enn eller lik 10 == TRUE.';} $b = 11; // $b tilordnes tallverdien 11. (b er lik 11.) if ($a == 10 && $b == 11) {echo '$a er lik 10 OG b er lik 11 == TRUE.';} if ($a == 9 || $b == 11) {echo '$a er lik 9 ELLER b er lik 11 == TRUE.';} $a = "$a"; // $a inneholder teksten 10. if ($a === 10) {} else {echo '$a er lik 10 og av samme type == FALSE.';} $x = TRUE; if (!$x) {echo '$x er lik IKKE-$x == FALSE.';} else {echo '$x er lik IKKE-$x == TRUE.';} ?>
Eksempel 2. OG.
<?php $x = FALSE; $y = FALSE; // $x og $y tildeles en boolsk verdi. $b = $x && $y; // $x OG $y. Begge er TRUE. (FALSE) ?>
Eksempel 3. ELLER.
<?php $x = FALSE; $y = FALSE; // $x og $y tildeles en boolsk verdi. $b = $x || $y; // $x ELLER $y. En av dem er TRUE. (FALSE) // ELLER kan også lages med en if-setning. $c = TRUE; if (!$x) {$c = $y;} ?>
Eksempel 4.
<?php $a = 1 < 2; // $a == TRUE. $b = 2 > 3; // $b == FALSE. $c = $a && $b; // $c == $a OG $b == FALSE. $c = (1 < 2) && (2 < 3); // $c = TRUE. $a = !$b; // $a == IKKE-$b == TRUE. $d = $a || $b; // $d == $a ELLER $b. ?>
Eksempel 5. FALSE kan være litt forskjellig.
<?php if (FALSE == 0) {echo 'FALSE == 0';} if (FALSE == "0") {echo 'FALSE == "0"';} if (FALSE == "") {echo 'FALSE == ""';} if ($a == FALSE) {echo 'Udefinert variabel == FALSE';} if (TRUE != 0) {echo 'TRUE != 0';} if (FALSE == NULL) {echo 'NULL == FALSE';} ?>
Eksempel 6. TRUE kan være mye rart.
<?php if (TRUE == 1) {echo 'TRUE == 1';} // Verdien er et tall, unntatt 0. if (TRUE == 5) {echo 'TRUE == 5';} // Verdien er et tall, unntatt 0. if (TRUE == "abc") {echo 'TRUE == "abc"';} // Verdien er en tekst, unntatt "" eller "0". if (123 == "123abc") {echo '123 == "123abc"';} if ("5" == " 5") {echo '"5" == " 5"';} if ("3.1" == "3.10") {echo '"3.1" == "3.10"';} if ("133" == "0133") {echo '"133" == "0133"';} // 0133 er oktalt. if ("0x10" == "16") {echo '"0x10" == "16"';} // Binære tall begynner med 0x. if ("1e3" == "1000") {echo '"1e3" == "1000"';} ?>
En tom if-setning kan se slik ut: if () {}
Inne i (parentesen) er en betingelse (logisk uttrykk) og i { krøllparentesene } er php-kommandoer.
Eksempel: if (true) {alert("True.")}
<?php $a = 1; // $a tilordnes verdien 1. if ($a == 1) {echo 'Variabelen $a er lik en.';} ?>
Eksempel. Sammenligning av verdier.
<?php $a = false; if ($a == true) {$a = false;} else {$a = true;} echo ('Variabelen $a = ' . $a . "."); ?>
En variabel $a som settes til en boolsk verdi. Den testes i en if-setning, verdien byttes og variabelen skrives ut.
Eksempel. Sammenligning av type.
<?php $a = 5; $b = 5.0; if ($a === $b) {echo ("$a === $b er sant.");} else {echo ("$a === $b er usant.");} ?>
Her er to variable. De testes i en if-setning om de er like og av samme type.
Den ene er et heltall og den andre et flyttall (desimaltall), og de er derfor ikke av samme type, og derfor ulike.
<?php $a = 0; if ($a == 1) {echo "a = 1.";} elseif ($a == 2) {echo "a = 2.";} else if ($a == 3) {echo "a = 3.";} // elseif kan også skrives i to ord. else {echo "a er ikke 1, 2 eller 3.";} ?>
Kolon-notasjon er en alternativ syntaks, hvor krøllparentesene erstattes med kolon og endif.
<?php $a = 0; if ($a == 1): echo "a = 1."; elseif ($a == 2): echo "a = 2."; else: echo "a er ikke 1 og ikke 2."; endif; ?>
If-setninger kan integreres med html.
<?php $a = 1; if ($a == 1){ ?> // HTML-kode som skrives ut dersom betingelsen er oppfylt. <p>$a = 1.</p> <?php }; ?>
Html-koden er innbakt i if-kommandoen.
HTML-koden skrives bare ut dersom betingelsen er oppfylt.
Kolon-syntaks kan gjøre ovenstående lettere å lese:
<?php $a = 1; if ($a == 1): ?> // HTML-kode som skrives ut dersom betingelsen er oppfylt. <p>$a = 1.</p> <?php endif; ?>
Vanligvis bør php og html-kode være mest mulig adskilt,
men denne måten å gjøre det på kan være praktisk
dersom det er mye html-kode og relativt lite php-kode.
PHP i CSS-kode:
<?php $farge = blue; ?> <p style="color:<?php $farge ?>">Fargen er blå.</p> // Som er det samme som: // <p style="color:blue;">Fargen er blå.</p>
PHP og CSS-klasser:
<style> // To CSS-klasser: .btekst {color:blue;} .rtekst {color:red;} </style> <p class ="<?php $x = 1; print ($x == 1) ? 'btekst' : 'rtekst'; ?>"> Denne teksten er enten blå eller rød.</p> // Som er det samme som: // <p class ="btekst">Denne teksten er enten blå eller rød.</p>
If-logikk:
<?php // OG. $a = 3; if ($a > 1) && ($a < 10) {echo '$a er større enn 1 og mindre enn 10.';} else {echo '$a er mindre enn 1 eller større enn 10.';} ?>
<?php // OG kan også lages med en if-setning. Gjør det samme som over. $a = 3; if ($a > 1) { if ($a < 10) {echo '$a er større enn 1 og mindre enn 10.';} } else {echo '$a er mindre enn 1 eller større enn 10.';} ?>
<?php // OG som if-setning. $x = FALSE; $y = FALSE; echo '$x og $y tildeles en boolsk verdi.'; $a = FALSE; if ($x) {$a = $y;} if ($a) {echo '$a == TRUE.';} else {echo '$a == FALSE.';} // Test. ?>
<?php // ELLER. $a = 3; if ($a < 1) || ($a > 10) {echo '$a er mindre enn 1 eller større enn 10.';} else {echo '$a er mellom 1 og 10.';} ?>
<?php // ELLER kan også lages med en if-setning. Gjør det samme som over. $a = 3; if ($a < 1) {} else if ($a > 10) {} else {echo '$a er mindre enn 1 eller større enn 10.';} ?>
<?php // Eller som if-setning. $x = FALSE; $y = FALSE; echo '$x og $y tildeles en boolsk verdi.'; $b = FALSE; if ($x) {$b = TRUE;} elseif ($y) {$b = TRUE;} if ($b) {echo '$b == TRUE.';} else {echo '$b == FALSE.';} // Test. ?>
Switch er en annen måte å sjekke betingelser på. f.eks. istedet for mange if elseif utsagn.
<?php $a = 2; switch ($a) { case 1: { $m = '$a == 1'; break;} case 2: { $m = '$a == 2'; break; } case 3: { $m = '$a == 3'; break; } default: $m = '$a har ukjent verdi.'; } echo $m; ?>
Switch-setningen tar en enkelt variabel som inndata og sjekker denne mot alle de andre verdiene.
break-kommandoen avslutter switch når den finner et treff. Det sparer litt tid.
default fanger opp de tilfeller hvor det ikke er treff.
Løkker (loop) er nyttig når en trenger å utføre samme operasjon mange ganger etter hverandre.
For-løkker kan brukes når en på forhånd vet hvor mange ganger kommandoen skal utføres.
En tom for-løkke kan se slik ut: for () {}
Inne i (parentesen) er en startverdi og sluttverdi for en variabel samt, en forøkelsesfaktor.
I {krøllparentesene} er php-kommandoer.
Eksempel 1:
<?php for ($i = 1; $i <= 10; $i++) { echo($i); } ?>
Kommandoen begynner med nøkkelordet for.
Inne i parentesen får variabelen $i en startverdi = 1.
Deretter følger en betingelse som repeteres sålenge den er sann. I dette tilfelle at variabelen $i er mindre eller lik tallet ti.
For hver repetisjon økes variabelen i med 1.
Kommandoene utføres mellom {krøllparentesene}. I dette tilfelle skrives verdien av i ut.
En tom while-setning kan se slik ut: while (betingelse) {kommandoer}
While-løkken repeteres så lenge betingelsen er sann.
Eksempel 1:
<?php $i = 1; // Variabelen $i tilordnes startverdien 1. while($i <= 5) // Betingelsen sjekkes. { echo 'Variabelen $i = ' . "$i
"; $i++; //For hver repetisjon økes variabelen i med 1. } ?>
Eksempel 2: Samme program hvor verdiene skrives ut i en html-tabell.
<?php echo "<table>"; $i = 1; // $i tilordnes startverdien 1. while($i <= 5) { echo "<tr><td>"; echo 'Variabelen $i = ' . "$i <br>"; $i++; echo "<td><tr>"; } echo "</table>"; ?>
Do er en modifisert utgave av en while-loop.
En tom do-setning kan se slik ut: do {kommandoer} while (betingelse);
Kommandoen begynner med nøkkelordet do fulgt av kommandoer og en while-betingelse.
Forskjellen fra while er at løkken blir kjørt minst en gang selv om betingelsen er usann. Det er fordi betingelsen blir sjekket etter at løkken kjøres første gang.
Eksempel 1:
<?php $i = 1; // $i tilordnes startverdien 1. do { echo 'Variabelen $i = ' . "$i <br>"; $i++; } while ($i <= 0); ?>
Eksempel 2, med break.
<?php $i = 1; do { echo 'Variabelen $i = ' . "$i <br>"; $i++; Break; } while ($i <= 10); echo "Løkken er stoppet og fortsetter med etterfølgende kode utenfor løkken."; ?>
Break stopper løkken og fortsetter med eventuell etterfølgende kode utenfor løkken.
Eksempel 3, med continue.
<?php $i = 1; do { $i++; if ($i <= 6) {continue;} echo 'Variabelen $i = ' . "$i <br>"; } while ($i <= 10); ?>
Kommandoen continue bryter en loop før den er fullført. Når variabelen $i har nådd en gitt verdi, fortsetter løkken på nytt, uten å utføre etterfølgende kommandoer.
En array er en spesiell variabel som kan inneholde flere verdier. Verdiene kan hentes fram ved å referere til en nøkkel-indeks.
En array kan sees på som en matrise eller tabell som består dataelementer. Hvert element har nøkkel (eller indeks) og tilhørende verdi. Elementene er indeksert fra 0 og oppover.
PHP-matriser kan ha ulik datatype.
Eksempel 1: Éndimensjonal matrise
<?php $a[0] = "Her en liten tekststreng"; $a[1] = " Andre tekststreng"; $a[2] = " Tredje tekststreng. "; echo $a[0] . $a[1] . $a[2]; ?>
Denne matrisen kan sees på som en éndimensjonal tabell med et tre dataelementer som er indeksert fra 0 til 2.
For å referere til enkeltelementer brukes arraynavn og indeks. Arraynavnet kalles derfor også for en indeksert variabel.
Arrayvariabelen er en peker til arrayobjektet.
Eksempel 2: Array-funksjonen
array() er en funksjon som kan opprette en matrise.
<?php $a = array ("a", " b", " c. "); // Samme som over. Indekseringen er automatisk. print_r($a); // Array ( [0] => a [1] => b [2] => c. ) ?>
Indeksene legges til automatisk, (og starter alltid på 0).
Eksempel 3: Innholdet i matrisen kan endres.
<?php $a = array ("a", " b", " c. "); $a = array (0 => "d", 1 => "e", 2 => "f" ); print_r($a); ?>
Her er innholdet abc endret til def.
print_r() er en funksjon som kan vise en variabel på leselig måte.
var_dump() gir mer info, bl.a. type og lengde.
Matriser kan sorteres, f.eks. med: sort($a).
Eksempel 4: Elementer kan tilføyes og fjernes.
<?php $x = array ("a", "b", "c"); $x[] = "d"; // Nøkkel er ikke spesifisert, // men på dette stedet i koden er det det samme som $x[3] = "d"; // Elementet legges til på slutten av en eksisterende matrise. $x[4] = "e"; // Legger til et nytt element med nøkkel "4". unset($x[4]); // Fjerner elementet. // Fjerner alle elementer i matrisen. foreach ($x as $i => $verdi) {unset($x[$i]);} unset($x); // Fjerner hele matrisen. ?>
foreach gjør det enkelt å traversere en matrise.
Eksempel 5: Tekstnøkler (assosiativ matrise).
<?php $a['navn'] = "Nils"; $a['adresse'] = " Gågata 3,"; $a['sted'] = " Oslo. "; echo $a[navn]; echo $a[adresse]; echo $a[sted]; ?>
Nøklene må ha fnutter for ikke å forveksles med konstanter.
Eksempel 6: Kortnotasjon.
$a = array("navn" => "Nils ", "adresse" => "Gågata 3 ", "sted" => "Oslo.");
Assosiative matriser kan sorteres i forhold til verdier eller nøkler med asort() eller ksort().
Eksempel 6: Todimensjonal matrise
<?php $brett = array ( "8" => array ("a", "b", "c", "d", "e", "f", "g", "h"), "7" => array ("a", "b", "c", "d", "e", "f", "g", "h"), "6" => array ("a", "b", "c", "d", "e", "f", "g", "h"), "5" => array ("a", "b", "c", "d", "e", "f", "g", "h"), "4" => array ("a", "b", "c", "d", "e", "f", "g", "h"), "3" => array ("a", "b", "c", "d", "e", "f", "g", "h"), "2" => array ("a", "b", "c", "d", "e", "f", "g", "h"), "1" => array ("a", "b", "c", "d", "e", "f", "g", "h") ); print_r($brett); ?>
Følgende kode skriver ut elementene av brettet i en tabell.
<?php echo "<style> table { border:1px solid blue; border-collapse:collapse; } td{border:1px solid blue;} </style>"; $antlinjer = count($brett); // Lengden av en matrise. $antrader = count($brett['1']); echo "<p><b>Brett:</b></p>"; echo "<table>"; for ($linje = $antlinjer; $linje >= '1'; $linje--) { echo "<tr><td>$linje</td>"; for ($rad = 0; $rad < $antrader; $rad ++) {echo "<td>" . $brett[$linje][$rad]."</td>";} echo "</tr>"; } echo "</table>"; ?>
foreach kan gå gjennom alle elementene i en matrise.
<?php // Skriver ut elementene i en matrise vha. en foreach. $bokstavmatrise = array ("a", " b", " c", " d. "); foreach ($bokstavmatrise as $bokstav) {echo $bokstav;} ?>
<?php // Skriver ut elementene i en matrise vha. en for-løkke. $bokstavmatrise = array ("a", " b", " c", " d. "); $antall = count($bokstavmatrise) - 1; for ($i=0; $i <= $antall; $i++ ) {echo $bokstavmatrise[$i];} ?>
<?php $bokstavmatrise = array ("a", " b", " c", " d. "); $b = json_encode($bokstavmatrise); echo $b; // En annen måte å få ut alle elementene i en matrise. ?>
<?php $bokstavmatrise = array ("a", " b", " c", " d. "); var_dump($bokstavmatrise); // Enda en måte å få ut alle elementene i en matrise. ?>
<?php // Skriver ut elementene med nøkkel og verdi. $bokstavmatrise = array ("a", " b", " c", " d"); foreach ($bokstavmatrise as $indeks => $bokstav) {echo "$indeks er nøkkel for bokstaven $bokstav. <br>";} ?>
Her er et skjema for skriving av tekst:
HTML-koden ser slik ut:
<form action="behandling-navn.php" method="POST"> Hva heter du: <input type="text" name="navn"> <input type="submit"> </form>
Når brukeren klikker Send sendes skjema til behandling til en PHP-fil som heter behandling-navn.php.
Koden ser slik ut:
Hei, du heter <?php $navn = ($_POST['navn']); echo ($navn . '.'); ?>
Her er et skjema for skriving av tekst:
HTML-koden ser slik ut:
<form action="behandling-navn.php" method="GET"> Hva heter du: <input type="text" name="navn"> <input type="submit"> </form>
Filen som tar imot data fra skjemaet og behandler det heter behandling-navn.php og inneholder:
Hei, du heter <?php $navn = ($_GET['navn']); echo ($navn . '.'); ?>
Forskjellen er at method="POST" er byttet ut med method="GET" i HTML-skjemaet.
I behandlingsfilen brukes variabelen $_GET for å hente verdien.
Med POST sendes informasjonen til behandlingsfilen usynlig.
Med GET overføres informasjonen via adresselinjen på vevsiden. URLen får et tillegg som begynner med et spørsmålstegn (?) som forteller nettleseren at det følgende er variabler.
Passord og sensitiv informasjon bør ikke sendes med GET.
Med GET kan det være mulig å bokmerke siden, som kan være nyttig i noen sammenhenger.
Som hovedregel bør POST brukes.
$_GET og $_POST er superglobale variable (assosiative matriser) i PHP som brukes til å samle data fra form-skjemaer.
Feltnavnene brukes som nøkler i den assosiative matrisen. Derfor må alle inndata-felter i HTML-skjemaet ha unike navn.
Her er et skjema for skriving av tall:
HTML-koden ser slik ut:
<form action="behandling-alder.php" method="POST"> Hvor gammel er du: <input type="text" name="alder"> <input type="submit"> </form>
Filen som behandler skjemaet heter behandling-alder.php og inneholder:
Du er <?php echo (int)$_POST['alder'] . " år"; ?>
Siden alder er et heltall,
kan innputten konverteres til heltall.
int-funksjonen konverterer innholdet til et heltall
og fjerner andre tegn.
Med kommandoen include
kan en hvilken som helst fil inkluderes.
<?php include("filnavn.txt"); ?>
Filen med tekst og markup-koder, kopieres inn i dokumentet.
Inkludering er nyttig når en ønsker å ha samme tekst på flere vev-sider. F.eks. standard topp, bunn, marg, meny, osv.
Kommandoen readfile er nyttig hvis en vil åpne en fil og vise innholdet.
<?php readfile("filnavn.txt"); ?>
Funksjonen returnerer antall tegn dersom lesingen av filen lykkes. Hvis den mislykkes returneres FALSE eller en feilmelding.
<?php $f = readfile("filnavn.txt"); echo "<br>Antall tegn er: " . $f . "."; ?>
Ved å bruke fread-funksjonen har en flere muligheter.
Eksempel 1.
<?php $f = fopen("filnavn.txt", "r"); // Første parameter er navnet til filen som skal åpnes. // Andre parameter (r) angir at filen skal åpnes i lese-modus. // $f inneholder en referanse til filen. $f = fread($f,100); // Innholdet i filen leses til variabelen $f. // Første parameter er en filreferanse. // Andre parameter angir maksimalt antall tegn som skal leses. echo $f; // Viser innholdet i filen. fclose($f); // Filen lukkes. ?>
Eksempel 2.
<?php $fnvn = "filnavn.txt"; $f = fopen($fnvn, "r") or die("Kan ikke åpne filen!"); // Her lages en feilmelding dersom filen ikke kan åpnes. // Variabelen $fnvn inneholder navnet på filen. $f = fread($f,filesize($fnvn)); // Her leses hele filen, ved at filesize angir filstørrelsen. echo $f; fclose($f); // Når filen er lukket kan det ikke leses eller skrives til filen. // Selv om filen trolig lukkes av tjeneren når programmet er avsluttet // er det god praksis å lukke filer som en er ferdige med. ?>
En ny fil lages ved å åpne den med w-parameteren.
<?php $fnvn = "nyfil.txt"; // Filnavnet lagres i en variabel. $fref = fopen($fnvn, "w") or die("Kan ikke åpne filen!"); // Variabelen $fref får en referanse til filen. // Første parameter er filnavnet. // Andre parameter (w) angir at filen skal åpnes i skrive-modus, // og at alt innholdet i filen blir slettet. // Hvis filen ikke finnes, opprettes en ny fil. fclose($fref); echo "Sjekk filen."; ?>
Eksempel 1. Eksisterende data overskrives og slettes.
<?php $fnvn = "filnavn.txt"; $fdta = "Innholdet i filen.\n"; // med ny linje (\n). $fref = fopen($fnvn, "w") or die("Kan ikke åpne filen!"); // w-parameteren angir skrive-modus. // Filpekeren starter ved begynnelsen. fwrite($fref,$fdta); // Her skrives data til filen hvor, // første parameter ($fref) inneholder en filreferanse, // og andre parameter er innholdet. $fdta = "Nytt innhold."; fwrite($fref,$fdta); // Her skrives nytt innhold til filen. fclose($fref); echo ("Sjekk filen $fnvn."); ?>
Eksempel 2. Slett innholdet i en fil
<?php $fnvn = "filnavn.txt"; $fdta = ""; $fref = fopen($fnvn, "w") or die("Kan ikke åpne filen!"); // Innholdet i filen slettes. # fwrite($fref,$fdta); // Det er ikke nødvendig å skrive til filen. fclose($fref); echo ("Sjekk filen $fnvn."); ?>
Å slette innholdet i filer kan være nyttig for midlertidige filer og buffre og lignende.
For å tilføye innhold i en fil, uten å slette eksisterende innhold, brukes a-parameteren ved åpning.
Eksempel.
<?php $fnvn = "filnavn.txt"; $fdta = "\nTilføyd innhold. "; // Med linjeskift foran. $fref = fopen($fnvn, "a") or die("Kan ikke åpne filen!"); // a-parameteren åpner filen i append-modus. // Eksisterende data beholdes. // Filpekeren starter ved slutten. // Hvis filen ikke finnes lages en ny. fwrite($fref,$fdta); // Her tilføyes data til filen hvor, // første parameter ($fref) inneholder en filreferanse, // og andre parameter er innholdet. fclose($fref); echo ("Sjekk filen $fnvn."); ?>
Eksempel 1.
<?php unlink("filnavn.txt"); // Sletter filen dersom den finnes. echo ("Sjekk filen: filnavn.txt."); ?>
Eksempel 2.
<?php $fnvn = "filnavn.txt"; if(file_exists($fnvn)) { unlink($fnvn); // Sletter filen dersom den finnes. echo ("Filen $fnvn ble slettet."); } else { echo ("Filen $fnvn fantes ikke, og ble derfor ikke slettet."); } ?>
Lag først et HTML skjema som gjør at brukeren kan velge en fil på sin egen maskin og laste den opp til et midlertidig sted på tjener-maskinen:
HTML-koden ser slik ut:
<form method="POST" action="filopplastning.php" enctype= "multipart/form-data" > <!-- Spesifiserer hvordan filen skal kodes ved overføring til tjener. enctype= "multipart/form-data" må brukes når skjemaer inneholder <input type="file"> elementer. --> <input type="hidden" name="MAX_FILE_SIZE" value="20000"> <!-- Dette er et skjult felt som angir maksimal filstørrelse i antall byte. 20000 byte = 20kB. Passende størrelse kan f.eks. være 1MB for bilder og 10MB for video. Direktivet må komme før input-feltet. Verdien av MAX_FILE_SIZE sendes til max_file_size variabelen i PHP. Hensikten er å stoppe store filer før de lastes opp. Det handler om brukervennlighet og ikke om sikkerhet fordi det er lett å omgå denne sperren. Direktivet kan godt utelates fordi den virkelige sjekken må skje i PHP-koden eller i PHP.ini. --> Velg fil som skal lastes opp:<br> <input name="filref" type="file" > <!-- filref er referansen til filen. Navnet filref går til filnavnet i variabelen $_FILES['filref']['name']. --> <input type="submit" value ="Last opp fil." > <!-- Når brukeren trykker på knappen lastes filen opp til et midlertidig lager. Referansen lagres den globale variabelen $_FILES. --> <!-- Deretter blir skjemaet sendt til filen spesifisert i action som i dette tilfelle er filopplastning.php. --> </form>
Opprett en fil med et PHP skript for opplasting.
Filen kan f.eks. hete filopplastning.php
og koden kan se slik ut:
<?php $opplastingsmappe = "opplastingsmappe/"; // Opplastingsmappen som filen lastes til, // blir satt til samme mappe som skriptet ligger i. $filnavn = basename($_FILES['filref']['name']); // Variabelen $filnavn får det opprinnelige filnavnet. // $_FILES er en superglobal matrise hvor PHP lagrer fil-informasjon. // filref er referansen som ble tildelt i HTML-skjemaet. // $_FILES['filref']['name'] er det opprinnelige filnavnet på brukerens fil. $opplastingsmappe = $opplastingsmappe . $filnavn; // Filen skal lastes til opplastingsmappen. $tmpfil = $_FILES['filref']['tmp_name']; // Variabelen $tmpfil får navnet til den midlertidige filen som ligger på tjeneren. $opplasting = move_uploaded_file($tmpfil, $opplastingsmappe); // Filen flyttes fra midlertidig mappe til målmappen. // Tilbakemelding. if ($opplasting) {echo "Filen $filnavn ble lastet opp.";} else {echo "Feil med opplasting!";} ?>
Hvis dette ikke virker kan det skyldes at opplastingsmappen har feil rettigheter.
Eller at «php.ini» ikke er konfigurert for filopplasting; sjekk direktivet file_uploads = On.
Før filen flyttes til opplastingsmappen bør den testes.
<?php $opplasting = true; // Avgjør om det skal skje en opplasting. $feilmelding = "Feilmelding:<br>"; // Sjekker feilkode fra html-skjemaet. $feilkode = $_FILES['filref']['error']; if ($feilkode == 0) {} // Filen er ok ihht. html-skjema. else if ($feilkode == 1) { $feilmelding = $feilmelding . "Filen er for stor ihht. php.ini. (Feilkode $feilkode.)<br>"; $opplasting = false; } else if ($feilkode == 2) { $feilmelding = $feilmelding . "Filen er for stor ihht. html-skjema. (Feilkode $feilkode.)<br>"; $opplasting = false; } else { $feilmelding = $feilmelding . "Feil med filen. (Feilkode $feilkode.) <br>"; $opplasting = false; } $opplastingsmappe = "opplastingsmappe/"; $filnavn = basename($_FILES['filref']['name']); $opplastingsmappe = $opplastingsmappe . $filnavn; $tmpfil = $_FILES['filref']['tmp_name']; // Sjekk filendelse. $filendelse = pathinfo($opplastingsmappe,PATHINFO_EXTENSION); if($filendelse != "jpg" && $filendelse != "png") { $feilmelding = $feilmelding . "Kun filer med filendelse .jpg eller .png er tillatt.<br>"; $opplasting = false; } // Sjekk filtypen. $filtype = $_FILES['filref']['type']; // Mimetypen. //echo $filtype; if (strstr($filtype, "jpeg")) {} // Godtar jpeg-filer. else {if (strstr($filtype, "png")) {} // Godtar png-filer. else { $feilmelding = $feilmelding . "Kun png og jpeg filer er tillatt.<br>"; $opplasting = false; }} // Sjekk om filen allerede finnes i opplastingsmappen. if (file_exists($opplastingsmappe)) { $feilmelding = $feilmelding . "Filen finnes allerede.<br>"; $opplasting = false; } // Sjekk om filen er for stor. $str = $_FILES['filref']['size']; $maks = 250000; if ($str > $maks) { $feilmelding = $feilmelding . "Filen er for stor. Størrelsen er $str, (maks er $maks).<br>"; $opplasting = false; } else if ($str = 0) { $feilmelding = $feilmelding . "Ingen fil ble valgt.<br>"; $opplasting = false; } if ($opplasting) { $opplasting = move_uploaded_file($tmpfil, $opplastingsmappe); // Funksjonen move_uploaded_file returnerer true, // hvis filen ble flyttet, og false om det var problemer. } else {$feilmelding = $feilmelding . "Filen $filnavn ble ikke lastet opp.<br>";} // Tilbakemelding. if ($opplasting) {echo "Filen $filnavn ble lastet opp.";} else { echo $feilmelding; } // Filen blir automatisk slettet fra det midlertidige lageret. ?>
Det er viktig å sjekke input fra brukeren slik som vist over, for å begrense størrelse, filtype, duplikater, osv.
Opplastingmappen bør ikke ligge på samme sted som PHP-skriptet. Flytt det utenfor vev-roten. Dermed er det vanskeligere for andre å se hva som er i mappen.
En kan også legge inn en tom index.html.
Filer med samme navn kan være et problem,
fordi den siste vil slette foregående.
For å forhindre dette kan filnavnet modifiseres
f.eks. ved å gi det et tillegg når det flyttes til opplastingsmappen.
$filnavn = md5(rand() * time()) . $filnavn;
md5() genererer en 32 tegns tilfeldig tekststreng.
Skript som lister alle filene i en mappe og lager en liste med klikkbare lenker.
<?php $opplastingsmappe = 'opplastingsmappe/'; $filliste = scandir($opplastingsmappe, 0); $antallfiler = sizeof($files); print "<ul>\n"; for($i=0; $i < $antallfiler; $i++ ) { $filnavn = $filliste[$i]; if($filnavn == '.') {continue;} if($filnavn == '..') {continue;} print '<li><a href="' . $opplastingsmappe . $filnavn . '">' . $filnavn . '</a></ li>' . "\n"; } print "</ul>\n"; ?>
date() er en innebygd funksjon i PHP som gir dagens dato.
Ved å angi parametere kan en få ut dagnummer, månedsnummer, årstall, osv.
<?php date_default_timezone_set('CET'); //Central European Time. $dag = date("d"); // Dagnummer. $mnd = date("m"); // Månedsnummer. $aar = date("Y"); // Årstallet. $dto = "$dag.$mnd.$aar."; echo "Dagens dato er: $dto"; ?>
Når "d.m.Y" står inne i parentesen blir resultatet dagens dato på formen dag.måned.år.
<?php echo "Dagens dato er: " . date("d.m.Y"); ?>
Funksjoner gjør det lettere å modulere koden i mindre oppgaver.
Funksjoner starter med kodeordet function.
Deretter følger navnet på funksjonen.
Eksempel:
<?php function funksjonsnavn1() { echo "Hei, her er kode fra funksjonen."; } funksjonsnavn1(); //Funksjonskall. ?>
Funksjonen inneholder php-kommandoer inne i { krøllparentesene }. Den siste krøllparentesen avslutter funksjonen.
Funksjoner aktiveres med et funksjonskall.
Funksjoner kan ha parametre.
Funksjoner har ofte parametre inne i parentesen.
Er det ingen parametre er parentesen tom.
<?php // Funksjoner kan ha parametre. function funksjonsnavn2($p1,$p2,$p3) { echo "$p1 $p2 $p3"; } $p1 = "Hei, "; $p2 = "her er kode fra funksjonen,"; $p3 = "med tre parametre."; funksjonsnavn2($p1,$p2,$p3); ?>
Funksjoner kan bruke globale variable.
<?php // Funksjoner kan bruke globale variable. function funksjonsnavn3() { global $p1; global $p2; global $p3; echo "$p1 $p2 $p3"; } $p1 = "Hei, "; $p2 = "her er kode fra funksjonen,"; $p3 = "med globale parametre."; funksjonsnavn3(); // Ingen parametre. ?>
Her er $p1, $p2 og $p3 globale variable, som også blir kjent på innsiden av funksjonen.
Funksjoner kan bruke globale variable direkte.
PHP lagrer alle globale i en matrise som heter $GLOBALS['globalens navn'].
<?php // Funksjoner kan også bruke globale variable direkte. function visGlobal() { echo $GLOBALS['z']; // $z er tilgjengelig innenfor funksjonen. } $z = 1; // $z settes til 1 utenfor funksjonen. visGlobal(); // Funksjonskall. ?>
Matrisen $GLOBALS[] er tilgjengelig innenfra funksjoner.
Statiske variable i funksjoner.
<?php // Funksjoner kan ha statiske variable. function visStatiskVariabel() { static $x = 0; $x++; echo $x; } // Funksjonskall. Variabelen beholder verdien fra forrige kall. visStatiskVariabel(); // $x == 1. visStatiskVariabel(); // $x == 2. visStatiskVariabel(); // $x == 3. ?>
Normalt slettes alle variablene når funksjonen avsluttes. Noen ganger trenger en å beholde variabelen mellom funksjonskall.
<?php // Funksjoner kan ha en returverdi. function summer($x,$y) { $sum = $x + $y; return $sum; } echo "Summen av 1 + 2 = " . summer(1,2); ?>
Funksjoner kan ha referanse-parametre.
<?php // Funksjoner kan ha referanse-parametre. function inkrementer(&$x) // Bruker & foran parameteren. {$x = $x + 1;} $x = 1; echo '$x' . " er: $x"; // $x er 1; inkrementer($x); echo '$x' . " er: $x"; // $x er 2; ?>
Det brukes en & foran parameteren.
Funksjoner med mange parametre.
<?php // Funksjoner med mange parametre. function funksjonsnavn4() { // En innebygd funksjon returnerer alle parametrene i en matrise. $parametre = func_get_args(); foreach ($parametre as $p) {echo $p;} } $p1 = "Hei, "; $p2 = "her er kode fra funksjonen, "; $p3 = "med flere parametre. "; funksjonsnavn4($p1,$p2,$p3); ?>
Objekter er datatyper som kan inneholde data i form av variable og funksjoner.
Objekter defineres med klasse-navn.
<?php class person1 { var $navn; // Objekter kan ha attributter. var $alder; } $p = new person1; // Lager en instans av klassen. $p->navn = "Nils."; print "Navn: " . $p->navn; ?>
<?php // Objekter kan inneholde funksjoner. class person2 { var $navn = "NN."; function settNavn($n){$this->navn = $n;} // Funksjon som setter navnet. function hentNavn(){return $this->navn;} // Funksjon som henter navnet. } $q = new person2; $q->settNavn("Martin"); echo "Navn: " . $q->hentNavn(); ?>
<?php // Objekter kan ha skjulte egenskaper. class person3 { private $navn = "NN."; // Attributtet kan ikke nåes utenfra. public function settNavn($n){$this->navn = $n;} public function hentNavn(){return $this->navn;} } $r = new person3; $r->settNavn("Martin"); echo "Navn: " . $r->hentNavn(); ?>
Fordelen med den siste metoden er at funksjonene sett og hent antas å være fast over den tiden objektet vedlikeholdes. Innholdet i objektet, navn på variabler, funksjoner osv. kan endres uten at konteksten trenger å endres.
Feilmeldinger kan skrives ut.
<?php error_reporting(E_ALL); // Viser alle feil. // PHP-kode. ?>
1994.
PHP-prosjektet startet av dansk-kanadieren Rasmus Lerdorf.
Han var
programvareutvikler og medlem av utviklingsteamet til Apache
og ville holde oversikt over besøkende på sin personlige vevside.
Til dette utviklet han en skriptsamling basert på Perl og CGI,
som enkelt kunne installeres på personlige nettsider.
08.06.1995. Første versjon av Personal Home Page (PHP) kom i 1995.
PHP ble offentlig tilgjengelig og gjort til åpen kildekode.
PHP ble utviklet for ikke-programmere for å kode ikke-programmer (vev-sider)
uten for bratt læringskurve, og ikke stopper opp selv om det er mindre feil.
Svak typing og automatisk konvertering mellom datatyper.
De første versjonene var inspirert av Perl og C.
1995. PHP versjon 2, kalt PHP/FI.
Denne inkluderte Form Interpreter
, som muliggjorde kommunikasjon mot SQL-databaser.
I midten av 1997. 50 tusen nettsteder brukte PHP.
Juni 1998. PHP 3 (PHP/FI 2) ble skrevet om fra bunnen av. Akronymet ble endret til «PHP: Hypertext Preprocessor». Raskere.
PHP opparbeidet seg etter hvert en stor brukerbase, og ble snart ansett som en standard installasjon på flere vevtjenerne på Internett.
Oktober 1998. 100 tusen nettsteder brukte PHP.
Oktober 1999. 1 million nettsteder brukte PHP.
Mai 2000. PHP 4, med Zend Engine ble lansert.
13.07.2004. PHP versjon 5. OO med inspirasjon fra C++ og Java. SimpleXML for enklere manipulering av XML.
2005. AJAX (Asynchronous JavaScript And XML) ble introdusert.
07.08.2008. PHP 4.4.9 markerte livssyklusslutt for PHP4.
PHP 5.1. Nytt grensesnitt for generisk kommunikasjon med databaser for å enklere støtte til forskjellige databasesystemer.
PHP 5.2. Bedre minnehåndtering forbedret ytelse og ressursbruk.
August 2014. PHP 5.6.
2016. PHP7. Bedre ytelse. Redusert minnebruk.
php.net Den offisielle PHP-manualen.
i = i + 1;