woensdag 17 september 2008

Server onafhankelijk PHP programmeren

Eddo Rotman heeft me meegenomen op een reis door de wondere wereld van serveronafhankelijk programmeren. Het voorbeeld dat hij aandraagt (PHP code die wel locaal draait maar dan niet op hosting provider X of Y) sprak mij erg aan.

Hij geeft gedurende de presentatie een 3voudige demo met een site op 2 apache configuraties en op IIS7 laten zien dus het was goed aanschouwelijk!

Constanten
PHP_EOL, DIRECTORY_SEPARATOR, PATH_SEPARATOR en PHP_INT_MAX zijn al in PHP ingebouwd.

Als voorbeeld, dus niet
fopen ('data\datafile.xml');
maar
fopen ( 'data' . DIRECTORY_SEPARATOR . 'datafile.xml');

Directives
Deze kunnen door verschillende distributies verschillen geïnterpreteerd worden.
Tags kunnen verschillen geïnterpreteerd worden, afhankelijk of asp_tags[off] staat bijvoorbeeld. Gebruik dus altijd volle tags , want die werkt altijd. Ook register_globals en magic_quotes_gps zouden uit kunnen staan, als veiligheidsmaatregel. Ook errors moet je zelf afvangen, voor als display_errors of error_reporting op off staat. max_execution_time, upload_max_filesize en include_path moet je ook rekening mee houden.

Gebruik dan ook een stricte php.ini bestand, gebaseerd op php.ini-recommended. Pas verder de PHP_INI_ALL en PHP_INI_USER runtime aan om te doen wat je wil.

Core Functions
Omdat PHP van origine op Linux is ontwikkeld kan er nog wat achtergebleven zijn wat anders werkt op Windows bijvoorbeeld. Denk hierbij aan setlocale(), chmod(), is_link() , proc_open() en shell_exec(). Voor tijd kun je bijvoorbeeld date_default_timezone_set("GMT"); doen.
Ook handig zijn sys_get_temp_dir() en tempnam() die je kan helpen runtime informatie op te halen over de server.
Er zouden ook extentions kunnen missen waardoor je bepaalde functies mist. Vang dit dan op met function_exists() en extention_loaded().

disable_functions en disable_classes kunnen in de directive staan, daarvoor ook is function_exists() te gebruiken, die dan false teruggeeft.

Frameworks
De meeste frameworks zullen over het algemeen betrouwbaar zijn qua cross-server coding. Gelukkig is het allemaal OS dus kun je kijken of dat klopt.. :)

Bootstrapping
Gebruik een bootstrap.php om op diverse zaken te controleren en die ventueel af te vangen.

Kort en goed: wees je bewust hiervan!

Geen opmerkingen: