1. Inleiding
De meeste hosts hebben nog steeds php4 geïnstalleerd op hun servers. Daar is uiteraard niets mis mee, want de laatste versies doen goed hun werk en zijn heel stabiel. Echter, de opvolger php5 is eveneens al lange tijd stabiel. Er zal dus een moment komen waarop je host zal beslissen php5 te installeren.
Deze tutorial probeert jouw voor te bereiden op de migratie naar php5. Voor wie geen eigen server heeft, maar een shared hosting-abonnement heeft, is deze tutorial nuttig. Je webhost kan namelijk van vandaag op morgen beslissen te migreren. Je bent dus beter voorbereid!
top2. Waarom migreren naar php5?
Nog even uit de doeken doen waarom migreren naar php5 een goeie zaak kan zijn.
- Voor wie object geprogrammeerd schrijft is php5 een must. De OOP-mogelijkheden in php4 zijn namelijk lachwekkend.
- PHP5 is iets performanter (sneller).
Toch zijn webhosts erg terughoudend omtrent een migratie. Ze maken zich er soms vanaf met een goedkope uitdrukking als: 'We wachten tot het wat meer getest is'. Maar de waarheid is dat php5 al heel stabiel is.
Webhosts vrezen voornamelijk klachten van klanten, als hun scripts 'opeens' fouten genereren.
top3. Case studies
Bij wijze van voorbeeld wil ik hier even vermelden dat met php5 het database-systeem MySQL niet meer standaard wordt ingeschakeld. Maar als eindgebruiker moet je jouw hier (normaal gezien) geen zorgen om maken. Je webhost zal MySQL wel standaard terug inschakelen. Jouw taak zijn de scripts!
Goed nieuws: 99% van de php4-scripts werken feilloos in php5. De twee hoofproblemen bij de migratie hebben te maken met 'referenties' (voor wie aan OOP doet) en 'XML' (domxml wordt niet meer gebruikt, je moet nu libxml gebruiken).
Voor wie OOP programmeerd!
In php 4 wordt bij het aanroepen van een objectmethode worden de argumenten als waarden beschouwd. In php5 worden de argumenten als referenties geïnterpreteerd. Deze verbetering kan tot problemen leiden.
<?php
class Viper {
function bite( $animal ){
$animal->alive = false;
}
}
$aViper = new Viper(); //new instance
$aViper->bite($littleRabbit);
var_export($littleRabbit->alive);
Functies 'strrpos()' en 'strripos()' gewijzigd
De functies 'strrpos()' en 'strripos()' gebruiken in php5 de gehele meegegeven string als zoeknaald (en niet de aparte letters).
<?php
var_dump(strrpos('ABCDEF','DAF'));
Enkele nieuwe ini-settings
Ik ga de enkele nieuwe ini-settings hier niet opsommen. Problemen hieropvolgend zullen namelijk voor te wijten zijn aan de setting:
- register_globals = Off by default rather than On
- short_open_tag = Off by default rather than On
Deze setting is al ingevoerd in latere php4-versies. Maar toch vermoed ik dat veel problemen hieraan te wijten zullen zijn.
Andere
- De functie array-merge aanvaard in php5 enkel nog arrays als argument. Indien jouw php4-script nog een string of integer doorgeeft, dan krijg je een fatale error.
- Error-reporting van enkele (exotische) functies is overings gewijzigd.
- Klasse namen zijn case-sensitive geworden.
- Een object met geen properties wordt niet langer beschouwd als "empty".
- Classes moeten gedeclareerd worden voor gebruik.
top4. Scripts-pakketten
Grote scripts-pakketten zoals forums of template-engines bevatten massa's code. Ze zijn meestal ook geschreven volgens mbv object-structuren. Het is juist dit wat zo sterk is gewijzigd in php5.
Het is me ter ore gekomen dat forums zoals 'Invision Power Board(U) v1.3.1 Final' niet werken onder php5. Upgraden is niet altijd een mogelijkheid, daar latere versies van dit forumtype uitgegeven zijn onder een betalende licentie. Algemeen kan wel gesteld wordt dat de scripts met actieve development aangepast zijn (of in de heel nabije toekomst zullen zijn).
top5. Conclusies
Bij de migratie van een recente php4 versie naar php5 bestaat er een kans dat jouw scripts errors zullen genereren. Vooral dan voor wie aan OOP doet en/of heel uitgebreide scripts heeft. Gebruikers die slechts eenvoudige scripts gebruiken zullen waarschijnlijk niets merken van de migratie. (Voor deze groep van gebruikers is een migratie niet eigenlijk overigens ook niet zo nuttig.)
Dat php4-scripts bijna foutloos werken in php5 betekent echter niet dat het omgekeerde ook waar is. Wanneer je externe scripts wil implementeren (die je bijvoorbeeld op deze site vindt), kijk dan altijd voor welke php-versie die gemaakt is. Bovendien raad ik af grote externe scripts te implementeren die niet meer worden verder gedevelopped.
Suggesties tot vervollediging zullen ter harte genomen worden!