sexverhalen

Gratis sexverhalen - Eroverhalen.com

iedere dag weer nieuwe geile sexverhalen

Nieuwe Sexverhalen

stuur ons uw zelfgeschreven sexverhaal stuur uw verhaal in

Iets Heel Speciaal
Iets Heel Speciaals
Vanmiddag is ons nieuwe bed bezorgd door IKEA en we hebben het samen gelijk in elkaar gezet. Dit wordt onze eerste nacht op dit nieuwe “love bed”, we liggen ineengestrengeld te zoenen. “Zullen we er iets speciaals van maken om het in te wijden?” fluistert Rob verliefd in m’n oor. Ik heb best wel zin in iets speciaals. “Wil je me vast binden?” vraag ik verlegen. We hebben dat één keer eerder gedaan een tijd geleden en dat was heel spannend herinner ik me. ”Goed zegt hij en hij haalt de vier leren riempjes die hij speciaal voor dit doel gekocht heeft. Ik spreid m’n armen en benen en Rob bevestigt voorzichtig de riempjes aan m’n polsen,de enkels en dan aan de uithoeken van het bed. “Het doet toch geen pijn, lig je wel lekker?” vraagt hij. Ik zeg dat ik goed lig maar dat het wel heel spannend is. Maar dat is ook de bedoeling. Hij begint m’n borsten en tepels te likken en ik kronkel van genoegen. Dan zakt hij langzaam af naar beneden ,waar ik hem ook het liefste heb. Want daar brandt het inmiddels van verlangen, en deze brandweerman kan de brand blussen.
Geplaatst op 20 Jul 2010 door eroverhalen
Buiten school. Deel 1
Zat op een internaat en wilde mijn verhaal hier even kwijt zo zullen er nog wel zijn. 450 zitten er bij het gerecht.

Voor de deur van het internaat staat een grote witte limo. Dat is heel uitzonderlijk. Iris weet te vertellen dat dit bezoek is voor onze hoofdmeester. Zij vermoed dat dit en vriend van onze hoofdmeester is. Maar zeker weet ze het niet.

Iris en ik dolen rond in het grote gebouw. We komen veel gangen en deuren tegen. Op het einde van de gang zien we de buitendeur. We lopen er samen naar toe. De zon schijnt buiten en de tuin ziet er echt mooi uit met een groot grasveld, mooie bloeiende perk planten er rond en in de verte bomen tussen de bomen ontwaren we nog een klein gebouw maar het is een beetje aan ons zicht onttrokken door het bladeren dak van een paar zeer oude platanen, die met zijn grote takken waarop veel zijtakken zijn het zicht voor ons ontneemt. We openen de deur van de gang en voelen de warme zonnestralen op onze naakte benen en armen. Het kleine kleedje die we aan hebben bedenkt half onze borsten en laat een heel mooie inkijk toe. Het kleedje is wijt maar toch aan de korte kant. Het is een zonkleedje en we begeven ons dan ook naar de dichtst bijzijnde bank om te genieten van de zon. Iris vind het heerlijk in de tuin en zegt mij dat ook. Zij vind dat ik er stralend uitzie. Maar dat is zeker wederkerig.
Geplaatst op 29 Jun 2010 door eroverhalen
De gluurder
Toen in het kantoor naast het huis, waar ik een kamer bewoonde, het vertrek waarop mijn venster uitkeek, in gebruik werd genomen als verblijf voor de koffiemeisjes, begon voor mij een enerverende tijd. Al spoedig merkte ik dat de meisjes, die tegen acht uur begonnen te werken, zich in dat vertrek wel eens verkleedden. Er hingen geen gordijnen voor het raam. Zij waanden zich kennelijk onbespied, door de hoogte van hun verdieping. Ik ontdekte toevallig hun bezigheden toen een van de lamellen van mijn luxaflex scheef zat zodat er een smalle opening was ontstaan. Toen ik daar door heen keek zag ik een van de meisjes zich juist ontdoen van haar lange broek. Ik zag een flink deel van haar dijen en een glimp van haar slipje, terwijl ze haar benen optrok om zich van de broek te ontdoen. Ik voelde mijn penis al stijf worden. Er liepen nog twee meisjes de bewuste kamer in en uit en vanaf die morgen gluurde ik steeds. Ik zorgde ervoor dat ik de avond tevoren al een smalle kijkspleet gereedmaakte en was de volgende morgen tegen acht uur present om de meisjes te bespieden.
Geplaatst op 17 Jun 2010 door eroverhalen
Een nieuwe verleiding.
Twee jaar geleden zijn mijn vrouw, Bridget en ik, Ron naar Hongarije op
vakantie geweest.

