ugrás a tartalomhoz

PHP kimenet: böngésző helyett file-ba

Anonymous · 2006. Május. 18. (Cs), 14.31
Először is bocs, hogy ezért új topic-ot nyitok, de már fél órája keresem a manualban és képtelen vagyok rálelni. Tehát a kérdés, hogy tudom megoldani, hogy a PHP programom kimenete ne a böngészőbe menjen, hanem az a karaktersorozat, amit a böngésző kapna meg, az íródjon ki egy file-ba?
 
1

output buffering

janoszen · 2006. Május. 18. (Cs), 14.49
Hali!

A kód elejére egy ob_start();

a végére egy $valtozo = ob_get_contents(); ob_end_clean(); és a $valtozo tartalmát után a filekezelő függvények segítségével kiírod.
2

konkréten

bbalint · 2006. Május. 19. (P), 11.00

<?php
 ob_start();
 
 // itt csinálsz valamit a program
 
 $tartalom = ob_get_contents(); // eddig kiírt dolgok beírása a változóba
 
 $fp = fopen('valami.file', 'wb'); // a 'valami.file' nevű file megnyitásra írásra
 fwrite($fp, $tartalom); // kiírt dolgok file-ba írása
 
 ob_end_clean(); // kimeneti bufferelés megszüntetése, illetve az eddig kiírt dolgok törlése
?>

<?php
 /*
  "rosszabb" megoldás: minden kimenet kiírása egyből a filébe:
  ez esetben elég a program elejére elhelyezni az aláb kódot
 */
 
 function énKicsiKimenetKezelőFüggvényem($kimenet){ // kimenetet kezelő függvényünk; a neve bármilyen függvénynév lehet jól
  static $fp = null; // a függvény meghívásai között ez a változó megmarad; ebbe lesz beletéve a file mutató...
  
  if(!$fp) // ... ha még nincs filemutató, akkor
   $fp = fopen('valami.file', 'wb'); // létrahozzuk
  
  fwrite($fp, $kimenet); // kimenő dolog beírása
  
  return($kimenet); // visszaadjuk a dolgot a PHP-nak, tényleges kiiratásra; ha ezt a return()-t lehagyod, akkor nem fog kiírni semmit a program
 }
 
 ob_start('énKicsiKimenetKezelőFüggvényem'); // kimenet-bufferelés énKicsiKimenetKezelőFüggvényem segítségével
?>