Archief - PHP: parsing

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

m3rlin

Legacy Member
Hey

Ik vroeg me af of er geen manier is om php code te parsen tijdens het echo'en ervan. Dus dat je eigenlijk (om mijn situatie ff tot het meest simpele te herleiden) dit krijgt :

PHP:
// php code komt in $str terecht
$str = "echo (\"<h1>TEST</h1>\")";
echo $str;
met als output : TEST
is dit mogelijk ? Anders zal het code herschrijven worden :)


(ik lees namelijk een gehele pagina in een variabele, om die dan te echo'en)

killgore

Legacy Member
m3rlin zei:
Hey

Ik vroeg me af of er geen manier is om php code te parsen tijdens het echo'en ervan. Dus dat je eigenlijk (om mijn situatie ff tot het meest simpele te herleiden) dit krijgt :

PHP:
// php code komt in $str terecht
$str = "echo (\"<h1>TEST</h1>\")";
echo $str;
met als output : TEST
is dit mogelijk ? Anders zal het code herschrijven worden :)


(ik lees namelijk een gehele pagina in een variabele, om die dan te echo'en)
daarvoor hebben ze de functie eval uitgevonden :).

eval('echo "<h1>TEST</h1";'); zal doen wat jij wilt

let wel: eval voert phpcode uit, geeft ze dus niet terug in een string.

Om volledig jouw vb. over te nemen hebben we nog eens ob nodig:
PHP:
ob_start();
eval('echo "<h1>TEST</h1";');
$str = ob_get_contents();
ob_end_clean();
echo $str;

m3rlin

Legacy Member
Thanks !


Maar m'n voorbeeld was blijkbaar te simpel:/ Wat ik doe is een volledig bestaand script uitlezen in een variabele, met de bedoeling die dan te echo'en (met uitvoer). Blijkbaar geeft dat een probleem want hij begint te neuten op al m'n vishaken...Dus ik vermoed dat een volledige file + uitvoering niet mogelijk zal zijn?


*** MOD : heb hier net wat zitten rondzien @ php.net en de enige toepassingskes er op zijn zoals het voorbeeldje. Met een paar commando's dus. Net met een ganse php file...

Squall-sX-

Legacy Member
Kun je die file dan niet gewoon includen?

PHP:
include "mapstructuur/bestaand_script.php";

m3rlin

Legacy Member
neen want ben hier OO bezig en zou die pagina in de $mBody variabele van m'n klasse Pagina moeten steken... (om die dan nadien via m'n instantie die weer op te vragen)

maar ter verduidelijking : het is effectief de werkingswijze van een include die'k zou moeten hebben... :)

killgore

Legacy Member
wel:

$str = file_get_contents("http://www.jouwdomein.com/jouwsubmap/jouwteincludenfile.php");

dan parset ie in principe eerst de php code :) (let wel dat je alles vanaf http:// gebruikt he :p).het kan wel zijn dat je wat moet chmodden :).

m3rlin

Legacy Member
nog een klein vraagje : Waarom voert hij dit niet uit ? (bij het ophalen van m'n form)

PHP:
$user = new Gebruiker()

$veld = "setVnaam('xx')";
eval($user->$veld);


De bedoeling is dus dat hij automatisch de property die in $veld staat oproept. Geen error, maar ook geen uitvoering blijkbaar...(naam wordt niet geset)

(ps: ook weer effe verkort uiteraard)

dJeez

Legacy Member
Waarom zou je dat in 's hemelsnaam willen doen? Dergelijke zaken zijn echt af te raden (vraag mij af of 't in PHP5 zelfs nog kan/mag).

Nu ja, de enige manier mij bekend waarop dat zou werken is de volgende :
PHP:
$veld = "setVnaam"; 
eval($user->$veld('xx'));

killgore

Legacy Member
hum:

tis $user->veld, niet $user->$veld (i assume you're working IN class).

PHP:
$veld = "setVnaam('xx');"; // Fout 1: een eval heeft correcte php-code nodig he, dus OOK ;!
eval($user->veld);  // Fout 2: zie boven :p

m3rlin

Legacy Member
dJeez zei:
Waarom zou je dat in 's hemelsnaam willen doen? Dergelijke zaken zijn echt af te raden (vraag mij af of 't in PHP5 zelfs nog kan/mag).


PHP:
     var $user = new Gebruiker();
	foreach($_POST as $veld => $waarde) {
		$veld = substr($veld,3);
		if($veld != "Submit") {
			$veld = "set$veld(\"$waarde\");";
            eval ($user->veld);
		}
    }

only for the lazy bums ;)

maar het schijnt het spijtig genoeg echt niet te doen:/

DarkBone

Legacy Member
Wat dacht je van:

PHP:
if($veld != "Submit") {
    eval ("\$user->set$veld(\"$waarde\");");
}

;)

m3rlin

Legacy Member
Finally, schitterend !

Met het overnemen kreeg ik eerst net dezelfde error als in 1 van m'n eerste pogingen. "Undefined function Vnaam()" >> hij plaatste die "set" er niet bij. Vandaar dat ik dacht van het eerst in een string te gieten en dan zo te gebruiken. De oplossing is blijkbaar de "\" voor $user...

Many thanks ;)

DarkBone

Legacy Member
Die backslash dient enkel om het dollarteken te escapen, zoniet zal php ook proberen om eerste die $set te vervangen. Maar dat mag niet, $setXxxx is een object die buiten de eval gekend is, dus moet je escapen zodat ie niet vervangen wordt.

m3rlin

Legacy Member
yep yep, 'k ben mee ;) Had er enkel blijkbaar niet zelf aan gedacht :/
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan