[PHP / MYSQL] php-code vanuit een string uitvoeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Ik ben al een tijdje aan het proberen om PHP-code in een databaseveld te proppen om deze vervolgens aan te kunnen roepen in een script. Maar het wil niet echt lukken. Of de code wordt letterlijk weergegeven op de pagina of er komt helemaal niets te staan van de code. Na boeken doorgelezen te hebben, php.net doorgewroet te hebben en uiteraard GoT-search gebruikt te hebben heb ik het gevoel dat ik het gewoon over het hoofd gezien heb.

Even een voorbeeld om het te verduidelijken:

In het databaseveld p_code van de tabel tbltest staat: echo "hoi";
Dit haal ik er bijvoorbeeld uit met de standaard code.
PHP:
1
2
3
4
$sql = "SELECT p_code FROM tbltest WHERE p_id = 1";
$result = mysql_query("$sql") or die("Connect error:".mysql_error());
$row = mysql_fetch_array($result);
$code = $row['p_code'];

Maar nu staat er dus in $code het volgende: echo "hoi";
Hoe kan ik er nu voor zorgen dat de opdrachten in $code allemaal als normale PHP-script afgehandeld worden? Vanzelfsprekend is het de bedoeling dat in $code veel grotere bewerkingen komen te staan, de echo is puur als voorbeeld bedoeld.

Ik ben er al achter dat het natuurlijk niet zomaar via echo en print gaat, eval leverde ook niet het juiste resultaat op.

To be determined...


Acties:
  • 0 Henk 'm!

  • Sosabowski
  • Registratie: Juni 2003
  • Laatst online: 18-09 21:03

Sosabowski

nerd

En waarom zou je dat in een DB willen hebben?

The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. -- Bertrand Russell


Acties:
  • 0 Henk 'm!

Verwijderd

eval().

Edit: ik lees net je laatste regel.
Ow, eval zou het toch moeten doen, meer opties heb je niet echt...je zou het filesystem kunnen proberen; code uit database in een tijdelijk .php bestand opslaan en die includen...maar dan kan je inderdaad net zo makkelijk die bestanden permanent aanmaken :).

[ Voor 169% gewijzigd door Verwijderd op 28-10-2004 15:53 ]


Acties:
  • 0 Henk 'm!

  • Kermit.de.Kikker
  • Registratie: Februari 2002
  • Laatst online: 18-09 19:49
Daar hebben ze include files en functies voor uitgevonden.

Waarom in hemelsnaam in een database opslaan, dat is vele malen trager lijkt me. en bovendien nauwelijks te managen.

8)7

Trouwens, volgens mij is het uitvoeren van code die niet pre-compilation aanweizig is niet toegestaan, anders zou je dus ook dmv injection via een url code kunnen laten uitvoeren. Lijkt me niet echt safe

[ Voor 45% gewijzigd door Kermit.de.Kikker op 28-10-2004 15:54 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Inderdaad... waarom in hemelsnaam...

Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
IorGie schreef op 28 oktober 2004 @ 15:50:
En waarom zou je dat in een DB willen hebben?
Ik heb een site waar verschillende soorten content in bestaan, statische en dynamische. Voor die laatste moet ik momenteel gebruik maken van aparte pagina's en dat wil ik dus eigenlijk niet. Daarvoor is het dus nodig dat delen van het PHP-script in de database staan en ook uitgevoerd worden i.p.v. botweg neergezet als plain-text.

edit:

Het verbaasde me een beetje dat niemand zoiets ooit wilde. Maar het is dus voor een site van mn werk en daar is het nu eenmaal zo dat er delen van de content dynamisch moeten zijn en die staan nu nog als een include. Ik vraag me alleen al heel lang af of dat niet anders kan door die paar handelingen die gedaan worden, want het zijn er niet veel op zo'n pagina, gewoon in dat databaseveld te dumpen en uit te laten voeren. Het gaat echt om maar een paar handelingen en dat vind ik geen nieuwe pagina met include waard.

[ Voor 37% gewijzigd door MaNdM op 28-10-2004 15:59 ]

To be determined...


Acties:
  • 0 Henk 'm!

Verwijderd

MaNdM schreef op 28 oktober 2004 @ 15:53:
Ik heb een site waar verschillende soorten content in bestaan, statische en dynamische. Voor die laatste moet ik momenteel gebruik maken van aparte pagina's en dat wil ik dus eigenlijk niet. Daarvoor is het dus nodig dat delen van het PHP-script in de database staan en ook uitgevoerd worden i.p.v. botweg neergezet als plain-text.
Dat is helemaal niet gek ik (ten minste: mijn systemen) doe dat dagelijks. Gewoon eval voor gebruiken...

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

dan hoop ik dat je query's goed beveiligd zijn tegen sql-injection...

[ Voor 8% gewijzigd door Bosmonster op 28-10-2004 15:58 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Bosmonster schreef op 28 oktober 2004 @ 15:57:
dan hoop ik dat je query's goed beveiligd zijn tegen sql-injection...
PHP-injection zul je dan waarschijnlijk bedoelen ;-)

Geen zorg, dat zijn geen instructies waar gewone gebruikers bijkunnen.

Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Verwijderd schreef op 28 oktober 2004 @ 15:56:
[...]


Dat is helemaal niet gek ik (ten minste: mijn systemen) doe dat dagelijks. Gewoon eval voor gebruiken...
Ik kwam met eval niet erg ver. Enkel wat strings in een string vullen met waardes lukte. Maar een functie laten uitvoeren werkte bij mij niet. Zou je misschien kunnen laten zien hoe dat moet d.m.v. een voorbeeld?

SQL-injection wordt voorkomen. nvm

To be determined...


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 21-09 00:18
Fwrite die sjit, zet er <?php en ?> bij, en include 't...

|>


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Of maak van je code delen includes en gebruik een commando in je code om dit te vervangen met het resultaat van de betreffende include.

[include:inc_dynamischspul.php] bijvoorbeeld

Kun je tenminste zelf nog bepalen van waar de code geinclude kan worden (om beveiliging te verbeteren). Bovendien kun je je code dan gewoon in een editor maken/bewerken ipv dit omslachtig in een database te proberen.

Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Simon schreef op 28 oktober 2004 @ 16:05:
Fwrite die sjit, zet er <?php en ?> bij, en include 't...
Als laatste mogelijkheid zou dat inderdaad kunnen, maar ik wil het toch graag op de andere manier doen. Het zou moeten kunnen en ik weet niet hoe, dus dat wil ik dan leren ;)
Bosmonster schreef op 28 oktober 2004 @ 16:11:
Of maak van je code delen includes en gebruik een commando in je code om dit te vervangen met het resultaat van de betreffende include.

[include:inc_dynamischspul.php] bijvoorbeeld

Kun je tenminste zelf nog bepalen van waar de code geinclude kan worden (om beveiliging te verbeteren). Bovendien kun je je code dan gewoon in een editor maken/bewerken ipv dit omslachtig in een database te proberen.
Op dit moment hangt het al van includes aan elkaar en dat is nu precies waarvan ik me afvraag of het wel per se nodig is. Voor een enkele functie die gedaan wordt zoals een berekening met gebruikerspecifieke getallen, vind ik het ver gaan om daar een aparte pagina voor te maken. Het gaat mij erom dat ik niet die extra pagina nodig zou hebben voor 1 functieaanroep.

[ Voor 58% gewijzigd door MaNdM op 28-10-2004 16:17 ]

To be determined...


Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Ik wachtte eigenlijk op Xenna's antwoord op mijn probleem en helaas staat er geen emailadres in het profiel. Dus vandaar een subtiel schopje.

To be determined...


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom werkte eval niet? Je zegt dat simpele voorbeeldjes wel werkten, maar ingewikkeldere stukken code niet. Weet je zeker dat er geen syntaxfoutjes in die grotere lap code zaten? Eval lijkt me in ieder geval de enige logische oplossing voor een ook in mijn ogen nogal onlogisch vraagstuk, ik zou geen enkele toepassing weten voor zoiets. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Zie wat posts hoger, strings vullen lukte met eval wel, maar een functie laten uitvoeren was niet mogelijk met eval. Het nut hiervan staat door alle postings verspreid, maar in het kort komt het erop neer dat ik content heb waarin hooguit 1 functieaanroep nodig is en ik daarvoor niet van plan ben om een nieuwe pagina + include aan te maken.

To be determined...


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dat heb ik allemaal ook wel gelezen, maar ik vind het nog steeds nergens voor nodig, maja ik ken je situatie ook niet. :P

En hoezo is het uitvoeren van een functie niet mogelijk met eval? Eval kan zelfs classes aanmaken (inclusief functies) en gebruiken, zoals in de usernotes van de documentatie staat:
When using Dynamic Proxy design pattern we must create a class automaticly. Here is a sample code.

$clazz = "class SomeClass { var \$value = 'somevalue'; function show() { echo get_class(\$this);}}";

eval($clazz);

$instance = new SomeClass;

// Here output 'somevalue';
echo $instance->value;

echo "<br>";

//Here output 'someclass'
$instance->show();

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

MaNdM schreef op 31 oktober 2004 @ 22:11:
Ik wachtte eigenlijk op Xenna's antwoord op mijn probleem en helaas staat er geen emailadres in het profiel. Dus vandaar een subtiel schopje.
En het werkt nog ook...

Ik gebruik het niet voor functieaanroepen.

Mijn toepassing is ook een CMS. Soms wil je een attribuut van een bepaalde pagina aanpassen zonder dat je voor ieder attribuut een db veld wilt aanmaken. Daarom kunnen de (trusted) CMS beheerders variabelen in een daarvoor bestemd veld opnemen, zoiets als:

$margin=40; $sort='date'

Vervolgens wordt in de display methodes eval("$node[eval];"); uitgevoerd om de code uit te voeren. Simpel en effectief. Niet bepaald veilig misschien, maar zoals gezegd de beheerders zijn 'trusted'.

Mijn CMS is trouwens alles behalve standaard. Het is nogal een weirde boomstructuur waarin pagina's en items allemaal een eigen 'node' hebben. Items op een pagina zijn children van die pagina. De layout is weer een aparte laag die er op URL-basis overheen wordt gelegd. Het basisidee is heel simpel maar je kunt er aardig ingewikkelde sites mee bouwen.

Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Verwijderd schreef op 01 november 2004 @ 08:18:
[...]


En het werkt nog ook...

Ik gebruik het niet voor functieaanroepen.

Mijn toepassing is ook een CMS. Soms wil je een attribuut van een bepaalde pagina aanpassen zonder dat je voor ieder attribuut een db veld wilt aanmaken. Daarom kunnen de (trusted) CMS beheerders variabelen in een daarvoor bestemd veld opnemen, zoiets als:

$margin=40; $sort='date'

Vervolgens wordt in de display methodes eval("$node[eval];"); uitgevoerd om de code uit te voeren. Simpel en effectief. Niet bepaald veilig misschien, maar zoals gezegd de beheerders zijn 'trusted'.

Mijn CMS is trouwens alles behalve standaard. Het is nogal een weirde boomstructuur waarin pagina's en items allemaal een eigen 'node' hebben. Items op een pagina zijn children van die pagina. De layout is weer een aparte laag die er op URL-basis overheen wordt gelegd. Het basisidee is heel simpel maar je kunt er aardig ingewikkelde sites mee bouwen.
Bij mij is het geval dat ik in een content dus wel een functie wil kunnen zetten. Om een voorbeeld te geven heb ik een functie GetDocs($search) en met eval kan ik momenteel alleen $search laten vervangen voor de zoekterm/zoektermen. Maar de functie zelf kan niet uitgevoerd worden. Op dit moment staat dit als een aparte pagina documents.php die door een include gebruikt wordt. Ik weet dus niet of het mogelijk is maar ik zou graag willen weten hoe ik die functie GetDocs() kan laten uitvoeren binnen een variabele als het ware.

To be determined...


Acties:
  • 0 Henk 'm!

Verwijderd

MaNdM schreef op 01 november 2004 @ 09:56:
Bij mij is het geval dat ik in een content dus wel een functie wil kunnen zetten. Om een voorbeeld te geven heb ik een functie GetDocs($search) en met eval kan ik momenteel alleen $search laten vervangen voor de zoekterm/zoektermen. Maar de functie zelf kan niet uitgevoerd worden. Op dit moment staat dit als een aparte pagina documents.php die door een include gebruikt wordt. Ik weet dus niet of het mogelijk is maar ik zou graag willen weten hoe ik die functie GetDocs() kan laten uitvoeren binnen een variabele als het ware.
Nou, vooruit, even proberen dan:

PHP:
1
2
3
4
5
6
7
8
9
function doit($a) {

        return strtoupper($a);
}

$x='hallo wereld!';
$s='$x=doit($x);';
eval($s);
echo $x;


