[php]PHP als variable uitvoeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
'k heb een site gemaakt met php en mysql,
ik maak gebruik van index.php, en de variable $bestand, bijv: index.php?bestand=./search/index.php
index.php herkent dat, en laad het externe bestand.
dit doe ik met het comando include()

Maar nu komt het:

in de externe bestanden zit ook PHP code, met het include() comando voert hij deze code direct uit.
Nu wil ik echter dat het op een andere manier gaat gebeuren,
namelijk, dat het externe bestand, eerst in een array (of variable) wordt gestopt.
en daarna wordt uitgelezen.
ik heb dat zo uitgeprobeerd:

PHP:
1
2
3
4
5
6
$fp = fopen("$bestand", "r")
   while (!feof($fp))  
    {  
        $c = $c . fgetc($fp);  
    }
print $c;


de pagina wordt dan wel getoond, maar de php code wordt niet uitgevoerd,
hoe ik fopen ook toepas
hoe kan ik ervoor zorgen dat dit wel kan?

offtopic:
Ja, ik heb gezocht met google,omega search, en php.net

Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 17-09 13:56

beany

Meeheheheheh

:?

De code die je inleest moet uiteindelijk wel worden uitgevoerd? Waarom dan niet direct met een include?

En anders is er een functie in PHP waarmee je PHP code kan uitvoeren die in een variable staat. Ben alleen ff de naam van die functie kwijt. Moet je even opzoeken in de documentatie.

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
beetje vaag.

Waarom pas je het include bestand niet aan zodat het alleen maar functies bevat die je kan aanroepen vanuit het bestand waarmee je include?

Dan hoeft je niet zo moeilijk te doen en gewoon wanneer het je uitkomt een functie vanuit het include bestand aanroepen.

Acties:
  • 0 Henk 'm!

Verwijderd

http://www.php.net/manual/en/function.eval.php ... maar toch raad ik je aan om de file te includen, en om functies erin aan te roepen, zoals al eerder gezegd.

Acties:
  • 0 Henk 'm!

Verwijderd

<?
$file=file("je_bestand");
for($i=0;$<=count($file);$i++){
eval($file[$i]);
}
?>

Hij leest het in een array en evalueert per regel de code.

Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 11:40
Ik heb hetzelfde probleem, ik wil graag een heel php bestand uitlezen als variabele, omdat mijn template parser alleen met variabeles werkt... Hoe doe ik dit, wat Jwtje zei werkt niet :(

|>


Acties:
  • 0 Henk 'm!

  • ReLight
  • Registratie: Augustus 2001
  • Laatst online: 16-09 09:32

ReLight

echo("What Now ? !")

Ehh, let wel op dat eventueel ook externe scripts wellicht uit te voeren zijn in jouw 'include' statement.
Deze xterne scripts zijn wellicht wat minder server vriendelijk.
Altijd het dir.pad naar de include files hard-coden, en liefst ook controleren op input van de variabele. (dus geen http bevat enz.)

[ Voor 3% gewijzigd door ReLight op 15-12-2002 10:37 . Reden: typo ]

Mijn zoon & dochter zijn de toekomst, de rest is tijdsvermaak. Home assistant & & Nibe S2125-12/SMO-S40, RMU-s40 & Tado - Volvo C40 ER, SE


Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
Simon schreef op 15 December 2002 @ 10:24:
Ik heb hetzelfde probleem, ik wil graag een heel php bestand uitlezen als variabele, omdat mijn template parser alleen met variabeles werkt... Hoe doe ik dit, wat Jwtje zei werkt niet :(
Precies, daarom wil ik dus ook een pagina in de variable stoppen :)
stekkel schreef op 15 December 2002 @ 02:18:
beetje vaag.

Waarom pas je het include bestand niet aan zodat het alleen maar functies bevat die je kan aanroepen vanuit het bestand waarmee je include?

Dan hoeft je niet zo moeilijk te doen en gewoon wanneer het je uitkomt een functie vanuit het include bestand aanroepen.
zie reactie hierboven
ReLight schreef op 15 December 2002 @ 10:36:
Ehh, let wel op dat eventueel ook externe scripts wellicht uit te voeren zijn in jouw 'include' statement.
Deze xterne scripts zijn wellicht wat minder server vriendelijk.
Altijd het dir.pad naar de include files hard-coden, en liefst ook controleren op input van de variabele. (dus geen http bevat enz.)
Toch niet als php op safe-mode staat?
Verwijderd schreef op 15 december 2002 @ 02:36:
http://www.php.net/manual/en/function.eval.php ... maar toch raad ik je aan om de file te includen, en om functies erin aan te roepen, zoals al eerder gezegd.
HOe pas je die functie toe op een bestand dan?
zo :?:
PHP:
1
2
3
4
5
6
7
$file = "$bestand";
$fd = fopen ($file,"r");
$buffer = fread($fd,filesize($file));
fclose ($fd);
$buffer = str_replace('"',"'",$buffer);
print eval("\$content = \"$buffer\";");
$affsignup = $content;

Want dan laat hij niks zien :'(

[ Voor 22% gewijzigd door MWP op 15-12-2002 11:30 . Reden: reactie toegevoegd :-) ]


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
<?php
ob_start(); 
include ("het_bestand.php");
$data = ob_get_contents(); 
ob_end_clean();

