<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FinalFrag.be &#187; Programmeren</title>
	<atom:link href="http://finalfrag.be/blog/category/programmeren/feed/" rel="self" type="application/rss+xml" />
	<link>http://finalfrag.be/blog</link>
	<description>De persoonlijke website van Massimo 'FinalFrag' Mertens</description>
	<lastBuildDate>Tue, 04 Aug 2009 07:08:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Data Type Usage Profiler&#160;(DTUP)</title>
		<link>http://finalfrag.be/blog/2009/06/data-type-usage-profiler-dtup/</link>
		<comments>http://finalfrag.be/blog/2009/06/data-type-usage-profiler-dtup/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 11:00:14 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[datamodel]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[statistieken]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=479</guid>
		<description><![CDATA[Als eerste artikel als gastschrijver op deze blog, wil ik graag een onderwerp aanhalen dat toch wel belangrijk is bij het beheren van een uitgebreide database, zoals bijvoorbeeld die van Spacetarion, namelijk het in de gaten houden van de bevolking van je database.
Het probleem
Bij het creeëren van je datamodel heb je wellicht rekening gehouden met [...]]]></description>
			<content:encoded><![CDATA[<p>Als eerste artikel als gastschrijver op deze blog, wil ik graag een onderwerp aanhalen dat toch wel belangrijk is bij het beheren van een uitgebreide database, zoals bijvoorbeeld die van <a target="_blank" href="http://www.spacetarion.com" title="Spacetarion" >Spacetarion</a>, namelijk het in de gaten houden van de bevolking van je database.</p>
<h3>Het probleem</h3>
<p>Bij het creeëren van je datamodel heb je wellicht rekening gehouden met het optimaal gebruiken van de datatypes die MySQL aanreikt. Een voorbeeld is het verschil tussen de tinyint en de smallint, een tinyint kan maximum waarde 255 bevatten en een smallint maximum 65 535 (wanneer ze worden ingesteld als unsigned). In een optimale database is er goed afgewogen welke datatypes er gebruikt worden voor welk veld. De unieke sleutel van je gebruikerstabel zal waarschijnlijk geen tinyint zijn, tenzij je maar 255 leden verwacht. Maar hoeveel leden verwachten je dan wel?<span id="more-479"></span> Omdat dit moeilijk in te schatten is, hebben <a target="_blank" href="http://www.twitter.com/MassimoMertens" title="Massimo" >Massimo</a> en <a target="_blank" href="http://www.twitter.com/geertsmichael" title="Michaël" >ikzelf</a> een tool geschreven die ons toont hoe ver de tabelvelden &#8216;bevolkt&#8217; zijn. Met de <strong>Data Type Usage Profiler (DTUP)</strong> kan een volledige database beheerd worden en kunnen de volgende datatypes gecontroleerd worden op hun bevolkingsgraad:</p>
<ul>
<li>alle integers (tinyint, smallint, mediumint, int en bigint)</li>
<li>alle teksten (tinytext, text, mediumtext en longtext)</li>
<li>varchar (met eigen ingestelde lengte)</li>
</ul>
<p>In de DTUP zijn er 4 niveaus of zones waarin een datatype zich kan bevinden. Elke zone heeft een kleuraanduiding die terugkomen in de tabelweergave van de databasetabel en in de grafische weergave. De mogelijke zones zijn:</p>
<ol>
<li>&gt; 90% &#8211; Rood</li>
<li>&gt; 75% &#8211; Licht rood</li>
<li>&gt; 50% &#8211; Oranje</li>
<li>&lt; 50% &#8211; Groen</li>
</ol>
<p>Als een datatype zich in de groene of oranje zone bevindt, is er nog geen reden tot het doorvoeren van database aanpassingen. Als echter de het bezettingspercentage &gt; 75% is, dan kan misschien geopteerd worden om een datatype hoger te nemen of de lengte aan te passen. De test op de datatypes uit de reeks van integer gaat kijken naar de hoogste waarde in de tabel. De varchar en text reeks gaat rekening houden met de lengte die het aantal karakters in beslag neemt.</p>
<p>DTUP is gemaakt met het vertrouwde <a target="_blank" href="http://www.codeigniter.com" title="CodeIgniter" >CodeIgniter</a> en <a target="_blank" href="http://www.smarty.net" title="Smarty" >Smarty</a>. De pagina die getoond wordt door de controller te bezoeken, bestaat uit 3 delen.</p>
<ol>
<li>Overzicht: geeft het aantal gevallen weer die voorkomen in elke zone op een pie chart;</li>
<li>Tabellenlijst: alle tabellen die voorkomen in de gebruikte database;</li>
<li>Databasetabellen: bevat een tabel die weergeeft hoeveel waarden er in gebruik zijn en hoeveel er maximum gebruikt mogen worden met als laatste kolom in de tabel de procentuele verhouding tussen aantal gebruikte en maximum te gebruiken. Een bar chart vervolledigt de tabel door op een grafische manier de verhouding nogmaals weer te geven. Zowel de tabel als de grafiek maken gebruik van de kleuren die bij de zones horen.</li>
</ol>
<h3>Waar jullie allemaal op wachten, screenshots</h3>
<p><img class="alignnone wp-smiley wp-image-513 left" src="http://finalfrag.be/blog/wp-content/uploads/2009/06/dtup_screen0.png" alt="dtup_screen0" width="300" height="200" /></p>
<p>Deze pie chart toont de beknopt overzicht van alle velden uit de database. Het grootste deel in de voorbeeld database is gezond (groen) en enkele velden bevinden zich in de kritische zone. De velden die vooral in die rode zone liggen zijn velden waarvan we op voorhand de maximale lengte kennen, bijvoorbeeld omdat we een MD5 hash gebruiken.</p>
<p><img class="alignnone wp-smiley wp-image-515" src="http://finalfrag.be/blog/wp-content/uploads/2009/06/dtup_screen2.png" alt="dtup" width="526" height="268" /></p>
<p>Bovenstaande schermafbeelding geeft duidelijk weer waar dit artikel en DTUP eigenlijk om draait. Alle velden van een bepaalde tabel worden getoond met informatie zoals aantal gebruikt, maximum te gebruiken en de procentuele verhouding. Ook het datatype is weergegeven zodat er van hieruit beslist kan worden welk datatype misschien de opvolger kan worden van het huidige, te kleine, datatype.</p>
<p>Bovenstaand voorbeeld kan een deel zijn van een gebruikerstabel. Zoals al gezegd, wisten we op voorhand dat het wachtwoord 32 tekens lang ging zijn, dus dat rode veld is geen verrassing. Het veld waarin de gebruikersnaam wordt bijgehouden is ook volledig gebruikt. Er heeft zich namelijk een gebruiker geregistreerd met een gebruikersnaam die net 32 karakters is. Nu is de vraag, houden we de beperking op die 32 tekens, of breiden we het veld uit? Dat hangt natuurlijk af van het doel. In ons voorbeeld stellen we dat er van hogerhand beslist is dat een gebruikersnaam nooit langer mag zijn dan 32 tekens.</p>
<p>Dit voorbeeldje ging over een varchar veld. Het is een heel ander verhaal wanneer het gaat om een unieke sleutel die automatisch verhoogd wordt met AUTO_INCREMENT.</p>
<p><img class="alignnone wp-smiley wp-image-515" src="http://finalfrag.be/blog/wp-content/uploads/2009/06/dtup1.png" alt="dtup" width="526" /></p>
<p>In onze instellingen tabel is er gekozen om met een tinyint te werken als unieke sleutel die maximum 255 records toelaat. Zoals te zien is in bovenstaande figuur is ondertussen waarde 240 bereikt. Als er nog meer instellingen bijkomen, is het misschien niet onbelangrijk om op dit moment het datatype tinyint op te krikken naar een smallint die tot waarde 65 535 aankan. Voor deze tabel is het natuurlijk geen probleem als de unieke sleutels op zijn. Voor een gebruikerstabel, waarvan de ID zichzelf verhoogt, kan dit veel kritischer zijn omdat, eenmaal de grens bereikt is, er geen leden meer kunnen registreren en dat wil je natuurlijk niet.</p>
<h3>Voila</h3>
<p>Ik hoop dat ik jullie een nieuwe kijk heb kunnen geven op de manier waarop Massimo en ikzelf <a target="_blank" href="http://www.twitter.com/Spacetarion" title="Spacetarion" >Spacetarion</a> onderhouden.</p>
<p>Dit zelfgeschreven profiler tooltje met behulp van CodeIgniter, Smarty en een MySQL database laat ons toe nauwgezet de bevolking van onze datatypes te monitoren. Deze pagina is toegankelijk vanuit het beheerpaneel van Spacetarion dat opgebouwd is met <a target="_blank" href="http://www.extjs.com" title="ExtJS" >ExtJS</a>. Binnenkort zullen onze trouwe volgers ook een blik kunnen werpen op de adminkant van Spacetarion. Zo weten jullie des te meer waar wij mee bezig zijn. Met dat paneel en deze DTUP kunnen wij ons uitgebreid systeem opvolgen om het zo stabiel mogelijk te presenteren aan de spelers, hopelijk aan jou dus.</p>
<h3>Verbeteringen? Altijd mogelijk&#8230;</h3>
<p>Mogelijke verbeteringen zijn er altijd, zo zou ik nog kunnen voorzien dat het datatype vanuit de DTUP gewijzigd kan worden. Een tweede verbetering die ik nog zou kunnen doorvoeren, is alle autonummeringvelden als speciaal veld behandelen waarbij een verhouding van &gt; 75% echt kritiek is. In het geval van kritieke autonumeringvelden kan ik via een cronjob mezelf via mail op de hoogte houden en direct ingrijpen. Een stap verder is dat het systeem zichzelf kan verbeteren door automatisch zijn datatype te verhogen en me via mail op de hoogte stellen dat deze actie ondernomen werd.</p>
<p>De DTUP staat nog maar in z&#8217;n kinderschoenen en kan dus nog verder uitgebreid worden. Misschien heb jij wel een suggestie die DTUP kan omvormen tot een mooi product dat voor iedereen te downloaden zal zijn in de toekomst? Laat het ons zeker weten!</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/06/data-type-usage-profiler-dtup/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Smarty integreren in&#160;CodeIgniter</title>
		<link>http://finalfrag.be/blog/2009/06/smarty-integreren-in-codeigniter/</link>
		<comments>http://finalfrag.be/blog/2009/06/smarty-integreren-in-codeigniter/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 11:00:51 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=381</guid>
		<description><![CDATA[ Iedereen die iets of wat op een professionele manier bezig is met het maken van websites, heeft al wel van Smarty gehoord. Smarty is een tool die je toelaat om PHP code volledig te scheiden van de manier waarop de site wordt getoond. Deze blogpost dient echter niet om Smarty toe te lichten, want [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://finalfrag.be/blog/wp-content/uploads/2009/06/smarty-logo-orange.gif" alt="Smarty logo" style="margin-left: 10px !important" class="alignright wp-smiley wp-image-417" /> Iedereen die iets of wat op een professionele manier bezig is met het maken van websites, heeft al wel van <a target="_blank" href="http://www.smarty.net"  title="Smarty">Smarty</a> gehoord. Smarty is een tool die je toelaat om PHP code volledig te scheiden van de manier waarop de site wordt getoond. Deze blogpost dient echter niet om Smarty toe te lichten, want daar vind je genoeg informatie over op het internet. Wat deze blogpost wel zal doen, is uitleggen hoe je Smarty kan integreren in <a target="_blank" href="http://www.codeigniter.com"  title="CodeIgniter">CodeIgniter</a>, want daarover is bijzonder weinig (goede) informatie te vinden.<span id="more-381"></span></p>
<h3>Waarom zit het niet standaard in CodeIgniter?</h3>
<p>Daar zijn 2 goede redenen voor. De eerste is de meest voor de hand liggende. CodeIgniter heeft namelijk zijn eigen manier om om te gaan met templates. In CodeIgniter termen noemen deze &#8216;view files&#8217;. Telkens wanneer je het volgende doet, roep je dus eigenlijk een template aan.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Een andere mogelijke reden waarom Smarty niet standaard bij CodeIgniter wordt geleverd is omdat er meerdere mogelijkheden zijn. Smarty is wel de bekendste, maar zeker niet de enige template engine. Een template engine biedt natuurlijk vele voordelen waaronder caching, afscherming van de PHP code voor designers, handige tags, etc.</p>
<h3>Waar zetten we Smarty?</h3>
<p><img src="http://finalfrag.be/blog/wp-content/uploads/2009/06/smarty_ci_folders.png" alt="Smarty locatie" class="wp-smiley alignleft size-full wp-image-427" style="margin-right: 5px" /> De eerste stap is natuurlijk het uploaden van de Smarty bestanden naar je webhost. De beste locatie om deze te plaatsen vind ik persoonlijk de libraries map onder system/application/. Dit enerzijds omdat Smarty een library is die je zal gebruiken en anderszijds omdat ik al mijn eigen uitbreidingen in die map plaats. Zo blijven alle zelfgemaakte bestanden mooi bij elkaar en kan ik beter het overzicht behouden. Mijn system/application/libraries map zie je links op de afbeelding.</p>
<p>Zoals je ziet heb ik de originele naam van de Smarty map behouden. Hierdoor kan ik makkelijk zien welke versie ik heb wanneer er updates uitkomen. Deze naam mag je uiteraard zelf kiezen, maar ik zou de bestanden wel in een map houden, ook weer om het overzicht te behouden.</p>
<p>Noot: wanneer je werkt met meerdere applicaties op één CodeIgniter installatie, kan het handig zijn om deze map in system/libraries te plaatsen. Op die manier hoef je maar één keer Smarty te uploaden in plaats van één keer voor elke applicatie.</p>
<h3>De Smarty klasse</h3>
<p>Het is uiteraard niet voldoende om gewoon de map te uploaden naar je server. Het Smarty object moet bereikbaar zijn vanuit de CodeIgniter klassen (meestal vanuit een controller). Een klasse toevoegen aan het CodeIgniter framework is helemaal niet moeilijk, eerst moet je de klasse uiteraard schrijven en deze daarna gewoon automatisch inladen met behulp van autoload.php.</p>
<p>Zoals je uit de onderstaande code kan afleiden, heb ik deze klasse de naam &#8216;S&#8217; gegeven. Ik heb gekozen om &#8216;S&#8217; als naam te nemen in plaats van &#8216;MY_Smarty&#8217; om de simpele reden dat &#8216;S&#8217; korter is dan &#8216;MY_Smarty&#8217; (en omdat &#8216;Smarty&#8217; al gereseveerd is door &#8230; jawel &#8230; Smarty zelf). Wanneer ik nu een template aanroep hoef ik dus niet altijd</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">my_smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>te gebruiken, maar simpelweg</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">s</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>wat in de grotere applicaties toch al snel heel wat typwerk minder is. De hardcore Smarty fans zien ook meteen dat ik de extensie .tpl kan weglaten bij het aanroepen van een template. Deze &#8216;functionaliteit&#8217; is ook voorzien in de S klasse.</p>
<p>Zoals je op de afbeelding van mijn bestandsstructuur al kon zien, heb ik gewoon een bestandje S.php aangemaakt in de system/application/libraries/ map. De inhoud van dit bestand is als volgt:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">&quot;Smarty-2.6.22/Smarty.class.php&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> S <span style="color: #000000; font-weight: bold;">extends</span> Smarty <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> S<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Smarty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Het config object van CodeIgniter ophalen</span>
        <span style="color: #000088;">$config</span> <span style="color: #339933;">=&amp;</span> get_config<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Aan de hand van de config de mappen die Smarty zal gebruiken instellen</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">template_dir</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'smarty_template_dir'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'smarty_template_dir'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> BASEPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'application/views/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">compile_dir</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'smarty_compile_dir'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'compile_dir'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> BASEPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'cache/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// base_url is een handige functie, die willen we altijd bij ons hebben</span>
        <span style="color: #666666; font-style: italic;">// In een Smarty template kunnen we dan gewoon {$base_url} gebruiken</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'base_url'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'base_url'</span><span style="color: #339933;">,</span> base_url<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">clear_all_cache</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> display<span style="color: #009900;">&#40;</span><span style="color: #000088;">$resource_name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// .tpl toevoegen indien dit niet in het gevraagde bestand staat</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resource_name</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'.tpl'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$resource_name</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'.tpl'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Hier kan je allerlei code toevoegen die moet gebeuren vlak voor het tonen van de pagina</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// De pagina tonen</span>
        <span style="color: #b1b100;">return</span> parent<span style="color: #339933;">::</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resource_name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Let op: de compile map die je aangeeft moet schrijfbaar zijn door de webserver. Ik gebruik altijd 777, maar misschien is minder ook al goed. Kan iemand dat duidelijk maken?</p>
<p>De S klasse moet natuurlijk in het CodeIgniter framework worden ingeladen voordat je deze kan gebruiken in een controller. Hiervoor open je gewoon system/application/config/autoload.php en voeg je bij het &#8216;libraries&#8217; onderdeel de &#8216;S&#8217; klasse toe als volgt:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$autoload</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'libraries'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'s'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Wat met $smarty.session?</h3>
<p>CodeIgniter maakt, zoals je misschien weet, geen gebruik van de globale $_SESSION variabele van PHP. Om gegevens bij te houden, maakt CI gebruik van cookies en/of een database (kan je instellen in het config bestand). Dit brengt echter wel een minpunt met zich mee in dit geval. Smarty kan namelijk de $_SESSION variabele aanspreken met behulp van $smarty.session. Maar aangezien CI hier geen gebruik van maakt, is dit niet mogelijk <img src='http://finalfrag.be/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Maar voor elk probleem is natuurlijk een oplossing. Ik heb in de display functie van de S klasse een stukje code geschreven dat alle gegevens uit $this->session (de plaats waar CI alle sessiegegevens opslaat) haalt en ze doorgeeft aan Smarty. Dit is makkelijk te doen met een foreach, maar dat laat ik als uitstekende oefening voor thuis.</p>
<h3>Een klein voorbeeldje</h3>
<p>system/application/controllers/Voorbeeld.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> Voorbeeld <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$tekst</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'hello world...'</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">s</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tekst'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tekst</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">s</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'voorbeeld'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>system/application/views/voorbeeld.tpl</p>

<div class="wp_syntax"><div class="code"><pre class="smarty" style="font-family:monospace;">Dit is de doorgegeven tekst:<span style="color: #009000;">&lt;br /&gt;</span>
<span style="color: #009000;">&lt;br /&gt;</span>
<span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$tekst</span><span style="color: #D36900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/06/smarty-integreren-in-codeigniter/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Automatisch elke dag een&#160;backup</title>
		<link>http://finalfrag.be/blog/2009/06/automatisch-elke-dag-een-backup/</link>
		<comments>http://finalfrag.be/blog/2009/06/automatisch-elke-dag-een-backup/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 15:25:54 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=232</guid>
		<description><![CDATA[Backups zijn vandaag belangrijker dan ooit. Je bestanden staan waarschijnlijk wel ergens op een server die dagelijks backups neemt in jouw plaats. Je denkt dan nogal snel: &#8216;als er iets fout gaat, hebben ze toch een backup&#8217;. Toch blijft het altijd een heel gedoe wanneer je wil beroep doen op deze backups.
Wanneer je aan een [...]]]></description>
			<content:encoded><![CDATA[<p>Backups zijn vandaag belangrijker dan ooit. Je bestanden staan waarschijnlijk wel ergens op een server die dagelijks backups neemt in jouw plaats. Je denkt dan nogal snel: &#8216;als er iets fout gaat, hebben ze toch een backup&#8217;. Toch blijft het altijd een heel gedoe wanneer je wil beroep doen op deze backups.</p>
<p>Wanneer je aan een klein projectje werkt, is het makkelijk om zelf even elke dag na het programmeren snel even alle bestanden af te halen. Wanneer je echter aan grote projecten werkt, zoals ik nu aan <a target="_blank" href="http://www.spacetarion.com"  title="Spacetarion">Spacetarion</a>, kan het afhalen van alle bestanden al snel 5 tot 10 minuten duren. Daarom had ik nood aan een automatische oplossing.<span id="more-232"></span> Omdat ik deze best wel handig in gebruik vind, deel ik mijn opgedane kennis graag met jullie. Als fervente <a target="_blank" href="http://www.codeigniter.com"  title="CodeIgniter">CodeIgniter</a> fan, heb ik dit natuurlijk met behulp van dit framework gedaan.</p>
<h3>Wat heb ik allemaal nodig?</h3>
<p>Er zijn 2 dingen die nodig zijn om dit werkend te krijgen. Eerst en vooral moet je toegang hebben tot cronjobs. Dit hangt af van je webhost. De meeste fatsoenlijke hosts, zoals <a target="_blank" href="http://www.futureweb.be"  title="Futureweb">Futureweb</a> en <a target="_blank" href="http://www.combell.com"  title="Combell">Combell</a>, ondersteunen cronjobs. De cronjob zorgt ervoor dat het script automatisch elke 24 uur wordt uitgevoerd. Eigenlijk zal het script dus ook werken zonder cronjobs, maar dan moet je er zelf aan denken elke dag de controller een bezoekje te brengen.</p>
<p>Een andere voorwaarde is dat je je CodeIgniter system map niet buiten de web root hebt staan. <a href="http://finalfrag.be/blog/2009/06/ci-installeren-buiten-de-www-map/"  title="CI installeren buiten de www map">CI buiten de web root installeren</a> is veiliger omdat mensen geen toegang kunnen krijgen tot de bestanden in de installatie. Het nadeel is echter dat ook de &#8216;gebruiker&#8217; die PHP uitvoert (Apache) ook geen rechten heeft om bestanden buiten de root te lezen. Aangezien het script dat we gaan gebruiken van elk bestand de inhoud moet kunnen lezen, zal dit enkel werken indien CI volledig in de web root staat. Meestal is deze root de map &#8216;www&#8217; of &#8216;public_html&#8217;. Het kan zijn dat je bij jouw host enkel toegang hebt tot de web root. Indien je nergens een map &#8216;www&#8217; of &#8216;public_html&#8217; terugvind, is dit het geval en kan je het script gebruiken.</p>
<p>Noot: wanneer je je system map wel in de www map hebt staan, kan je deze nog altijd afschermen van het publiek door een klein .htaccess bestand in de system map te zetten. De inhoud van dit .htaccess bestand moet dan het volgende zijn:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">order allow,deny
deny from any</pre></div></div>

<p>Op die manier zal iedereen (behalve de Apache gebruiker) een 403 Forbidden error krijgen. Zo zijn je bestanden toch beschermd (wel minder goed dan gewoon alles buiten de www map te zetten natuurlijk) en kan je toch dit backup script gebruiken.</p>
<h3>De controller</h3>
<p>We maken in de map system/application/controllers een nieuw bestand aan met als naam backup.php. We voorzien in dit bestand 2 functies: 1 functie die elke dag een backup zal nemen en 1 functie die elke maandag (dit wordt bepaald in de cronjob) de laatste backup per e-mail zal versturen. De inhoud van Backup.php is als volgt:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> Backup <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'PASSWORD'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'your_password'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'MAX_BACKUPS'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">14</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'BACKUP_DIR'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'/welke/map/je/wil/backuppen/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #000088;">$password</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$password</span> <span style="color: #339933;">!==</span> PASSWORD<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Get out'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'zip'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Bestanden backuppen</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">zip</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">read_dir</span><span style="color: #009900;">&#40;</span>BACKUP_DIR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Database backuppen</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dbutil</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$backup</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dbutil</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">backup</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'format'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'txt'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">zip</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add_data</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'database.txt'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$backup</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Het zip bestand opslaan</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">zip</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">archive</span><span style="color: #009900;">&#40;</span>BACKUP_DIR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'backups/'</span> <span style="color: #339933;">.</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'YmdHis'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' - '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">zip</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_file_num</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' files.zip'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Overbodige backups verwijderen</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">helper</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'file'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$files</span> <span style="color: #339933;">=</span> get_filenames<span style="color: #009900;">&#40;</span>BACKUP_DIR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'backups/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Controleren of er al backups zijn</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #990000;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #000088;">$delete</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> MAX_BACKUPS<span style="color: #339933;">;</span>
			<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$delete</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				<span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span>BACKUP_DIR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'backups/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$files</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> mail_backup<span style="color: #009900;">&#40;</span><span style="color: #000088;">$password</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$password</span> <span style="color: #339933;">!==</span> PASSWORD<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Get out'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">helper</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'file'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$files</span> <span style="color: #339933;">=</span> get_filenames<span style="color: #009900;">&#40;</span>BACKUP_DIR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'backups/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Controleren of er al backups zijn</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #990000;">rsort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// De laatste backup mailen</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">from</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'no-reply@example.com'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Backup system'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">to</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'you@example.com'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">subject</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Your backup'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">message</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Your backup'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">attach</span><span style="color: #009900;">&#40;</span>BACKUP_DIR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'backups/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$files</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">send</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>De cronjob</h3>
<p>De cronjob zal ervoor zorgen dat de Backup controller elke 24 uur opgeroepen wordt. Deze controller zal dan een backup nemen en het bestand opslaan op de server. De manier om cronjobs in te stellen is bij elke host meestal anders. Ik kan dus niet stap voor stap uitleggen hoe je dit moet doen. Het commando dat moet worden uitgevoerd is echter altijd hetzelfde, en ziet er als volgt uit:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="plain" style="font-family:monospace;">0 0 * * * wget http://www.jouwsite.be/backup/index/your_password/ -O /dev/null</pre></td></tr></table></div>

<p>Deze cronjob zal elke dag om 0:00 worden uitgevoerd. Dit tijdstip kan je zelf aanpassen. De structuur van de argumenten is &#8216;minuut&#8217;, &#8216;uur&#8217;, &#8216;dag van de maand&#8217;, &#8216;maand&#8217;, &#8216;dag van de week&#8217;. Indien je 12 0 * * 1 gebruikt, zal er elke maandag om 12 uur &#8217;s middags een backup worden genomen.</p>
<p>Je moet natuurlijk ook de &#8216;jouwsite.be&#8217; vervangen door het domein waarop jouw site staat. De &#8216;your_password&#8217; op het einde is het wachtwoord dat je hebt gedefiniëerd in de controller. De &#8216;-O /dev/null&#8217; zorgt ervoor dat de cronjob geen logfile zal schrijven naar de website. Indien je dit weglaat zal er elke keer de cronjob wordt uitgevoerd een bestand in de root van je website bijkomen. Na verloop van tijd kan dit aantal flink oplopen. Het is dus een goed idee om deze logfiles weg te laten.</p>
<p>Je kan ook een aparte cronjob aanmaken om de laatste backup per e-mail te ontvangen. Persoonlijk neem ik elke dag een backup, en krijg ik elke maandag om 6 uur &#8217;s morgens graag de laatste backup in mijn inbox. Deze cronjob ziet er als volgt uit:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">0 6 * * 1 wget http://www.jouwsite.be/backup/mail_backup/your_password -O /dev/null</pre></div></div>

<h3>Het resultaat</h3>
<p>Het resultaat is best wel duidelijk. Je webserver zal nu elke dag een backup nemen van alle bestanden EN de volledige database. Ook zal je elke maandag een e-mail krijgen waarin de laatst genomen backup zal zitten. Ook zullen op de server maximaal 14 backups worden bijhouden, zo heb je iets of wat controle over hoeveel plaats de verschillende backups innemen.</p>
<p>Zoals je misschien al gemerkt hebt, zijn alle werken op deze website gelicenseerd onder een Creative Commons licentie. Wanneer je mijn werk wil gebruiken kan je dat vrij doen, zolang je mijn naam bij het werk zet en het niet dient voor commerciële doeleinden. Wanneer je mijn naam liever niet bij het werk wil zetten of de scripts toch wil gebruiken voor commerciële doeleinden, dien je eerst een schriftelijke toestemming aan mij te vragen.</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/06/automatisch-elke-dag-een-backup/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CI installeren buiten de www&#160;map</title>
		<link>http://finalfrag.be/blog/2009/06/ci-installeren-buiten-de-www-map/</link>
		<comments>http://finalfrag.be/blog/2009/06/ci-installeren-buiten-de-www-map/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 09:46:59 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=227</guid>
		<description><![CDATA[Wanneer je een website bouwt, wil je dat deze 100% veilig is, zeker wanneer het gaat om een webapplicatie. Je wil bezoekers zo veel mogelijk mogelijkheden bieden, maar toch de gevoelige bestanden goed afschermen. Eén van de stappen die je kan ondernemen om bestanden af te schermen van kwaadaardige bezoekers, is door ze buiten de [...]]]></description>
			<content:encoded><![CDATA[<p>Wanneer je een website bouwt, wil je dat deze 100% veilig is, zeker wanneer het gaat om een webapplicatie. Je wil bezoekers zo veel mogelijk mogelijkheden bieden, maar toch de gevoelige bestanden goed afschermen. Eén van de stappen die je kan ondernemen om bestanden af te schermen van kwaadaardige bezoekers, is door ze buiten de www map te plaatsen op de server. Hierdoor kunnen bezoekers deze niet rechtstreeks aanspreken, maar kan je applicatie er wel aan. Ik heb enkele applicaties online staan waarvan slechts enkele bestanden in de www map staan.<span id="more-227"></span></p>
<h3>Is het mogelijk voor mij?</h3>
<p>Er is één grote voorwaarde opdat je CodeIgniter kan installeren buiten deze map. De host die je je webruimte aanbied, moet jouw de juiste rechten geven zodat je bestanden kan uploaden boven de www map. Bij mijn vorige host, <a target="_blank" href="http://www.one.com"  title="One.com">One.com</a>, kon dit niet. Daarom ben ik ongeveer een jaar geleden verhuist naar een host die dat wel ondersteunt, <a target="_blank" href="http://www.futureweb.be"  title="Futureweb.be">Futureweb.be</a>. De www map waarover ik steeds spreek, kan ook onder een andere naam voorkomen, bijvoorbeeld public_html of wwwroot.</p>
<h3>CodeIgniter installeren</h3>
<p>Het installeren van CodeIgniter is super makkelijk. Het enige dat je moet doen is de laatste versie van het framework downloaden van <a target="_blank" href="http://www.codeigniter.com"  title="codeigniter.com">codeigniter.com</a> en het pakket uitpakken. Wanneer dat gebeurd is kan je gewoon de system map en het index.php bestand uploaden naar je webhost.</p>
<p>Normaal gezien upload je deze bestanden naar één en dezelfde map op de server, maar indien je CodeIgniter buiten de www map wil installeren, is dit lichtjes anders. Het index.php moet je uploaden naar de www map, of een submap hiervan. Het komt er op neer dat het index.php bestand bereikbaar moet zijn voor bezoekers. Dit is het punt vanwaar de bezoekers de applicatie gebruiken, de voordeur zeg maar.</p>
<p>De system map moet je buiten de www map plaatsen. Bezoekers krijgen toegang tot deze bestanden via het index.php bestand, maar kunnen niet rechtstreeks bestanden in de system map aanroepen. Om even terug te komen op het huis waarvan ik de voordeur al vernoemde, mensen kunnen via de voordeur naar de keuken, maar kunnen niet meteen de koelkast komen plunderen.</p>
<p>Je kan best ook de naam van de system map wijzigen. Dit maakt de applicatie niet veiliger (want bezoekers kunnen er toch niet aan), maar zorgt er wel voor dat je zelf de structuur beter kan zien. Ik geef de system map altijd de naam van de applicatie die ik zal maken, maar je verzint wel iets creatief. Zo heb ik de system map van <a target="_blank" href="http://www.degrillmobiel.be"  title="De Grill-Mobiel">degrillmobiel.be</a> simpelweg &#8216;grill&#8217; genoemd.</p>
<h3>Het index.php bestand aanpassen</h3>
<p>Wanneer je nu echter een bezoekje brengt aan het index.php bestand met je favoriete browser, zal het geheel niet werken. Dit komt omdat de verwijzingen in het bestand nog niet juist zijn. In het index.php bestand staat de volgende lijn code (regel 26):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$system_folder</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;system&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Dit is de locatie waar CodeIgniter gaat zoeken naar alle bestanden. Wanneer index.php bestand staat op www.host.com/submap/index.php zal CodeIgniter zoeken naar www.host.com/submap/system/ en deze niet vinden. Wanneer je het index.php bestand los in de www map hebt staan, moet je de regel als volgt aanpassen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$system_folder</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;../system&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Per submap moet je vooraan nog een extra &#8216;../&#8217; toevoegen. Indien je index.php bestand dus te bereiken is op www.host.com/submap/index.php moet de $system_folder variabele &#8216;../../system&#8217; zijn. Indien je de naam van de system map hebt gewijzigd, moet je hier natuurlijk ook rekening mee houden.</p>
<p>Enkele regels lager in het bestand staat nog een andere variabele, namelijk $application_folder. Je kan, net als de system map, ook de application map van naam veranderen. Dit is handig wanneer je meerdere applicaties op één CodeIgniter installatie wil draaien, maar daar kom ik in een latere blogpost nog uitgebreid op terug.</p>
<h3>De gebruikelijke instellingen</h3>
<p>Na het uploaden van CodeIgniter moet je natuurlijk nog wel de nodige instellingen aanpassen alvorens je een werkende website hebt. Het bestand dat je zeker moet aanpassen is config.php, te vinden in de map system/application/config/. In dit bestand moet je de volgende regel aanpassen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'base_url'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://example.com/&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>In het voorbeeld waarbij onze site op www.host.com/submap/index.php staat, moet de regel als volgt veranderd worden:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'base_url'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://www.host.com/submap/&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Werkt het?</h3>
<p>Wanneer je nu een bezoekje brengt aan www.host.com/submap/ zou je de standaard pagina van CodeIgniter moeten te zien krijgen.</p>
<p>Voila, je hebt met succes CodeIgniter buiten de www map geïnstalleerd en afgeschermd van al die kwaadaardige gebruikers.</p>
<p>Er zijn nog enkele punten die beter kunnen. Zo kan je bijvoorbeeld met behulp van een .htaccess bestand makkelijk de /index.php/ uit de url halen. Dit ziet er niet alleen mooier uit, maar is ook beter vanuit een SEO (Search Engine Optimalisation) standpunt. In een latere blogpost kom ik hier zeker nog op terug.</p>
<p>Indien je na deze (heel uitgebreide) blogpost nog met vragen of problemen zit hoor ik het graag.</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/06/ci-installeren-buiten-de-www-map/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Een e-mail adres beter&#160;controleren</title>
		<link>http://finalfrag.be/blog/2009/05/een-e-mail-adres-beter-controleren/</link>
		<comments>http://finalfrag.be/blog/2009/05/een-e-mail-adres-beter-controleren/#comments</comments>
		<pubDate>Mon, 25 May 2009 14:01:02 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=225</guid>
		<description><![CDATA[Voor sommige projecten is het nodig dat je over een geldig e-mail adres van een gebruiker beschikt. CodeIgniter, ondertussen ieders favoriete framework, biedt echter alleen een controle aan op het formaat van het e-mail adres. Deze controle beperkt zich tot &#8216;zit er een @-teken in?&#8217; en &#8216;zit er een punt in na het @-teken?&#8217;. Voor [...]]]></description>
			<content:encoded><![CDATA[<p>Voor sommige projecten is het nodig dat je over een geldig e-mail adres van een gebruiker beschikt. CodeIgniter, ondertussen ieders favoriete framework, biedt echter alleen een controle aan op het formaat van het e-mail adres. Deze controle beperkt zich tot &#8216;zit er een @-teken in?&#8217; en &#8216;zit er een punt in na het @-teken?&#8217;. Voor de meeste websites is dit natuurlijk meer dan goed genoeg, maar soms moet je toch iets meer zekerheid hebben.<span id="more-225"></span></p>
<h3>Wegwerp-e-mail adressen</h3>
<p>Er zijn op het internet heel wat websites te vinden die e-mail adressen aanbieden die maar een tijdje blijven bestaan. Sommige onder jullie zullen misschien <a target="_blank" href="http://www.mailinator.com"  title="mailinator.com">mailinator.com</a> wel kennen. Op die website kan je elke mailbox raadplegen die onder dat domein valt. Wanneer je bijvoorbeeld op een website een registratieformulier moet invullen, kan je simpelweg piet@mailinator.com gebruiken. Achteraf ga je dan naar mailinator.com en raadpleeg je de mailbox van piet en klaar is kees&#8230; of piet in dit geval.</p>
<h3>De uitbreiding</h3>
<p>De oplossing is uiteraard een uitbreiding op de Email helper van CodeIgniter. We voegen een extra functie toe (is_valid_email) die controleert of het ingevoerde e-mail adres niet voorkomt in een lijst van geblokkeerde hosts. Uiteraard gebruiken we ook nog de standaard functie van CodeIgniter om het formaat te controleren.</p>
<p>Het enige dat je moet doen is in de system/application/helpers map een nieuw bestandje aan te maken met als naam MY_email_helper.php en de volgende code er in plaatsen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> is_valid_email<span style="color: #009900;">&#40;</span><span style="color: #000088;">$address</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Blocked hosts</span>
    <span style="color: #000088;">$illegalHosts</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'10x9.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'blockfilter.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'dandikmail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'deadaddress.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'deadfake.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'despam.it'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'disposeamail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'dodgit.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'dodgeit.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'emailias.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'gishpuppy.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'greensloth.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'guerrillamail.org'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'haltospam.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'hidzz.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'incognitomail.net'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'jetable.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'kasmail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'litedrop.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'mailcatch.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'maileater.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'mailexpire.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'mailinator.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'mailnull.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'mailzilla.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'makemoneytradingstocks.org'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'mint.us.to'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'mt2009.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'mytempemail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'mytrashmail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'nospam4.us'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'nospamfor.us'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'pookmail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'pourri.fr'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'shieldemail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'shortmail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'signed-first-edition.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'skeefmail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'slopsbox.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'sneakemail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spam.su'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spambox.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spambox.us'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamcero.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamcorptastic.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamex.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamfree24.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamfree24.eu'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamfree24.de'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamfree24.info'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spemfree24.net'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamfree24.org'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamgourmet.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamhole.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spamla.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spammotel.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'spam.la'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'tempemail.net'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'tempinbox.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'trashymail.com'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'wh4f.org'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'yopmail.com'</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Check the format with the CodeIgniter function</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>valid_email<span style="color: #009900;">&#40;</span><span style="color: #000088;">$address</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Check the illegal hosts</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$illegalHosts</span> <span style="color: #b1b100;">as</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$illegalHost</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">stripos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$address</span><span style="color: #339933;">,</span> <span style="color: #000088;">$illegalHost</span><span style="color: #339933;">,</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$address</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// The address is valid</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Wanneer je nu op je website een e-mail adres wil controleren, kan je gewoon deze functie gebruiken als volgt:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">is_valid_email<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'massimo@finalfrag.be'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Zal true teruggeven</span>
is_valid_email<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'piet@mailinator.com'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Zal false teruggeven</span></pre></div></div>

<p>Aangezien we ons bestand MY_email_helper.php hebben genoemd, wordt dit bestand automatisch geladen door CodeIgniter wanneer je de Email helper inlaad. Om deze functie te kunnen gebruiken hoef je dus enkel het volgende te doen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">helper</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Nog meer hosts</h3>
<p>Indien je zelf nog meer hosts weet die wegwerp-e-mail adressen aanbieden, mag je mij gerust een lijstje bezorgen per e-mail, dan pas ik de functie aan. Ik hoop dat jullie er iets aan hebben.</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/05/een-e-mail-adres-beter-controleren/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>De Konami&#160;code</title>
		<link>http://finalfrag.be/blog/2009/05/de-konami-code/</link>
		<comments>http://finalfrag.be/blog/2009/05/de-konami-code/#comments</comments>
		<pubDate>Fri, 22 May 2009 13:24:40 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[easter egg]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=340</guid>
		<description><![CDATA[De Konami code, een van de opkomende trends deze dagen. De Konami code was enkele jaren geleden bekend als cheat code bij verschillende spellen van &#8230; jawel &#8230; Konami. Het oudste spel waarin de cheat code verwerkt zit, is van 1986. Door een bepaalde toetsencombinatie in te drukken, krijgt de speler in de betreffende spellen [...]]]></description>
			<content:encoded><![CDATA[<p>De Konami code, een van de opkomende trends deze dagen. De Konami code was enkele jaren geleden bekend als cheat code bij verschillende spellen van &#8230; jawel &#8230; Konami. Het oudste spel waarin de cheat code verwerkt zit, is van 1986. Door een bepaalde toetsencombinatie in te drukken, krijgt de speler in de betreffende spellen allerlei voordelen, zoals bijvoorbeeld alle wapens en munitie, meer levens, etc.</p>
<p>De laatste dagen begint de Konami code echter aan een nieuw avontuur.<span id="more-340"></span> Op verschillende websites krijg je een leuk effect of een verborgen pagina te zien wanneer je de code ingeeft. Op <a target="_blank" href="http://konamicodesites.com"  title="Konamicodesites.com">konamicodesites.com</a> vind je een uitgebreid overzicht van de sites waarop de code een effect heeft. Het spreekt voor zich dat je de Konami code moet invoeren alvorens je de website te zien krijgt.</p>
<p>Zelfs enkele van de grote websites volgen de nieuwe trend, waaronder <a target="_blank" href="http://www.facebook.com"  title="Facebook">facebook</a>, <a target="_blank" href="http://www.netlog.com"  title="Netlog">netlog</a> en <a target="_blank" href="http://www.gamespot.com"  title="Gamespot">gamespot</a>. Let wel op, op sommige websites moet je de code afsluiten met de enter-toets.</p>
<h3>Wat is de code?</h3>
<p>Het is een schandaal dat je de Konami code niet kent. Je bent zeker geen fan van videospelletjes? De Konami code gaat als volgt:</p>
<p><img src="http://finalfrag.be/blog/wp-content/uploads/2009/05/konami.png" alt="Konami code" class="wp-smiley wp-image-341" /></p>
<h3>Hoe implementeren</h3>
<p>De Konami code implementeren op je eigen website is heel makkelijk, bijna kinderspel. Het benodigde JavaScript bestandje staat zelfs op Google Code, wat het nog makkelijker maakt. Dit voorbeeld helpt je alvast op weg:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://konami-js.googlecode.com/svn/trunk/konami.js&quot;&gt;&lt;/script&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
    konami.<span style="color: #660066;">code</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Yihaa'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    konami.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Wanneer je besluit de Konami code te gebruiken, laat dan je creativiteit de vrije loop.</p>
<p>Tip: probeer de code ook hier maar eens uit&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/05/de-konami-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google&#160;Analytics</title>
		<link>http://finalfrag.be/blog/2009/05/google-analytics/</link>
		<comments>http://finalfrag.be/blog/2009/05/google-analytics/#comments</comments>
		<pubDate>Tue, 19 May 2009 18:15:01 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[statistieken]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=197</guid>
		<description><![CDATA[De meest onder jullie zullen Google Analytics wel kennen. Het is een tool die web ontwikkelaars toelaat om meer info te vergaren over een website. Zo biedt het onder andere informatie over het aantal bezoekers per tijdseenheid, de afkomst van die bezoekers, welke browsers die bezoekers gebruiken, hun gemiddelde tijd op de website, etc. Je [...]]]></description>
			<content:encoded><![CDATA[<p>De meest onder jullie zullen <a target="_blank" href="http://www.google.com/analytics"  title="Google Analytics">Google Analytics</a> wel kennen. Het is een tool die web ontwikkelaars toelaat om meer info te vergaren over een website. Zo biedt het onder andere informatie over het aantal bezoekers per tijdseenheid, de afkomst van die bezoekers, welke browsers die bezoekers gebruiken, hun gemiddelde tijd op de website, etc. Je kan het zo gek niet bedenken of Google Analytics meet het.<span id="more-197"></span></p>
<h3>Hoe gebruik ik het?</h3>
<p>Het enige dat je moet doen, is een klein stukje JavaScript op de website te plaatsen. Dit stukje JavaScript code wordt ook wel de &#8216;tracker&#8217; genoemd. Op de Google Analytics website staan twee versies van deze tracker, urchin.js en ga.js. ga.js is de laatste nieuwe versie. Het is dus aangeraden om die te gebruiken.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
    <span style="color: #003366; font-weight: bold;">var</span> gaJsHost <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;https:&quot;</span> <span style="color: #339933;">==</span> document.<span style="color: #660066;">location</span>.<span style="color: #660066;">protocol</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;https://ssl.&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>unescape<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;%3Cscript src='&quot;</span> <span style="color: #339933;">+</span> gaJsHost <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
    <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> pageTracker <span style="color: #339933;">=</span> _gat._getTracker<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;___je_tracker_code___&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        pageTracker._trackPageview<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>err<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<h3>Het probleem</h3>
<p>Wanneer ik iets programmeer, wil ik altijd dat de code zo proper en duidelijk mogelijk is. Wat mij dus meteen opviel was dat de tracker uit twee aparte stukken javascript bestaat. Op al mijn websites combineerde ik dus meteen de twee delen tot 1 geheel. Enkele dagen later begonnen de geavanceerde statistieken binnen te lopen, so far so good.</p>
<p>Enkele dagen later bleken de statistieken echter altijd hetzelfde te blijven. Ik had na een paar dagen een 7-tal bezoekers, en dat aantal veranderde niet meer. Zelfs na een volledige week had ik zogezegd nog altijd maar 7 bezoekers gehad, wat uiteraard niet kon.</p>
<h3>De oplossing</h3>
<p>Op een dag kwam Michaël, die regelmatig van zich laat horen in de reacties hieronder, met een oplossing. Blijkt dat je de tracker code niet mag combineren tot één stuk code. Waarom blijft voorlopig echter nog een groot vraagteken, althans voor mij. Wie hier een licht op kan werpen mag dat gerust doen in een reactie.</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/05/google-analytics/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fouten ontvangen per&#160;e-mail</title>
		<link>http://finalfrag.be/blog/2009/05/fouten-ontvangen-per-e-mail/</link>
		<comments>http://finalfrag.be/blog/2009/05/fouten-ontvangen-per-e-mail/#comments</comments>
		<pubDate>Tue, 12 May 2009 12:27:08 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=240</guid>
		<description><![CDATA[Iedereen die al wel eens een website maakt, maakt het mee. Al is het maar een kleine website voor de lokale voetbalploeg, of een website voor het bedrijf van je pa (De Grill-Mobiel   ). Op een dag loopt er iets fout op de website en moeten de mensen jouw komen opzoeken om het [...]]]></description>
			<content:encoded><![CDATA[<p>Iedereen die al wel eens een website maakt, maakt het mee. Al is het maar een kleine website voor de lokale voetbalploeg, of een website voor het bedrijf van je pa (<a target="_blank" href="http://www.degrillmobiel.be"  title="De Grill-Mobiel">De Grill-Mobiel</a> <img src='http://finalfrag.be/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). Op een dag loopt er iets fout op de website en moeten de mensen jouw komen opzoeken om het allemaal uit te leggen wat er juist fout ging. Meestal is de uitleg dan &#8216;ik klikte daar, of was het nu daar, of nee nee, daar klikte ik&#8217; en ben je nog geen stap korter bij het oplossen van het probleem, dat misschien toch bij die eerste klik al voorkwam.<span id="more-240"></span></p>
<p>Zou het niet veel leuker zijn als je automatisch een e-mail kon ontvangen wanneer er iets fout gaat op een van je projecten. Wanneer dan de mensen naar je toe komen met hun probleem kan je trots zeggen: &#8216;ja, dat heb ik gisteren al opgelost, dat werkt terug zoals het hoort&#8217;. Mits een kleine extensie te schrijven voor het <a target="_blank" href="http://www.codeigniter.com"  title="CodeIgniter framework">CodeIgniter framework</a> is dit zo simpel als 1, 2, 3. Of zelfs nog makkelijker, want je moet helemaal niet kunnen tellen.</p>
<h3>My_Log</h3>
<p>Om deze extensie te kunnen schrijven, moeten we eerst op zoek naar de library die instaat voor het opvangen van alle foutmeldingen. In het CodeIgniter framework is dit de Log klasse. We maken een nieuw bestand aan in de map system/application/libraries/ en noemen dit MY_Log.php. In dit bestand zetten we het volgende:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> MY_Log <span style="color: #000000; font-weight: bold;">extends</span> CI_Log
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$levels</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ERROR'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'DEBUG'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'2'</span><span style="color: #339933;">,</span>  <span style="color: #0000ff;">'INFO'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'3'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'ALL'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'4'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> write_log<span style="color: #009900;">&#40;</span><span style="color: #000088;">$level</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'error'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$msg</span><span style="color: #339933;">,</span> <span style="color: #000088;">$php_error</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$config</span> <span style="color: #339933;">=&amp;</span> get_config<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'write_log'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            parent<span style="color: #339933;">::</span><span style="color: #004000;">write_log</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$level</span><span style="color: #339933;">,</span> <span style="color: #000088;">$msg</span><span style="color: #339933;">,</span> <span style="color: #000088;">$php_error</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000088;">$level</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtoupper</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$level</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email_log'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">TRUE</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">levels</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$level</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">levels</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$level</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'log_threshold'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$report</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'log_email_title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$report</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;&lt;strong&gt;Requested URI:&lt;/strong&gt;&lt;br /&gt;http://&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_HOST'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REQUEST_URI'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;br /&gt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$report</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;Referer:&lt;/strong&gt;&lt;br /&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;br /&gt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #000088;">$report</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;&lt;strong&gt;User host:&lt;/strong&gt;&lt;br /&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">gethostbyaddr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;br /&gt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$report</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;&lt;strong&gt;Date:&lt;/strong&gt;&lt;br /&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'d-m-Y H:i:s'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;br /&gt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$report</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;&lt;strong&gt;Error:&lt;/strong&gt;&lt;br /&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$msg</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;br /&gt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$report</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;&lt;/body&gt;&lt;/html&gt;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000088;">$headers</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">'MIME-Version: 1.0'</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$headers</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'Content-type: text/html; charset=iso-8859-1'</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$headers</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'From: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'log_email_from'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #990000;">mail</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'log_email_address'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'log_email_title'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$report</span><span style="color: #339933;">,</span> <span style="color: #000088;">$headers</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Als je de broncode goed naleest zie je dat we enkele variabelen uit het config bestand van CodeIgniter uitlezen. We kunnen uiteraard niets uitlezen dat niet bestaat. Het is dan ook nodig de variabelen in kwestie aan te maken in het config bestand.</p>
<p>De fervente CodeIgniter gebruikers, waaronder ikzelf, willen uiteraard de Email klasse van CI gebruiken om de e-mail te versturen. Ik heb dit proberen te implementeren, maar dat is me niet gelukt. Om in een library aan het CI object te komen, moet je de get_instance() functie gebruiken. Deze functie wordt gedeclareerd <strong>nadat</strong> de Log klasse wordt geladen. Daardoor is het dus niet mogelijk op het CI object te verkrijgen in MY_Log, en is het dus ook niet mogelijk om de Email klasse te laden. Jammer, maar gelukkig doet de <a target="_blank" href="http://be.php.net/manual/en/function.mail.php"  title="PHP mail()">mail() functie</a> van PHP het ook helemaal goed.</p>
<h3>Het config bestand</h3>
<p>In config.php (te vinden in system/application/config/) moeten de volgende items worden toegevoegd:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Vanaf welk niveau moeten er fouten gerapporteerd worden (deze variabele staat al in het config bestand)</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'log_threshold'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// True als je wil dat er effectief naar het logbestand geschreven wordt</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'write_log'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// True als je een e-mail wil ontvangen wanneer er een fout optreedt</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email_log'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Het e-mail adres naar welk de e-mail wordt verstuurd</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'log_email_address'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'massimo@finalfrag.be'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Het onderwerp van het e-mail bericht</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'log_email_title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Project x foutmelding'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// De afzender van de e-mail</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'log_email_from'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Project x'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>Het resultaat</h3>
<p>Elke keer wanneer er nu een foutmelding op de website komt, bijvoorbeeld wanneer een PHP variabele niet kan worden gevonden of wanneer er een pagina niet werd gevonden, krijgen we een e-mail waarin meer info staat over de foutmelding. Een foutmelding ziet er als volgt uit:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="plain" style="font-family:monospace;">REQUESTED URI:
http://www.finalfrag.be/blog/
&nbsp;
USER HOST:
213.219.133.127.adsl.dyn.edpnet.net
&nbsp;
DATE:
06-05-2009 19:37:29
&nbsp;
ERROR:
Severity: Warning --&gt; Cannot modify header information - headers already sent by (output started at /home/finalfrag.be/public_html/libraries/Exceptions.php:164)
/home/finalfrag.be/public_html/libraries/Smarty.php 99</pre></td></tr></table></div>

<p>Uit deze voorbeeldfoutmelding kunnen we afleiden dat er op http://www.finalfrag.be/blog/ al iets op het scherm getoond wordt voordat de sessie geladen wordt door CodeIgniter. Ook krijgen we meer informatie over de gebruiker die de foutmelding heeft veroorzaakt en wanneer.</p>
<p>Ik hoop dat deze blogpost je weer wat verder helpt in de mooie wereld van webontwikkeling. Vragen of opmerkingen passen zoals gewoonlijk mooi in het vakje hieronder.</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/05/fouten-ontvangen-per-e-mail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De PHP sluittag&#160;weglaten</title>
		<link>http://finalfrag.be/blog/2009/05/de-php-sluittag-weglaten/</link>
		<comments>http://finalfrag.be/blog/2009/05/de-php-sluittag-weglaten/#comments</comments>
		<pubDate>Sun, 10 May 2009 12:23:52 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=292</guid>
		<description><![CDATA[Met deze blogpost wil even een misverstand de wereld uithelpen. Bijna elke website waar PHP tutorials voor beginners opstaan, leggen dit verkeerd uit. Het gaat om de PHP sluittag, beter bekend als &#8216;?>&#8217;.
Deze tag is optioneel voor de parser die PHP verwerkt. Dit wil zeggen dat de volgende 2 scripts exact hetzelfde doen:

1
2
3
4
&#60;?php
$tekst = 'Ik [...]]]></description>
			<content:encoded><![CDATA[<p>Met deze blogpost wil even een misverstand de wereld uithelpen. Bijna elke website waar PHP tutorials voor beginners opstaan, leggen dit verkeerd uit. Het gaat om de PHP sluittag, beter bekend als &#8216;?>&#8217;.</p>
<p>Deze tag is optioneel voor de parser die PHP verwerkt. Dit wil zeggen dat de volgende 2 scripts exact hetzelfde doen:<span id="more-292"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$tekst</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Ik ben een voorbeeldtekst.'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$tekst</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$tekst</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Ik ben een voorbeeldtekst.'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$tekst</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>En dan?</h3>
<p>Op zich is dit geen geweldig nieuws, maar als je even verder nadenkt kan de sluittag weglaten je wel veel frustratie helpen voorkomen. Wanneer je bijvoorbeeld de sluittag wel typt en er per ongeluk nog een spatie achter zet, zal deze niet verwerkt worden door de PHP parser, maar gewoon als HTML aanzien worden. Dat zal op zijn beurt resulteren in een extra spatie op de genereerde pagina, wat in sommige gevallen kan leiden tot onverwachte fouten in de layout van je pagina&#8217;s.</p>
<p>Een spatie of een witregel op het einde van een bestand kan ook gegeneerd worden door de FTP applicatie die je gebruikt. Wanneer de <a target="_blank" href="http://be.php.net/manual/en/function.error-reporting.php"  title="error_reporting">error_reporting</a> functie van PHP wordt gebruikt om fouten niet te tonen aan de eindgebruiker, kan deze spatie het tonen van een lege pagina tot gevolg hebben.</p>
<p>Het is zo dat de PHP parser sowieso stopt met het verwerken van een bepaald script wanneer het einde van dat bestand bereikt is. De parser doet dit helemaal op het einde van het bestand. Zo ben je er zeker van dat er niets meer na deze &#8217;sluittag&#8217; komt te staan.</p>
<h3>Een mogelijk probleem</h3>
<p>Soms kan het gebeuren dat er door een fout in je IDE of een verbinding die plots wegvalt maar een deel van je bestand wordt ingeladen. Door de sluittag weg te laten, kan je niet meer zien of het einde van het geopende bestand effectief het einde is van het bestand in kwestie. Om dit te voorkomen kan je altijd een regel commentaar op het einde van elk bestand zetten, bijvoorbeeld:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$tekst</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Ik ben een voorbeeldtekst.'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$tekst</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* EOF: voorbeeld.php */</span></pre></td></tr></table></div>

<p>Voila, zo heb je weer iets bijgeleerd over PHP. Laat gerust een reactie achter als je een vraag of een opmerking hebt.</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/05/de-php-sluittag-weglaten/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arrays in language files (deel&#160;2)</title>
		<link>http://finalfrag.be/blog/2009/05/arrays-in-language-files-deel-2/</link>
		<comments>http://finalfrag.be/blog/2009/05/arrays-in-language-files-deel-2/#comments</comments>
		<pubDate>Sat, 09 May 2009 12:49:10 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[meertaligheid]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=305</guid>
		<description><![CDATA[Deze post is een vervolg op de post &#8216;Arrays in language files&#8216; die ik enkele dagen geleden publiceerde. Op het einde gaf ik enkele suggesties voor uitbreidingen op de code in die post.
Als fervente PHPer kon ik me natuurlijk niet inhouden om die uitbreidingen zelf ook eens te maken, al was het maar om de [...]]]></description>
			<content:encoded><![CDATA[<p>Deze post is een vervolg op de post &#8216;<a href="http://finalfrag.be/blog/2009/05/arrays-in-language-files/"  title="Arrays in language files">Arrays in language files</a>&#8216; die ik enkele dagen geleden publiceerde. Op het einde gaf ik enkele suggesties voor uitbreidingen op de code in die post.</p>
<p>Als fervente PHPer kon ik me natuurlijk niet inhouden om die uitbreidingen zelf ook eens te maken, al was het maar om de uitdaging aan te gaan. Bovendien heb ik van elke mensen al vragen gehad over hoe ze eraan moeten beginnen. Daarom heb ik besloten om dit vervolg te schrijven en een woordje uitleg te geven bij deze uitbreidingen.<span id="more-305"></span></p>
<h3>Meerdimensionale arrays</h3>
<p>De uitbreiding die ik heb geschreven ziet er als volgt uit:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> line <span style="color: #009900;">&#40;</span><span style="color: #000088;">$keys</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vals</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$return</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vals</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Er zijn geen waardes opgegeven</span>
        <span style="color: #666666; font-style: italic;">// We gebruiken dan een echo</span>
        <span style="color: #000088;">$return</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'return $this-&gt;language'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Er zijn wel waardes opgegeven</span>
        <span style="color: #666666; font-style: italic;">// We gebruiken dan een sprintf</span>
        <span style="color: #000088;">$return</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'return sprintf($this-&gt;language'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// De volledige key samenstellen aan de hand van de array</span>
    <span style="color: #666666; font-style: italic;">// Dit wordt iets als ['error']['username']['minLength']</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$keys</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Als $keys een array is halen we alle delen op</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$keys</span> <span style="color: #b1b100;">as</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$return</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'[\''</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'\']'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Anders is er maar één key meegegeven aan de functie</span>
        <span style="color: #000088;">$return</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'[\''</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$keys</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'\']'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Daarna doen we ongeveer hetzelfde voor de waardes</span>
    <span style="color: #666666; font-style: italic;">// Als die er zijn, maken we gebruik van een sprintf (zie bovenaan)</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vals</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Als er een array werd meegegeven, doorlopen we deze</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$vals</span> <span style="color: #b1b100;">as</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$return</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">', \''</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$val</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'\''</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Anders is er maar één waarde</span>
        <span style="color: #000088;">$return</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">', \''</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$vals</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'\''</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Op het einde nog even de functie (echo of sprint) juist afsluiten</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vals</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$return</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">';'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$return</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">');'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// En het geheel teruggeven</span>
    <span style="color: #b1b100;">return</span> <span style="color: #990000;">eval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$return</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Deze functie staat uiteraard in het MY_Language.php bestand. Aangezien de naam van de functie die hierboven staat &#8216;line&#8217; is, zal de functie van CI_Language overschreven worden. Dit is echter geen probleem, omdat onze eigen functie dezelfde en meer functionaliteiten biedt dan de originele. Om dit even te demonstreren, maak ik gebruik van dutch_lang.php in de map language/dutch/:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$lang</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'een'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Dit is een voorbeeld'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$lang</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'twee'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Dit is voorbeeld %s'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$lang</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'drie'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'a'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Dit is voorbeeld a'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$lang</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'drie'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'b'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Dit is voorbeeld b met als gegevens: %s en %s'</span><span style="color: #339933;">;</span></pre></div></div>

<p>De code om dit te testen is redelijk makkelijk te schrijven. Dit zijn enkele van de tests, maar er zijn er natuurlijk nog meer mogelijk. Zo is er bijvoorbeeld geen test voorzien voor een array van keys met één waarde.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> Home <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lang</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dutch'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'dutch'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lang</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">line</span><span style="color: #009900;">&#40;</span>
            <span style="color: #0000ff;">'een'</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lang</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">line</span><span style="color: #009900;">&#40;</span>
            <span style="color: #0000ff;">'twee'</span><span style="color: #339933;">,</span>
            <span style="color: #cc66cc;">2</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lang</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">line</span><span style="color: #009900;">&#40;</span>
            <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'drie'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'a'</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lang</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">line</span><span style="color: #009900;">&#40;</span>
            <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'drie'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'b'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
            <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'2'</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Bovenstaande code geeft als resultaat:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">Dit is een voorbeeld
Dit is voorbeeld 2
Dit is voorbeeld a
Dit is voorbeeld b met als gegevens: 1 en 2</pre></div></div>

<p>Dat werkt allemaal heel mooi, maar er is nog een tweede uitdaging.</p>
<h3>Alle language file rechtstreeks in de language/ map</h3>
<p>Nu staat alle taalbestanden nog in mappen. Zo staat dutch_lang.php in language/dutch/ en english_lang.php in language/english/. Dit heeft als gevolg dat we steeds deze map moeten meegeven met de $this->lang->load functie.</p>
<p>De enige manier om dit op te lossen is om de load functie van CI_Language te overschrijven. Dit kan door de load functie te kopiëren vanuit Language.php (te vinden in system/libraries/) en te plakken in MY_Language.php. Het enige dat je nu nog moet doen is een stuk code in commentaar zetten, of volledig te verwijderen als je dat liever doet. Het gaat om de if structuur die begint op regel 8 van de functie:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$idiom</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$CI</span> <span style="color: #339933;">=&amp;</span> get_instance<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$deft_lang</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$CI</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'language'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$idiom</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$deft_lang</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">'english'</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$deft_lang</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Wanneer je bovenstaande code in commentaar zet kan je in je controllers</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lang</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dutch'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'dutch'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>vervangen door</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lang</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dutch'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Je moet natuurlijk ook dutch_lang.php verplaatsen van language/dutch/ naar language/.</p>
<h3>En klaar is kees</h3>
<p>Voila, beide ideeën die ik en de vorige post voorstelde zijn bij deze gemaakt. Als er nog vrage zijn, je weet ondertussen wel waar je ze kan zetten&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/05/arrays-in-language-files-deel-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
