Tutorials

Van 4 naar 5: Test je scripts

Nu de ondersteuning van php4 afloopt, is het tijd om ook de laatste scripts geschikt te maken voor php5

Pagina 1

In deze tutorial

Hoewel met php5 geprobeerd is om zoveel mogelijk functies van php4 te behouden, en de backward-compatibility zo goed mogelijk gewaarborgd is, kan niet elk script dat geschreven is voor php 4 direct bij versie 5 gebruikt worden. Op de volgende punten moet gelet worden:

1: Register Globals
2: Sleutelworden
3: Veranderde functies & includes
4: Ini settings
Pagina 2

Register Globals

Register Globals zijn 1 van de grootste fouten in de php architectuur. Hoewel het door deze functionaliteit makkelijker is om te beginnen met een script, heeft de veiligheid en overzichtelijkheid er alleen maar baat bij als deze op 'Off' staan. Gelukkig staan deze register globals bij veel php 4 hosts ook al uit.

Wat doen ze:
Register globals zorgt ervoor dat je variabelen die het script meekrijgt direct kunt benaderen, zonder te weten waar ze vandaan komen.
Bijvoorbeeld:
index.php?id=1

Als register_globals aanstaat, kun je in je script $id gebruiken om de waarde te bereiken. Zonder register_globals zul je gebruik moeten maken van $_GET['id'].

Hetzelfde geld voor POST waarden die vaak via een formulier worden doorgegeven:
Met register_globals volstaat: $id
Zonder register_globals: $_POST['id']

Wat is er slecht aan?
Door alleen $id te gebruiken, weet je niet waar de variabele vandaan komt. Komt het uit een formulier waar je het vanaf verwacht? ($_POST), of is het met de URL meegegeven. ($_GET).
Als je een variabele gebruikt zonder eerst een waarde toe te kennen, kan die variabele dankzij register_globals elke waarde hebben, ook schadelijke waarden.

Hoe zie ik of ik ze gebruik?
Lees je scripts door, en kijk voor elke variabele:
1: Of deze variabele een waarde krijgt.
2: Of deze variabele al eerder een waarde gekregen heeft.

Indien je op beide vragen NEE antwoord, kan het zijn dat die variabele beïnvloed wordt door register_globals.

Hoe los ik gebruik van register_globals op?
Ga voor alle variabelen waar beide vragen NEE opleverden kijken of je een waarde verwacht, en welke.
Verwacht je dat de variabele zijn inhoud krijgt uit een formulier? Gebruik dan $_POST['variabele_naam'].
Wordt de waarde meegegeven in de URL? Gebruik dan $_GET['variabele_naam'].
Hoort de variabele geen waarde te hebben? Ken deze een lege string ('') toe, of de waarde 'null'.

Zijn er nog hulpmiddelen?
Jazeker, error_reporting() op E_ALL zetten. Mocht je een variabele geen waarde toekennen voordat deze gebruikt wordt, dan zul je een waarschuwing te zien krijgen. Op die manier kun je eenvoudig elk fout gebruik opsporen.
Pagina 3

Sleutelwoorden

Sommige woorden hebben vanuit PHP al een betekenis. Ze zijn een onderdeel van de taal. Uiteraard mag je deze woorden zelf niet meer gebruiken. (Als variabele naam is wel mogelijk, maar geeft verwarring).

Om welke woorden gaat het?
Deze lijst geeft een overzicht van de woorden die je niet mag gebruiken.

Ik heb ze toch gebruikt, hoe kan ik dit oplossen?
Heb je de woorden uit bovenstaande lijst toch gebruikt als naam voor een Class, functie of variabele, hernoem deze dan. Let er wel op dat je dit door je hele script/project consequent doet.
Find&Replace van het programma waar je mee werkt kan hier bij helpen.
Pagina 4

Veranderde functies

Sommige functies veranderen hun gedrag in PHP5. Als je deze functies op de verkeerde manier gebruikt, zal je script dus niet meer werken.

Om welke functies gaat het?
De volgende lijst geeft verschillende incompatible functies aan. Controleer je script op het gebruik van deze functies, en pas het waar nodig aan.

Include & Require
Php4 doet niet moeilijk over het dubbel includen van een bestand. Php5 wel. Dit komt omdat verschillende functies dubbel aangemaakt kunnen zijn (de include wordt 2x uitgevoerd), hetgeen niet is toegestaan.
Gebruik in plaats van include() en require() dan ook liever include_once() en require_once().

Reacties

0
Nog geen reacties.