echo $data;
// of
$tpl->assign ("KEY", $data);
?>

[ Voor 53% gewijzigd door Verwijderd op 15-12-2002 11:29 ]


Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
Verwijderd schreef op 15 december 2002 @ 11:27:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
ob_start(); 
include ("het_bestand.php");
$data = ob_get_contents(); 
ob_end_clean();

echo $data;
// of
$tpl->assign ("KEY", $data);
?>
Hij laat dan direct de pagina in het bestand, en dat is juist niet de bedoeling,
hij moet de pagina in een variable zetten, en deze variable dan op het juiste moment als PHP code behandelen.
Dus als er in bestand.php dit zou staan:
PHP:
1
2
3
<?
print "Hallo, hoesie?";
?>

Dan moet dat in een variable komen, en die moet dan op een ander moment in e code weer worden uitgevoerd.

[ Voor 6% gewijzigd door MWP op 15-12-2002 11:34 . Reden: php code kwam niet goed over ]


Acties:
  • 0 Henk 'm!

Verwijderd

de data komt nu al in een $VARIABLE ...


$data = gevuld met de inhoud van de file.. als je hem dan wil uitvoeren doe je maar iets van EVAL ($data);

Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
Verwijderd schreef op 15 December 2002 @ 11:37:
de data komt nu al in een $VARIABLE ...


$data = gevuld met de inhoud van de file.. als je hem dan wil uitvoeren doe je maar iets van EVAL ($data);
Ja, de data komt in een variable, maar dankzij het includen wordt de data direct weergegeven

Acties:
  • 0 Henk 'm!

  • avoid
  • Registratie: November 2002
  • Laatst online: 14-09 10:39
1) Lees de code die je wilt uitvoeren in in een variabele, inderdaad gewoon via fopen.
2) Zet output buffering aan
3) Evalueer php code
4) Zet output buffering uit

Dus:

$php_code = '';
$fp = fopen('php_code.php', 'r');
while (!feof($fp))
$php_code .= fread($fp, 1024);
fclose($fp);

ob_start();
eval('?>' . $php_code . '<?');
$output = ob_get_contents();
ob_end_clean();

// De variabele '$output' bevat nu de ge-evalueerde PHP code.

print "Uitvoer: $output\n";

Time flies like an arrow, fruit flies like a banana.


Acties:
  • 0 Henk 'm!

Verwijderd

MWP schreef op 15 December 2002 @ 11:43:
[...]

Ja, de data komt in een variable, maar dankzij het includen wordt de data direct weergegeven
hoe kom je er nu bij ... Ob_end_clean zorgt er voor dat het weer gewist word.. lees de code eens voordat je begint te zeuren. . test hem eerst eens.. omfg.. noob.. sorry hoor.. geen onzin gaan uitkramen

Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
Verwijderd schreef op 15 December 2002 @ 12:24:
[...]

hoe kom je er nu bij ... Ob_end_clean zorgt er voor dat het weer gewist word.. lees de code eens voordat je begint te zeuren. . test hem eerst eens.. omfg.. noob.. sorry hoor.. geen onzin gaan uitkramen
Jij bent hier degene die onzin uitkraamt,
als ik dit in een php bestand stop:
PHP:
1
2
3
4
ob_start();  
include ("$bestand"); 
$data = ob_get_contents();  
ob_end_clean();