Resultaat: HALLO WERELD!

Conclusie: ik zie het probleem niet...

Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Momenteel heb ik even de middelen niet maar donderdag ga ik op mn werk ermee aan de slag. Ik zal posten of het gelukt is, tot zover mijn dank voor de hulp.

To be determined...


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Is het niet gewoon een idee om gebruik te gaan maken van een CMS wat zo krachtig is dat je dit soort noodgrepen niet meer toe hoeft te passen?

Acties:
  • 0 Henk 'm!

Verwijderd

djluc schreef op 01 november 2004 @ 21:24:
Is het niet gewoon een idee om gebruik te gaan maken van een CMS wat zo krachtig is dat je dit soort noodgrepen niet meer toe hoeft te passen?
Je bedoelt de oplossing die alle oplossingen overbodig maakt? De silver bullet van het webbeheer? Dat zou fantastisch zijn! Hoe heet dat wonder pakket van jou? PHP?

Acties:
  • 0 Henk 'm!

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 05-08 09:21

Not Pingu

Dumbass ex machina

@TS: is de code die je in de database opslaat sterk wisselend of op maat voor elke situatie? Anders zou je kunnen overwegen om met een soort modulesysteem te werken: een aantal modules in je DB die elk naar een php bestand verwijzen dat een bepaalde functionaliteit bevat. Een pagina maakt dan gebruik van een of meerdere modules die je dan dynamisch kunt includen.

Certified smart block developer op de agile darkchain stack. PM voor info.


Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Gunp01nt schreef op 01 november 2004 @ 22:12:
@TS: is de code die je in de database opslaat sterk wisselend of op maat voor elke situatie? Anders zou je kunnen overwegen om met een soort modulesysteem te werken: een aantal modules in je DB die elk naar een php bestand verwijzen dat een bepaalde functionaliteit bevat. Een pagina maakt dan gebruik van een of meerdere modules die je dan dynamisch kunt includen.
Doorgaans werk ik met een functions.php waar de zelfgeschreven functies in staan. Met modules verwijzen naar functionaliteiten in pagina's is leuk maar net niet wat ik bedoel. Nogmaals, ik wilde weten of het mogelijk was of het ook zonder extra pagina's kon.

@Xenna: wat er in mijn $string zit is bijvoorbeeld:
code:
1
<p>Zoekresultaten:</p><p class="results"><?PHP GetDocs($search); ?></p>

Dit kan dan in een een veld van de database staan zodat er geen documents.php meer nodig is aangezien die functie GetDocs() al gedefinieerd is in functions.php zodat ik het te allen tijde aan kan roepen. Maar zoals gezegd, ik heb momenteel even de middelen niet dus ik probeer het donderdag uit wat je een paar posts terug uitgelegd hebt, hopelijk werkt het met deze situatie ook want dit verschilt toch met jouw voorbeeld. We zullen wel zien.

To be determined...


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Verwijderd schreef op 01 november 2004 @ 22:07:
[...]Je bedoelt de oplossing die alle oplossingen overbodig maakt? De silver bullet van het webbeheer? Dat zou fantastisch zijn! Hoe heet dat wonder pakket van jou? PHP?
Het is meer een goedbedoelde hint om misschien eens te kijken of je wel werkelijk dit probleem moet gaan oplossen of dat je misschien beter met een krachtiger systeem kan gaan werken wat dit soort zaken al ingebouwd heeft. Wat jij er verder van maakt mag je zelf weten.

Acties:
  • 0 Henk 'm!

Verwijderd

MaNdM schreef op 01 november 2004 @ 22:25:
Doorgaans werk ik met een functions.php waar de zelfgeschreven functies in staan. Met modules verwijzen naar functionaliteiten in pagina's is leuk maar net niet wat ik bedoel. Nogmaals, ik wilde weten of het mogelijk was of het ook zonder extra pagina's kon.

@Xenna: wat er in mijn $string zit is bijvoorbeeld:
code:
1
<p>Zoekresultaten:</p><p class="results"><?PHP GetDocs($search); ?></p>
Dat is geen PHP, dat is HTML met een beetje PHP erin. De eval() functie begint in PHP mode, dus daar moet je eerst uit. Vervolgens heb je nog een echo nodig om uberhaupt wat te zien.
PHP:
1
2
3
4
5
6
7
8
function doit($a) {
        return strtoupper($a);
}

