Toon posts:

[PHP] php file omzetten naar HTML

Pagina: 1
Acties:
  • 155 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Het komt er in het kort op neer dat ik een php file wil omzetten naar HTML zonder dat deze file in een browser geopend wordt.

ik heb een php file zeg zoiets (naam is test.php):
code:
1
2
3
<?
echo "testtest";
?>


Hieruit komt natuurlijk 'testtest'.

Deze string wil ik dan in een e-mail naar iemand sturen dus dan doe ik:
code:
1
2
3
4
$filename = "test.php";
$fd = fopen ($filename, "r");
$contents = fread ($fd, filesize ($filename));
fclose ($fd);


Maar in contents staat dan niet testtest.

  • EL_Loco
  • Registratie: Oktober 2001
  • Laatst online: 08-11-2023

EL_Loco

alias Haco

als je dat is met bv $blaat = "testtest"; doet :?

rumores non hiatus dremelunt
malleo omnia consentiunt
Lid van het Anti-Jamba front!


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
Kijk es naar het gebruik van ob_***() en include()

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 08:32
Limhes schreef op 05 oktober 2002 @ 21:09:
Kijk es naar het gebruik van ob_***() en include()
Lijkt mij dat include hier geen f*ck mee te maken heeft. ob_*** wél, maar gewoon in combinatie met readfile

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
ddc schreef op 05 oktober 2002 @ 21:57:Lijkt mij dat include hier geen f*ck mee te maken heeft. ob_*** wél, maar gewoon in combinatie met readfile
volgens mij heeft hij meer aan output buffering i.c.m. include, aangezien het bestand in kwestie geparset moet worden.

Pas de replâtrage, la structure est pourrie.


  • Kwai_gon_jinn
  • Registratie: Januari 2001
  • Niet online

Kwai_gon_jinn

[-geen icon-]

$fd = fopen ($filename, "rb");

die "b" in fopen zou misschien helpen.. als ut om een windows bak gaat..

Confucius said: "In ancient time, learning was for self. Nowadays learning is for others."


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

fopen gaat iig niet werken, dus doe geen moeite dat te proberen ;)

De meeste kans geef ik je met outputbuffering en include ala:
PHP:
1
2
3
4
ob_start();
include($file);
$contents = ob_get_contents();
ob_end_clean();

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
zoals ik het doe
$blaat = "testest";

en dan het bestand includen.

en dan de waarde van $blaat emailen
Zoiets als al is gezegd.

Noushka's Magnificent Dream | Unity


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

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


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:50
Ik zie niet in waarom eval (in combinatie met het inlezen van het bestand) beter zou zijn dan het gebruik van include/require (al heeft de eerste waarschijnlijk de voorkeur). Het is in PHP niet mogelijk om de uitvoer van een script direct op te vangen in een variabele, dus er moet hoe dan ook gebruik worden gemaakt van de output control functies.

Eventueel kun je nog iets creatiefs doen met de command line versie van PHP (indien beschikbaar) en de uitvoer daarvan pipen naar het mailprogramma, al zit je dan wel met HTML-headers die je waarschijnlijk niet in je uitvoer wilt hebben. Ook is het op die manier lastiger om fouten af te vangen.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Soultaker schreef op 06 oktober 2002 @ 18:42:
[..]
Het is in PHP niet mogelijk om de uitvoer van een script direct op te vangen in een variabele, dus er moet hoe dan ook gebruik worden gemaakt van de output control functies.

Wahahahahahhahaha.. Je hebt absoluut niet begrepen wat de eval-functie precies doet is het niet?

Eval is hier de makkelijkste oplossing. Je leest de script in een string in, je doet er een eval op en dan heb je alle uitvoer van het script netjes in je variabele staan, betekent dat je het script gewoon netjes online kan hebben staan, en indien nodig de uitvoer van dat script kan emailen. Zonder dat je iets aan de code hoeft te veranderen.

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


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
$faq->addLine("Never doubt dusty");

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

dusty schreef op 06 oktober 2002 @ 21:15:
Wahahahahahhahaha.. Je hebt absoluut niet begrepen wat de eval-functie precies doet is het niet?

Eval is hier de makkelijkste oplossing. Je leest de script in een string in, je doet er een eval op en dan heb je alle uitvoer van het script netjes in je variabele staan, betekent dat je het script gewoon netjes online kan hebben staan, en indien nodig de uitvoer van dat script kan emailen. Zonder dat je iets aan de code hoeft te veranderen.

Wat komt er in $x:

PHP:
1
2
3
4
<?
  $x = eval("echo blaat;");
   echo "x = $x";
?>

?

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Bij gebruik van eval zul je nog steeds ob_*** moeten gebruiken omdat eval naar je browser uitput. ACM's code is dus het makkelijkst (deze post dus ;))

  • Skate2000
  • Registratie: November 1999
  • Laatst online: 29-12-2024
Je kunt dus beter iets includen. Include de file, waarin de variabele staat. Dan zal hij het wel doen.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

FlamerX schreef op 06 oktober 2002 @ 22:13:
Bij gebruik van eval zul je nog steeds ob_*** moeten gebruiken omdat eval naar je browser uitput. ACM's code is dus het makkelijkst (deze post dus ;))
Er zit een groot verschil in: De Scope van de variabelen.

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


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

dusty schreef op 06 oktober 2002 @ 22:50:
Er zit een groot verschil in: De Scope van de variabelen.

Is dat zo?
Ik betwijfel het...

PHP:
1
2
3
4
<?
eval("\$x = 'blaat';");
echo $x;
?>

vs
PHP:
1
2
3
4
5
6
7
8
test.php:
<?
$x = 'blaat';
?>
<?
include('test.php');
echo $x;
?>

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:50
dusty schreef op 06 oktober 2002 @ 21:15:
Wahahahahahhahaha.. Je hebt absoluut niet begrepen wat de eval-functie precies doet is het niet?
Een beetje meer respect doet geen zeer, zeker niet als je zelf weinig begrip schijnt te hebben van 'wat de eval-functie precies doet'.
Je leest de script in een string in, je doet er een eval op en dan heb je alle uitvoer van het script netjes in je variabele staan
Oh? Hoe komt de uitvoer van het script dan in 'je variabele'? Daarvoor zul echt de uitvoer met de output control functions moeten omleiden.

Een include is naar mijn idee equivalent met een eval, met het verschil dat je met een include niet eerst zelf het bestand hoeft in te lezen (wat weer geheugen enzo scheelt).

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:50
dusty schreef op 06 oktober 2002 @ 22:50:
Er zit een groot verschil in: De Scope van de variabelen.
Welk verschil is dat dan?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Soultaker schreef op 06 oktober 2002 @ 22:56:
Oh? Hoe komt de uitvoer van het script dan in 'je variabele'? Daarvoor zul echt de uitvoer met de output control functions moeten omleiden.

Een include is naar mijn idee equivalent met een eval, met het verschil dat je met een include niet eerst zelf het bestand hoeft in te lezen (wat weer geheugen enzo scheelt).

Sterker nog, in de praktijk zal er vrijwel hetzelfde gedaan worden :)
Inhoud van php-file inlezen, de boel via een of andere 'parse' methode sturen en de output naar de buffering-control sturen.

Of dat nou bij de php-code zelf gebeurd of via de include...
Imho is de include dan handiger ;)

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

ACM schreef op 06 oktober 2002 @ 22:59:
[nohtml]
[...]
[/nohtml]
Of dat nou bij de php-code zelf gebeurd of via de include...
Imho is de include dan handiger ;)

Helaas kan dat dus niet met elke script gedaan worden vanwege de scope. Met include zit je binnen dezelfde scope te werken, betekent dus dat je rekening moet houden dat er niet dezelfde variabele namen worden gebruikt in je eigen script en de aangeroepen script. Met eval zit je dus in een andere scope te werken.

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


Verwijderd

Dat is dan wel weer op te lossen door het volgende te gebruiken:
PHP:
1
$contents = join(null, file("http://www.domain.com/test.php"));

Ik blijf eval maar een nare functie vinden :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:50
dusty schreef op 06 oktober 2002 @ 23:35:
Helaas kan dat dus niet met elke script gedaan worden vanwege de scope. Met include zit je binnen dezelfde scope te werken, betekent dus dat je rekening moet houden dat er niet dezelfde variabele namen worden gebruikt in je eigen script en de aangeroepen script. Met eval zit je dus in een andere scope te werken.
Waar haal je die wijsheid vandaan? Niet uit de manual:
php.net over include:
When a file is included, the code it contains inherits the variable scope of the line on which the include occurs. Any variables available at that line in the calling file will be available within the called file, from that point forward.
php.net over eval:
Also remember that variables given values under eval() will retain these values in the main script afterwards.
Niet helemaal hetzelfde, maar het doet vermoeden dat in beide gevallen wijzigingen doorwerken in de broncontext.

In de Zend code, meer precies de functie die die gecompileerde bytecode uitvoert, wordt een include/require opcode afgehandeld door een aanroep van compile_filename en een eval opcode met een aanroep van compile_string.

Zoals de namen al doen vermoeden, doen deze functies iets vergelijkbaars; uiteindelijk roepen ze allebei zendparse aan om de bytecode van de huidige context uit te breiden.

Ik moet zeggen dat ik de code niet in detail heb doorgenomen. Als je toch nog een belangrijk verschil in werking vindt, wil je dan de betreffende functie uit de documentatie of broncode quoten?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

dusty schreef op 06 oktober 2002 @ 23:35:
Helaas kan dat dus niet met elke script gedaan worden vanwege de scope. Met include zit je binnen dezelfde scope te werken, betekent dus dat je rekening moet houden dat er niet dezelfde variabele namen worden gebruikt in je eigen script en de aangeroepen script. Met eval zit je dus in een andere scope te werken.

Nou, overtuig me :)

Voorlopig heb ik dus dezelfde mening als Soultaker.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

I stand corrected, Ik had het een keer ergens gelezen dat het verschil in de scope zat, blijkbaar fout, mijn excuses.

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

Pagina: 1