En ik roep hem zo aan: temp.php?bestand=test2.php
Dan laat hij de include toch zien.(En ja, ik heb de echo eruit gehaald :))
Dus hoezo kraam ik onzin uit :?

Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
avoid schreef op 15 december 2002 @ 12:12:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$php_code = '';
$fp = fopen('php_code.php', 'r');
while (!feof($fp))
   $php_code .= fread($fp, 1024);
fclose($fp);

ob_start();
eval('?>' . $php_code . '<?');
$output = ob_get_contents();
ob_end_clean();

// De variabele '$output' bevat nu de ge-evalueerde PHP code.

print "Uitvoer: $output\n";
Inderdaad, dit is de code waar ik naar zocht!
Ik heb hem alleen iets aangepast:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$php_code = '';
$fp = fopen($bestand, 'r');
while (!feof($fp))
$php_code .= fread($fp, 1024);
fclose($fp);

ob_start();
eval("?>" . stripslashes($php_code) . "<?");
$output = ob_get_contents();
ob_end_clean();

// De variabele '$output' bevat nu de ge-evalueerde PHP code.

print "Uitvoer: $output\n";
(anders krijg je nog foutjes, als er een " of ' in voorkomt :)
(Licht het trouwens aan mij, of heeft php heel veel cpu nodig om deze code uit te voeren?:P)

[ Voor 33% gewijzigd door MWP op 15-12-2002 13:05 ]


Acties:
  • 0 Henk 'm!

  • ReLight
  • Registratie: Augustus 2001
  • Laatst online: 16-09 09:32

ReLight

echo("What Now ? !")

MWP >>

Bij de meeste providers staat safe mode op OFF. En ik geloof niet dat die ini setting dat tegenhield, dat was een andere, die default bij ieder ook gewoon aan staat.
ISP veranderen hun php.ini file niet omdat jou script neit veilig is...

De hoeveelheid onveilige code is toch een groeiend probleem op ISP machines met php voor iedereen.

Mijn zoon & dochter zijn de toekomst, de rest is tijdsvermaak. Home assistant & & Nibe S2125-12/SMO-S40, RMU-s40 & Tado - Volvo C40 ER, SE


Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
ReLight schreef op 15 december 2002 @ 14:38:
MWP >>

Bij de meeste providers staat safe mode op OFF. En ik geloof niet dat die ini setting dat tegenhield, dat was een andere, die default bij ieder ook gewoon aan staat.
ISP veranderen hun php.ini file niet omdat jou script neit veilig is...

De hoeveelheid onveilige code is toch een groeiend probleem op ISP machines met php voor iedereen.
** Hier had ik wat geblaat getypt **
Je hebt inderdaad gelijk, _/-\o_ ik heb de bug hersteld

[ Voor 17% gewijzigd door MWP op 15-12-2002 17:13 ]


Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
Nu dacht ik dus dat het zo goed werkte, echter het tegendeel is waar,
Als er een redelijk groot bestand(inclusief HTML en PHP) moet worden ingeladen & uitgevoerd, is hij daar nogal lang mee bezig, (en krijg ik na 60 sec. dus een Time-out).
Deze code werkt dus toch niet optimaal :'(
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
    $php_code = '';
    $fp = fopen($bestand, 'rb');
    while (!feof($fp))
        $php_code= $php_code .fread($fp,filesize($bestand));
    fclose($fp);
    ob_start();
    eval("?>" . stripslashes($php_code) . "<?");
    $output = ob_get_contents();
    ob_end_clean();
?>

Hoe kan ik er voor zorgen dat hij het bestand in variable $bestand met snel uitleest.

[ Voor 12% gewijzigd door MWP op 16-12-2002 18:34 ]


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Plaats eens wat echo's en druk de huidige tijd af.. en kijk dan eens waar het probleem zit... niet in het inlezen als het goed is....

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
MWP schreef op 15 december 2002 @ 12:52:
[...]


Jij bent hier degene die onzin uitkraamt,
als ik dit in een php bestand stop:
PHP:
1
2
3
4
ob_start();  
include ("$bestand"); 
$data = ob_get_contents();  
ob_end_clean();

En ik roep hem zo aan: temp.php?bestand=test2.php
Dan laat hij de include toch zien.(En ja, ik heb de echo eruit gehaald :))
Dus hoezo kraam ik onzin uit :?
Dan heb je een heel aparte server misschien ondersteunt hij geen output-buffering maar bij mij werkt hij zoals stoel zegt, en misschien moet je in iemand zijn profiel kijken als hij je afkraakt en de postcount kan je over het algemeen zien hoe serieus je iemand kan nemen :) *neem mij dus niet te serieus ;) *

