PHP best practices - configuratie
Zoals velen weten is PHP aanleren vrij gemakkelijk. Het vereist een lage programmeer drempel en PHP is ook nog een loosely typed taal, wat veel belemmeringen en problemen weghaalt voor beginners. Misschien is dat ook de reden dat er zoveel slechte PHP code te vinden is en dat PHP daarom niet gezien wordt als volwaardige enterprise taal dat toegepast kan worden voor kritieke toepassingen. Dit artikel wil daar verandering in brengen, door goede en pragmatische aanpakken te behandelen die gelden voor PHP. We gaan "PHP best practices" behandelen, dat bestaat uit twee delen. Als eerste willen we belangrijke PHP configuraties behandelen en in deel II programmeer best practices.
PHP configuraties
Gebruik geen short tags of ASP tags
In PHP hebben twee opening tags: <?php en <?. De eerste is altijd correct, bij de tweede hoeft dat niet altijd het geval te zijn. PHP heeft namelijk de volgende ini configuratie: short_open_tag. Staat deze op Off, dan werkt de short tag niet. Het gevolg is dat je PHP code niet wordt geparsed als PHP, maar je krijgt output als tekst en je code wordt blootgesteld. Daarnaast is het beter op <?php te gebruiken om verwarring te voorkomen met de opening tag van XML. Deze is namelijk ook <?. In je php.ini kun je de configuratie van short_open_tag veranderen.
-
;In php.ini
-
short_open_tag = On; // of op Off
Daarnaast kent PHP ook ASP tags, <% en %>, waarom weet niemand. Het is aangeraden deze niet te gebruiken en in je php.ini op Off te zetten.
-
;In php.ini
-
asp_tags = Off;
Magic quotes uit
In PHP6 zal magic_quotes niet meer ondersteund worden, zoals we daar eerder over schreven. Het is daarom aangeraden om je daarop voor te bereiden en magic_quotes_gpc op Off te zetten.
-
magic_quotes_gpc = Off
Register globals = Off
Dit is misschien een van de belangrijkste PHP configuratie. Zet register_globals = Off. Zo voorkom je XSS bugs en maak je je code ook veel leesbaarder doordat je direct kan zien waar je variabel vandaan komt. Daar hebben we immers super globals als $_GET en $_POST voor.
-
;In php.ini
-
register_globals = Off;
Ontwikkel met hoogste error reporting
Bij het ontwikkelen is aangeraden altijd met hoogste level van error reporting. Bij voorkeur met E_STRICT | E_ALL op PHP5 en E_ALL op PHP4. Zo voorkom je veel voorkomende fouten zoals vergeten variabelen declareren of niet geinitialiseerde variabelen gebruiken. Dit laatste is vaak het geval met super globals zoals $_GET en $_POST.
-
<?php
-
?>
Zodra je applicatie in productie omgeving komt, is het gewenst je level van error reporting zo laag mogelijk te zetten. Om niet in elke script je error reporting in te schakelen / uit te schakelen, kun je het beste deze in je php.ini veranderen. Hiervoor moet je de configuratie optie error_reporting veranderen. Meer informatie over E_STRICT kun je hier vinden.
-
; In php.ini
-
error_reporting = E_ALL | E_STRICT ; // PHP5
-
error_reporting = E_ALL ; // PHP4
Houd errors voor jezelf
Om te voorkomen dat bezoekers PHP foutmeldingen krijgen te zien, kun je deze onderdrukken. Alle errors worden niet weergegeven en dit leidt tot blanke pagina's bij fatale errors.
-
; In php.ini
-
display_errors = Off; // On
Tijdens het ontwikkelen is het aangeraden deze op optie On te zetten, in productie omgeving in Off. Wanneer je dat laatste doet, zorg er dan voor dat je al je errors logt met een errorlog zoals hieronder staat beschreven.
Houdt je errors in de gaten met logs
Bijhouden van opgetreden errors is cruciaal tijdens het ontwikkelen. Je moet onmiddelijk kunnen zien welke errors zijn opgetreden en wanneer. Dit kun je realiseren door een errorlog bij te houden. Deze kun je instellen in je php.ini door configuratie van log_errors in On te zetten. Voortaan worden errors opgeslagen in een errorlog bestand, maar je moet nog wel aangeven in welk errorlog. Dat doe je door in php.ini error_log te veranderen.
-
; In php.ini
-
log_errors = On
-
error_log = '/pad/naar/errorlog.log'
Er zijn nog meer opties!
Er zijn natuurlijk veel meer opties die je kunt veranderen zoals de session lifetime. Deze zijn allemaal verschillend per situatie. Bekijk de configuratie en pas deze aan per project.
Als laatste wil ik nog vermelden dat je in je scripts PHP settings kunt veranderen met ini_set(). Je kunt ook via Apache PHP settings veranderen, dus ook met .htaccess, zoals hier te lezen valt.
Volgende keer gaan we kijken naar PHP best practices voor het programmeren met PHP. Stay tuned!
Volg Scriptorama via RSS!
Reageer ook!
In PHP templates is het wel zo prettig om short open tags te kunnen gebruiken (daar zijn ze voor bedoeld lijkt me). Om ze ook met 'short_open_tag = Off' te kunnen toepassen bedacht Mike Naberezny een aardige truc. Met een stream wrapper wordt PHP code herschreven voorafgaand aan de interpretatie: http://www.mikenaberezny.com/archives/40.
Door Michel
op 05.29.06 @ 8:35 am | Permalink
Michel: Dat is een leuk idee zeg. Met wat caching kom je dan helemaal een heel eind.
Door Mathieu Kooiman
op 05.29.06 @ 9:28 am | Permalink
Mathieu: Een opcode cache als APC lijkt me zeker aan te bevelen, met name voor high traffic sites. Ik gebruik een simpele template class die een stream wrapper inschakelt als dat nodig is. Na wat snelle tests met verschillende PHP templates met en zonder rewrite lijkt het herschrijven per template gemiddeld zo'n 2 tot 8 milliseconden te kosten (120-150 var prints, 10-20 foreach loops).
Door Michel
op 05.29.06 @ 8:27 pm | Permalink
Michel: Bedoelde meer de herschreven template cachen, beetje zoals smarty dat doet..
Door Mathieu Kooiman
op 05.29.06 @ 8:54 pm | Permalink
Mathieu: Een soort compile cache? Heb ik nog niet onderzocht, zou voordelig kunnen zijn bij weinig wijzigingen in template-markup...
Door Michel
op 05.30.06 @ 12:39 pm | Permalink
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>