$x='hallo wereld!';
$s='?><p>Zoekresultaten:</p><p class=results><? echo doit($x) ?></p><?';
eval($s);
echo $x;

Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Verwijderd schreef op 02 november 2004 @ 07:42:
[...]

De eval() functie begint in PHP mode, dus daar moet je eerst uit.
Hey dat is een goede tip, ik ga het asap proberen.

To be determined...


Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Om te beginnen quote ik even het voorbeeld van Xenna waarmee ik begonnen ben. Het heeft zeker geholpen echter moest er toch nog het een en ander aangepast worden. Maar nu werkt het dan toch
Verwijderd schreef op 02 november 2004 @ 07:42:
PHP:
1
2
3
4
5
6
7
8
9
10
<?PHP
function doit($a) {
        return strtoupper($a);
}

$x='hallo wereld!';
$s='?><p>Zoekresultaten:</p><p class=results><? echo doit($x) ?></p><?';
eval($s);
echo $x;
?>
Ik heb het geprobeerd en ben tot de volgende aanpak gekomen. Xenna heel erg bedankt voor de tips en hulp. Het eindresultaat is toch ietsje anders geworden.
PHP:
1
2
3
4
5
6
7
8
9
10
<?PHP
session_start();
require_once('inc/constants.inc');
require_once(FILE_FUNCTIONS);
ConnectDataBase();

$s='?><p>Zoekresultaten: </p><?PHP SearchDoc($search); ?><p>Zoekactie
geslaagd</p><?PHP ';
eval($s);
?>

Waar ik al snel achter kwam is dat het heel belangrijk is dat als je in de string een combinatie van PHP en HTML hebt staan er dus bij de laatste 'opening' van PHP een spatie erachter moet komen te staan. Anders is je output helemaal leeg. En de laatste echo (echo $x) uit het laatste voorbeeld van Xenna hoort er niet bij.

To be determined...


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Ik zou het dan eerder op een template-achtige manier doen:

PHP:
1
2
$s = '<p>Zoekresultaten: </p>{SearchDoc}<p>Zoekactie geslaagd</p>';
$s = str_replace('{SearchDoc}', SearchDoc($search), $s);

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Interessant, alleen nu komen de woorden 'Zoekresultaten' etc. niet meer voor in de output om een of andere reden. Ereg_replace en eregi_replace geven hierbij ook geen soelaas. Beetje vreemd dus.

To be determined...


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

:?

PHP:
1
2
3
4
5
6
7
8
9
10
11
function SearchDoc($string)
{
  return '<p>Dummy: ' . $string . '</p>';
}

$search = 'test';

$s = '<p>Zoekresultaten: </p>{SearchDoc}<p>Zoekactie geslaagd</p>'; 
$s = str_replace('{SearchDoc}', SearchDoc($search), $s);

echo $s;

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 22:37

MaNdM

1000-dingen-doekje

Topicstarter
Dat voorbeeld werkt wel. In de functie die ik aanroep wordt het een en ander anders afgehandeld en ik denk dat daar het verschil in zit. In die functie wordt geen gebruik gemaakt van return dus misschien dat hij daarom het anders aanpakt. Template oplossing is zonder twijfel de mooiste oplossing van de twee en gaat dus in ontwikkeling.

To be determined...


Acties:
  • 0 Henk 'm!

Verwijderd

MaNdM schreef op 04 november 2004 @ 10:44:
Waar ik al snel achter kwam is dat het heel belangrijk is dat als je in de string een combinatie van PHP en HTML hebt staan er dus bij de laatste 'opening' van PHP een spatie erachter moet komen te staan. Anders is je output helemaal leeg. En de laatste echo (echo $x) uit het laatste voorbeeld van Xenna hoort er niet bij.
Dat komt doordat ik het persoonlijk beter vind dat functies een string teruggeven die je dan vervolgens eventueel direct kunt printen met 'echo' of waarmee je iets anders kunt doen (in een DB of file stoppen bijv.).

De PHP auteurs komen daar ook langzaam achter, wat je kunt zien aan de geschiedenis van de print_r() funtie. Eerst printte die zelf, maar later kwam er een optie bij om het resultaat als string terug te geven.

Niet slim, n.m.m., altijd een stringresultaat teruggeven geeft je de meeste flexibiliteit.
Pagina: 1