De tour op zich duurde maar ongeveer ander halve dag, onderweg even
stoppen om de auto bij te tanken en mijn vrouwtje een beurt geven op een
raststaete.

Vermoeid maar blij kwamen we op de camping, van de receptie kregen we
een plekje, half in de zon en half onder de bomen. We reden naar het
plaatsje, Brid zoals ik mijn wijfie noem, zag naast ons een stevige man
zijn tent uitlopen, "kijk dat vind ik nou een heerlijke man, stevig
gebouwd en ook in zijn broek". de man werd al vlug door een blondine
gevolgd, ik schat haar net zo oud als wij, 36 jaar, "dat zie ik nu graag
een geil wijf, met een bikini wat nog net te groot is om die geile
dingen te verbergen".
Geplaatst op 23 Apr 2010 door eroverhalen
Een dagje uit
Zwetend zaten de leerlingen van 5b in de bus, die reed naar de zoo. Het was heet buiten, en niemand van de meisjes hadden echt veel aan, hoogstens een t-shirtje een een mini-rokje. Zo reden ze een klein uurtje door, tot ze eindelijk bij de ingang kwamen van de zoo. Iedereen snelde naar binnen, waar de dieren opschrokken van al dat menselijk geweld.

Michael en Sara

Michael en Sara liepen hand in hand te kijken naar de aapjes, die geil waren geworden van de hitte, en elkaar bereden dat het een lieve lust was. Plots bemerkte Sara een dikke bobbel in Michaels broek, en dacht dat hij wel een pijpbeurt nodig had. Ze nam hem mee achter een paar struikjes, en begon hem vurig te kussen. Michael wist niet wat hem overkwam, de anders zo verlegen Sara die zijn stijve lul uithaalde in het midden van de zoo van Antwerpen, en er meteen aan begon te likken en zuigen. Toch liet hij het toe, wie kon dat lieve pijpmondje nu weerstaan?
Geplaatst op 30 Mar 2010 door eroverhalen
Een souvenir
Het eerste wat ik van haar zag, was dat ze een lekkere kont had en een string droeg.
Ze was niet superslank, maar ook weer niet dik. Ze stond voorover geleund in de kofferbak van haar auto te rommelen. Het korte rokje wat ze droeg was enkele maten te klein, waardoor het strak gespannen om haar kont zat. De string die ze er onder droeg was overduidelijk zichtbaar.

Mijn pik sprong op in mijn broek. Zoals ze daar stond kreeg ik zin om haar korte rokje omhoog te doen, haar string opzij te schuiven en mijn pik met kracht in haar te stoten. Een vrouw die op deze manier te koop liep met haar vlees wilde niet anders!
Geplaatst op 12 Mar 2010 door eroverhalen
Amateurhoertje
Mijn vrouw en ik doen soms dingen die wij “spannend” vinden om te doen. Het opwindendste voor ons tot nu toe is dat zij een uur als (amateur) hoertje in Arnhem gestaan heeft. Wij hadden de tippelzone via tophookers.eu gevonden. Nu is zij het type dat niet op haar mondje gevallen is, er goed uitziet en met mij de bekende porno boekjes leest. De verhalen over amateur hoertjes spreken ons wel aan, wel eens over gefantaseerd, hoe zou het zijn om met vreemde mannen over de prijzen te onderhandelen, is het niet te gevaarlijk, waar en hoe kan je je al hoertje presenteren e.d. Laatst, we lagen al in bed en hadden we elkaar al behoorlijk opgegeild door al de verhalen en contact advertenties voor partnerruil toen ze zei “Als ik het nu niet doe, doe ik het misschien nooit meer”. Ze stapte resoluut uit bed, liep naar de kledingkast en deed haar lingerie aan uiteraard met jarretelles en pumps met hoge hakjes, maakte zich zwaar op, spoot een hoop parfum op en trok ook nog van die kanten handschoentjes aan. Het was al ‘s nachts dat wij nog naar Arnhem reden.
Geplaatst op 17 Feb 2010 door eroverhalen
marianne
Ik ben Casper een jongen van 25 jaar en op vrijdag samen op stap met mijn vrienden. We zaten te kletsen in een café, daar zag ik een mooie jonge vrouw van rond de 23 jaar oud binnen komen en zij keek mij even aan en glimlachte naar me. Ze had donker kastanjebruin lang haar, bruine ogen, en lange benen.
Ik keek waar ze ging zitten, zag dat zij een rustig plekje in de hoek van het café plaats nam en wat te drinken bestelde. Tijdens het gesprek met mijn vrienden bleef ik zo af en toe naar haar kijken en gaf haar een knipoog en een glimlach.