En stoel had misschien ook iets aardiger kunnen zijn.

[ Voor 5% gewijzigd door martinvw op 16-12-2002 18:39 ]


Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
M4rt1nvW schreef op 16 december 2002 @ 18:38:
[...]

Dan heb je een heel aparte server misschien ondersteunt hij geen output-buffering maar bij mij werkt hij zoals stoel zegt, en misschien moet je in iemand zijn profiel kijken als hij je afkraakt en de postcount kan je over het algemeen zien hoe serieus je iemand kan nemen :) *neem mij dus niet te serieus ;) *

En stoel had misschien ook iets aardiger kunnen zijn.
Als server gebruik ik IIS 5 met de laatste PHP versie.(zit output buffering daar dan niet in :?
dusty schreef op 16 december 2002 @ 18:37:
Plaats eens wat echo's en druk de huidige tijd af.. en kijk dan eens waar het probleem zit... niet in het inlezen als het goed is....
Dat werkt helaas niet, want de server geeft op een gegeven moment een timeout.
(Dus er staat geen enkele regel van de geechode tekst op het scherm)
Maar bij de kleinere bestanden doet het het wel, en dan staan alle echo's die ik invoer,
1 voor de while, 1 tijdens de while en nog 1 na de while op hetzelfde aantal seconden.
Dus nogmaals, alleen bij de wat grotere bestanden happert hij.

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
offtopic:
gebruik een goede template parser

Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
/dev/null schreef op 16 December 2002 @ 18:57:
offtopic:
gebruik een goede template parser
offtopic:
Kan ik 'm code zeker weer omgooien! :( nee... bedankt :P(wie weet voor een volgende homepage:))

[ Voor 4% gewijzigd door MWP op 16-12-2002 19:04 ]


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
/dev/null schreef op 16 december 2002 @ 18:57:
offtopic:
gebruik een goede template parser
:)

Acties:
  • 0 Henk 'm!

Verwijderd

wel leuk een aardig maar waar zien we je tags van je tpl engine .. ? ? ?:P .. nu kan je er weinig mee

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
MWP schreef op 16 December 2002 @ 18:56:
[...]

Als server gebruik ik IIS 5 met de laatste PHP versie.(zit output buffering daar dan niet in :?


[...]


Dat werkt helaas niet, want de server geeft op een gegeven moment een timeout.
(Dus er staat geen enkele regel van de geechode tekst op het scherm)
Maar bij de kleinere bestanden doet het het wel, en dan staan alle echo's die ik invoer,
1 voor de while, 1 tijdens de while en nog 1 na de while op hetzelfde aantal seconden.
Dus nogmaals, alleen bij de wat grotere bestanden happert hij.
Weet ik niet misschien iemand anders???

Gebruik de functie om miliseconden weer te geven ipv seconden.

offtopic:
Offtopic okeej maar niet te veel, dit is nu te veel berichten achter elkaar en misterdata als je er zo trots op bent open er dan een topic over want ik zie het namelijk in veel verschillende bericht jou template parser terug komen met soms 700 en soms 800 regels code. :)

[ Voor 18% gewijzigd door martinvw op 16-12-2002 20:10 ]


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Verwijderd schreef op 16 December 2002 @ 19:36:
[...]

wel leuk een aardig maar waar zien we je tags van je tpl engine .. ? ? ?:P .. nu kan je er weinig mee
Heb wel wat templates van een site die m'n engine gebruikt ;) http://www.qprcostcontrol.nl/themes/ en dan alle .tpl bestanden :)

Acties:
  • 0 Henk 'm!

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:43
MisterData schreef op 16 December 2002 @ 20:40:
[...]

Heb wel wat templates van een site die m'n engine gebruikt ;) http://www.qprcostcontrol.nl/themes/ en dan alle .tpl bestanden :)
Kunnen we weer ontopic plz?? ;)
Pagina: 1