Guide:
Introduksjon til PHP
PHP er per idag det mest kjente, og muligens mest brukte, språket for dynamisk formatering av websider på internett. Det er et språk med mange muligheter, og er noe du bør kunne hvis du driver med seriøs webutvikling. Vi vil her prøve å gi en liten smakebit på språket.
Superglobale variabler
PHP har 9 "suberglobale variabler" som ble introdusert i PHP 4.1. Dette er tabeller som inneholder variabler fra forskjellige kilder. Disse er:
- $_SERVER
- $_ENV
- $_COOKIE
- $_GET
- $_POST
- $_FILES
- $_REQUEST
- $_SESSION
- $GLOBALS
$_GET og $_POST, med $_COOKIE og $_SESSION på god tredjeplass. Grunnen til at man har disse superglobale variablene er at en gjerne vil at utviklere skal kode sikrere. Før PHP 4.2 stod alltid register_globals på On i php.ini. Dette betyr at alle variabler som kommer fra skjemaer automatisk blir gjort tilgjengelig i skriptet ditt med navnet. Et eksempel på dette vil være koden
<form action="test.php" method="post">
<input name="test" type="text" />
<input type="submit" />
</form>
Hvis register_globals er satt til On vil det automatisk bli laget en variabel med navn $test i test.php. Dette er et potensielt enormt sikkerhetsproblem. Om en ved et uhell gjør som følger:
<form action="test.php?test=hei" method="post">
<input name="test" type="text" />
<input type="submit" />
</form>
vil en plutselig ha en variabel sendt via POST og en via GET som heter det samme. Hvilken skal en bruke? Det er dermed mulig å deklarere rekkefølgen som POST, GET og andre variabler blir lest. Den som leses sist brukes. Men vanligvis er det en grunn til at du har begge der. Du vil bruke dem selv om du var litt uheldig med navngiving. Og det er nettopp her de superglobale variablene kommer inn.
Tilgjengelighet
Alle de superglobale variablene er tilgjengelige hvor som helst i skriptet ditt. Ingenting kan hindre deg i å bruke en superglobal variabel.
I bruk
Sett at du har følgende kode:
<form action="test.php?test=hei" method="post">
<input name="test" type="text" />
<input type="submit" />
</form>
Du har her to konkurerende variabler med navn test. En som kommer inn via addresselinja (GET) og en som kommer inn via et postet skjema (POST). For å unngå all tvil om hvor disse mottas av skriptet legges de inn i tabellene til $_POST og $_GET med indeksen test. For da å f.eks. skrive ut begge kan du gjøre noe slikt:
<?php
echo "Post er {$_POST['test']}<br />";
echo "Get er {$_GET['test']}<br />";
echo "test er $test <br />";
?>
Dette skriptet kan du teste med register_globals til OFF her. Et eksempel med register_globals satt til ON kan sees her.
En oversikt og beskrivelse av alle de superglobale variablene kan du finne her.