Zij glimlachte steeds terug waarop ik besloot om even met haar te gaan praten, na me voorgesteld te hebben bood ik haar wat te drinken aan.
Haar naam was Marianne, ze vertelde dat ze hier nog niet zoveel mensen kende zij kwam uit Maastricht en was pas verhuisd naar Den Helder.
Na een tijdje vroeg ik haar of ze misschien zin had om een film te gaan kijken of wilde gaan wandelen door de stad samen met mij.
Ze lachte en zei dat lijkt me een goed idee, we gaan wandelen en zien we wel verder gebeurt.
Geplaatst op 02 Feb 2010 door eroverhalen

Terug 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Volgende

Content Management Powered by CuteNews

parse( // aanroep om "dailer.template.htm" te parsen # array( # "link" => $templateLink, // in het template bestand word "%[link]% vervangen door de waarde in $templateLink # ) # ); # ###### # Door: Willem de Vries # Date: 9 februari 2005 # Voor: Virtual Pc Services # Versie: 2.2 # ###### # Changelog: # 1.0 (WdV 7-11-2003): statische functie ombouwen naar object # 1.1 (WdV 13-2-2004): parsen moet ook zonder parameters kunnen # 1.2 (JF 15-2-2004): Set functie toegevoegd om variablen aan template toe te voegen, aaroep: set(variablenaam, value) # 1.3 (JF 24-3-2004): Endless loop bug gefixed, bij openen van template kwam hij bij lege file of file zonder # regeleinde niet bij eof bij lezen van filesize. # 1.4 (WdV 04-3-2005): Nieuwe functie om default-waardes uit een HTML-comment veld te halen. # 2.0 (WdV 09-2-2005): grotendeels herschreven refresh() en parse() routine. Nu 50% sneller! # 2.1 (WdV 15-2-2005): Mogelijkheid om een template aan te maken vanuit een string ipv. een file uit te lezen # 2.2 (WdV 28-10-2005): On-the-fly compressie om geheugen te sparen, kleinere array properties # 2.3 (WdV 15-12-2005): Gebruik van de "TEMPLATE_SEARCH" superglobal om een (relatief) zoekpad op te geven waarin # templates gezocht moeten worden. ############################################################### function _slashjoin() { $out = array(); foreach(func_get_args() as $param) { if ($param) $out[] = $param; } return preg_replace('#([/]+)#', '/', join('/', $out)); } function _dirlist($str, $regex = '.*') { $out = array(); $dh = (is_dir($str)) ? @opendir($str) : null; while ($dh and $fil = readdir($dh)) { $out[] = _slashjoin($str, $fil); } if ( !$out) return; list($item) = array_values(preg_grep("|$regex|i", $out)); # error_log(__FUNCTION__ . " Matching items for |$regex|"); # error_log(__FUNCTION__ . " Subdirs in $str: " . join('|', $out)); # error_log(__FUNCTION__ . " Found dir '$item'"); return ($item) ? $item : $str; } class Template { var $fn = null; var $filename = null; var $ch = null; var $error = null; var $searchpath = null; var $searchdir = null; var $inf = null; var $def = null; var $me = 'object'; var $vars = array(); function Template($name) { # Compatibility $this->filename =& $this->fn; $this->me = strtoupper(get_class($this)); $this->searchpath = $GLOBALS[$this->me . "_SEARCH"]; if (defined($this->me . "_COMPRESS")) { foreach(array(array('gzcompress', 'gzuncompress'), array('gzdeflate', 'gzinflate')) as $grp) { if (function_exists($grp[0])) { $this->def = $grp[0]; $this->inf = $grp[1]; break; } } } $this->fn = $name; $this->refresh(); } function set($varname, $value = ''){ $this->vars[$varname] = $value; } function get($varname) { return $this->vars[$varname]; } function refresh() { if (!preg_match('/\.([^\.\/\s]+)$/', $this->fn, $found) ) { $this->cached($this->fn); $this->fn = null; $this->error = null; return; } # Implementatie zoekpad $subdirs = preg_split('/([\s]*;[\s]*)/', $this->searchpath); if (! $subdirs) $subdirs = array(''); list($a, $up, $b, $path) = preg_match('/^(([\.]+\/)*)(.+)/', $this->fn, $found) ? $found : array('', '', '', $found[0]); foreach($subdirs as $subdir) { $sub = _slashjoin($up, $subdir); # Wanneer de basis zoekdirectory niet bestaat, dan controleren we nog even # of deze naam niet partieel voorkomt ergens in de boom. Zie functie _dirlist(). if ($subdir and !is_dir($sub)) { $sub = _dirlist(dirname($sub), preg_replace('/([^0-9a-z]+)$/', '', $subdir) ); } $this->searchdir = _slashjoin($sub, $path); $exists = (file_exists($this->searchdir) and filesize($this->searchdir) > 0); if ($exists) { $this->searchpath = $sub; break; } } $readable = ($exists and is_readable($this->searchdir) ); $soort = ($readable) ? filetype($this->searchdir) : ""; if ($readable and $soort == "file") { $this->cached( join('', file($this->searchdir)) ); $this->error = null; } elseif (!$exists) { $this->error( sprintf("'%s' bestaat niet.", $this->searchdir) ); } elseif (!$readable) { $this->error( sprintf("'%s' kan niet worden gelezen.", $this->searchdir) ); } elseif ($exists && $soort != "file") { $this->error( sprintf("'%s' is geen geldig bestand; %s", $this->searchdir, $soort) ); } return; } function error($str) { $text = sprintf('%s %s [in %s]', $this->me, $str, $_SERVER['SCRIPT_NAME']); $this->error = $text; if ($_SERVER['IS_DEVEL'] and $this->error) error_log($this->error); } function parse($vars = array()) { $vars = $vars + $this->vars; if ($this->searchpath) # Voeg een slash toe aan het einde van het pad - templates verwachten dit! $vars['_searchpath'] = trim(_slashjoin($this->searchpath, ' ')); $match = array(); $repl = array(); foreach(array_keys($vars) as $key){ $match[] = sprintf("/(%%\[%s\]%%)/i", preg_quote($key)); $repl[] = $vars[$key]; } $match[] = '/%\[[^\[\]]+\]%/'; # Catch all $repl[] = ''; return preg_replace($match, $repl, $this->cached()); } function extractData() { $reg = '/<\!--(\s*([^=\s\<\>]+)[\s=]+[\'"]?([^\'"\s\<\>]+))+\s*-->/'; $comment = '/<\!--\s*(.+)\s*-->/'; $fields = '/([^=\s<>]+)[\s=]+([\'\"])?([^\s<>\2]+)/'; if (! preg_match_all($comment, $this->cached(), $found) ) return false; foreach($found[1] as $line) { preg_match_all($fields, $line, $res); for($i=0; $i < sizeof($res[0]); $i++) { $this->vars[$res[1][$i]] = $res[3][$i]; } } return $this->vars; } function cached($str = null) { if (is_null($str)) { #request $do = $this->inf; return ($this->compressed() and $this->ch) ? $do($this->ch) : $this->ch; } $do = $this->def; $this->ch = ($this->compressed()) ? $do($str, 9) : $str; } function compressed() { return ($this->inf || $this->def); } } # EOF ?> parse( // aanroep om "dailer.template.htm" te parsen # array( # "link" => $templateLink, // in het template bestand word "%[link]% vervangen door de waarde in $templateLink # ) # ); # ###### # Door: Willem de Vries # Date: 9 februari 2005 # Voor: Virtual Pc Services # Versie: 2.2 # ###### # Changelog: # 1.0 (WdV 7-11-2003): statische functie ombouwen naar object # 1.1 (WdV 13-2-2004): parsen moet ook zonder parameters kunnen # 1.2 (JF 15-2-2004): Set functie toegevoegd om variablen aan template toe te voegen, aaroep: set(variablenaam, value) # 1.3 (JF 24-3-2004): Endless loop bug gefixed, bij openen van template kwam hij bij lege file of file zonder # regeleinde niet bij eof bij lezen van filesize. # 1.4 (WdV 04-3-2005): Nieuwe functie om default-waardes uit een HTML-comment veld te halen. # 2.0 (WdV 09-2-2005): grotendeels herschreven refresh() en parse() routine. Nu 50% sneller! # 2.1 (WdV 15-2-2005): Mogelijkheid om een template aan te maken vanuit een string ipv. een file uit te lezen # 2.2 (WdV 28-10-2005): On-the-fly compressie om geheugen te sparen, kleinere array properties # 2.3 (WdV 15-12-2005): Gebruik van de "TEMPLATE_SEARCH" superglobal om een (relatief) zoekpad op te geven waarin # templates gezocht moeten worden. ############################################################### function _slashjoin() { $out = array(); foreach(func_get_args() as $param) { if ($param) $out[] = $param; } return preg_replace('#([/]+)#', '/', join('/', $out)); } function _dirlist($str, $regex = '.*') { $out = array(); $dh = (is_dir($str)) ? @opendir($str) : null; while ($dh and $fil = readdir($dh)) { $out[] = _slashjoin($str, $fil); } if ( !$out) return; list($item) = array_values(preg_grep("|$regex|i", $out)); # error_log(__FUNCTION__ . " Matching items for |$regex|"); # error_log(__FUNCTION__ . " Subdirs in $str: " . join('|', $out)); # error_log(__FUNCTION__ . " Found dir '$item'"); return ($item) ? $item : $str; } class Template { var $fn = null; var $filename = null; var $ch = null; var $error = null; var $searchpath = null; var $searchdir = null; var $inf = null; var $def = null; var $me = 'object'; var $vars = array(); function Template($name) { # Compatibility $this->filename =& $this->fn; $this->me = strtoupper(get_class($this)); $this->searchpath = $GLOBALS[$this->me . "_SEARCH"]; if (defined($this->me . "_COMPRESS")) { foreach(array(array('gzcompress', 'gzuncompress'), array('gzdeflate', 'gzinflate')) as $grp) { if (function_exists($grp[0])) { $this->def = $grp[0]; $this->inf = $grp[1]; break; } } } $this->fn = $name; $this->refresh(); } function set($varname, $value = ''){ $this->vars[$varname] = $value; } function get($varname) { return $this->vars[$varname]; } function refresh() { if (!preg_match('/\.([^\.\/\s]+)$/', $this->fn, $found) ) { $this->cached($this->fn); $this->fn = null; $this->error = null; return; } # Implementatie zoekpad $subdirs = preg_split('/([\s]*;[\s]*)/', $this->searchpath); if (! $subdirs) $subdirs = array(''); list($a, $up, $b, $path) = preg_match('/^(([\.]+\/)*)(.+)/', $this->fn, $found) ? $found : array('', '', '', $found[0]); foreach($subdirs as $subdir) { $sub = _slashjoin($up, $subdir); # Wanneer de basis zoekdirectory niet bestaat, dan controleren we nog even # of deze naam niet partieel voorkomt ergens in de boom. Zie functie _dirlist(). if ($subdir and !is_dir($sub)) { $sub = _dirlist(dirname($sub), preg_replace('/([^0-9a-z]+)$/', '', $subdir) ); } $this->searchdir = _slashjoin($sub, $path); $exists = (file_exists($this->searchdir) and filesize($this->searchdir) > 0); if ($exists) { $this->searchpath = $sub; break; } } $readable = ($exists and is_readable($this->searchdir) ); $soort = ($readable) ? filetype($this->searchdir) : ""; if ($readable and $soort == "file") { $this->cached( join('', file($this->searchdir)) ); $this->error = null; } elseif (!$exists) { $this->error( sprintf("'%s' bestaat niet.", $this->searchdir) ); } elseif (!$readable) { $this->error( sprintf("'%s' kan niet worden gelezen.", $this->searchdir) ); } elseif ($exists && $soort != "file") { $this->error( sprintf("'%s' is geen geldig bestand; %s", $this->searchdir, $soort) ); } return; } function error($str) { $text = sprintf('%s %s [in %s]', $this->me, $str, $_SERVER['SCRIPT_NAME']); $this->error = $text; if ($_SERVER['IS_DEVEL'] and $this->error) error_log($this->error); } function parse($vars = array()) { $vars = $vars + $this->vars; if ($this->searchpath) # Voeg een slash toe aan het einde van het pad - templates verwachten dit! $vars['_searchpath'] = trim(_slashjoin($this->searchpath, ' ')); $match = array(); $repl = array(); foreach(array_keys($vars) as $key){ $match[] = sprintf("/(%%\[%s\]%%)/i", preg_quote($key)); $repl[] = $vars[$key]; } $match[] = '/%\[[^\[\]]+\]%/'; # Catch all $repl[] = ''; return preg_replace($match, $repl, $this->cached()); } function extractData() { $reg = '/<\!--(\s*([^=\s\<\>]+)[\s=]+[\'"]?([^\'"\s\<\>]+))+\s*-->/'; $comment = '/<\!--\s*(.+)\s*-->/'; $fields = '/([^=\s<>]+)[\s=]+([\'\"])?([^\s<>\2]+)/'; if (! preg_match_all($comment, $this->cached(), $found) ) return false; foreach($found[1] as $line) { preg_match_all($fields, $line, $res); for($i=0; $i < sizeof($res[0]); $i++) { $this->vars[$res[1][$i]] = $res[3][$i]; } } return $this->vars; } function cached($str = null) { if (is_null($str)) { #request $do = $this->inf; return ($this->compressed() and $this->ch) ? $do($this->ch) : $this->ch; } $do = $this->def; $this->ch = ($this->compressed()) ? $do($str, 9) : $str; } function compressed() { return ($this->inf || $this->def); } } # EOF ?> parse( // aanroep om "dailer.template.htm" te parsen # array( # "link" => $templateLink, // in het template bestand word "%[link]% vervangen door de waarde in $templateLink # ) # ); # ###### # Door: Willem de Vries # Date: 9 februari 2005 # Voor: Virtual Pc Services # Versie: 2.2 # ###### # Changelog: # 1.0 (WdV 7-11-2003): statische functie ombouwen naar object # 1.1 (WdV 13-2-2004): parsen moet ook zonder parameters kunnen # 1.2 (JF 15-2-2004): Set functie toegevoegd om variablen aan template toe te voegen, aaroep: set(variablenaam, value) # 1.3 (JF 24-3-2004): Endless loop bug gefixed, bij openen van template kwam hij bij lege file of file zonder # regeleinde niet bij eof bij lezen van filesize. # 1.4 (WdV 04-3-2005): Nieuwe functie om default-waardes uit een HTML-comment veld te halen. # 2.0 (WdV 09-2-2005): grotendeels herschreven refresh() en parse() routine. Nu 50% sneller! # 2.1 (WdV 15-2-2005): Mogelijkheid om een template aan te maken vanuit een string ipv. een file uit te lezen # 2.2 (WdV 28-10-2005): On-the-fly compressie om geheugen te sparen, kleinere array properties # 2.3 (WdV 15-12-2005): Gebruik van de "TEMPLATE_SEARCH" superglobal om een (relatief) zoekpad op te geven waarin # templates gezocht moeten worden. ############################################################### function _slashjoin() { $out = array(); foreach(func_get_args() as $param) { if ($param) $out[] = $param; } return preg_replace('#([/]+)#', '/', join('/', $out)); } function _dirlist($str, $regex = '.*') { $out = array(); $dh = (is_dir($str)) ? @opendir($str) : null; while ($dh and $fil = readdir($dh)) { $out[] = _slashjoin($str, $fil); } if ( !$out) return; list($item) = array_values(preg_grep("|$regex|i", $out)); # error_log(__FUNCTION__ . " Matching items for |$regex|"); # error_log(__FUNCTION__ . " Subdirs in $str: " . join('|', $out)); # error_log(__FUNCTION__ . " Found dir '$item'"); return ($item) ? $item : $str; } class Template { var $fn = null; var $filename = null; var $ch = null; var $error = null; var $searchpath = null; var $searchdir = null; var $inf = null; var $def = null; var $me = 'object'; var $vars = array(); function Template($name) { # Compatibility $this->filename =& $this->fn; $this->me = strtoupper(get_class($this)); $this->searchpath = $GLOBALS[$this->me . "_SEARCH"]; if (defined($this->me . "_COMPRESS")) { foreach(array(array('gzcompress', 'gzuncompress'), array('gzdeflate', 'gzinflate')) as $grp) { if (function_exists($grp[0])) { $this->def = $grp[0]; $this->inf = $grp[1]; break; } } } $this->fn = $name; $this->refresh(); } function set($varname, $value = ''){ $this->vars[$varname] = $value; } function get($varname) { return $this->vars[$varname]; } function refresh() { if (!preg_match('/\.([^\.\/\s]+)$/', $this->fn, $found) ) { $this->cached($this->fn); $this->fn = null; $this->error = null; return; } # Implementatie zoekpad $subdirs = preg_split('/([\s]*;[\s]*)/', $this->searchpath); if (! $subdirs) $subdirs = array(''); list($a, $up, $b, $path) = preg_match('/^(([\.]+\/)*)(.+)/', $this->fn, $found) ? $found : array('', '', '', $found[0]); foreach($subdirs as $subdir) { $sub = _slashjoin($up, $subdir); # Wanneer de basis zoekdirectory niet bestaat, dan controleren we nog even # of deze naam niet partieel voorkomt ergens in de boom. Zie functie _dirlist(). if ($subdir and !is_dir($sub)) { $sub = _dirlist(dirname($sub), preg_replace('/([^0-9a-z]+)$/', '', $subdir) ); } $this->searchdir = _slashjoin($sub, $path); $exists = (file_exists($this->searchdir) and filesize($this->searchdir) > 0); if ($exists) { $this->searchpath = $sub; break; } } $readable = ($exists and is_readable($this->searchdir) ); $soort = ($readable) ? filetype($this->searchdir) : ""; if ($readable and $soort == "file") { $this->cached( join('', file($this->searchdir)) ); $this->error = null; } elseif (!$exists) { $this->error( sprintf("'%s' bestaat niet.", $this->searchdir) ); } elseif (!$readable) { $this->error( sprintf("'%s' kan niet worden gelezen.", $this->searchdir) ); } elseif ($exists && $soort != "file") { $this->error( sprintf("'%s' is geen geldig bestand; %s", $this->searchdir, $soort) ); } return; } function error($str) { $text = sprintf('%s %s [in %s]', $this->me, $str, $_SERVER['SCRIPT_NAME']); $this->error = $text; if ($_SERVER['IS_DEVEL'] and $this->error) error_log($this->error); } function parse($vars = array()) { $vars = $vars + $this->vars; if ($this->searchpath) # Voeg een slash toe aan het einde van het pad - templates verwachten dit! $vars['_searchpath'] = trim(_slashjoin($this->searchpath, ' ')); $match = array(); $repl = array(); foreach(array_keys($vars) as $key){ $match[] = sprintf("/(%%\[%s\]%%)/i", preg_quote($key)); $repl[] = $vars[$key]; } $match[] = '/%\[[^\[\]]+\]%/'; # Catch all $repl[] = ''; return preg_replace($match, $repl, $this->cached()); } function extractData() { $reg = '/<\!--(\s*([^=\s\<\>]+)[\s=]+[\'"]?([^\'"\s\<\>]+))+\s*-->/'; $comment = '/<\!--\s*(.+)\s*-->/'; $fields = '/([^=\s<>]+)[\s=]+([\'\"])?([^\s<>\2]+)/'; if (! preg_match_all($comment, $this->cached(), $found) ) return false; foreach($found[1] as $line) { preg_match_all($fields, $line, $res); for($i=0; $i < sizeof($res[0]); $i++) { $this->vars[$res[1][$i]] = $res[3][$i]; } } return $this->vars; } function cached($str = null) { if (is_null($str)) { #request $do = $this->inf; return ($this->compressed() and $this->ch) ? $do($this->ch) : $this->ch; } $do = $this->def; $this->ch = ($this->compressed()) ? $do($str, 9) : $str; } function compressed() { return ($this->inf || $this->def); } } # EOF ?>