<?php

// ------------------------------------------------------------------------- //
// Une classe pour "dumper" une partie de vos scripts                        //
// ------------------------------------------------------------------------- //
// Auteur: Ben                                                               //
// Email:  mrben@disco2k.net                                                 //
// Web: http://www.disco2k.net                                               //
// ------------------------------------------------------------------------- //

// Supposons que votre script initial soit de cette forme :

header();
gros_job_sql();
footer();

?>

<?php

// Pour dumper (cacher, enregistrer dans un fichier) le "gros_job_qsl", écrivez :

header();
require
'exodumpinline.php';
$exodp = new exoDumpInline();
if(
$exodp->start()) {
  
gros_job_sql();
  
$exodp->end();
}
footer();

// Et tout ce qui devrait être affiché par le gros_job_sql sera redirigé dans
// un fichier qui se mettra à jour tous les "lifeTime" secondes.

?>

<?php

// ------------------------------------------------------
// Et en remplacant la déclaration de la classe par :
// $exodp = new exoDumpInline('job_sql_'.$ID_Membre);
// vous aurez un dump par membre (ou ce que vous voulez).
// ------------------------------------------------------

class exoDumpInline {

// chemin vers le répertoire des dumps
var $dirDump = './';

// extension des dumps
var $extDump = '.exodump';

// temps de vie des dumps en secondes
var $lifeTime = 600;

// chemin vers phpself (ne pas toucher)
var $pathDumped;

// pointeur
var $fpTo = 0;

// constructeur
function exoDumpInline($newPath = '', $newLTime = 0) {

  
// mise à jour des paramètres
  
if ($newPath)
    
$this->pathDumped = $this->dirDump . $newPath .$this->extDump;
  else
    
$this->pathDumped = $this->dirDump.basename(getenv('PATH_INFO')).$this->extDump;
  if (
$newLTime)
    
$this->lifeTime = $newLTime;
}

// test & début du stream
function start() {

  if (
filemtime($this->pathDumped) > time() - $this->lifeTime) {
    
readfile($this->pathDumped);
    return
0;
  }
  
ob_start();
  
ob_implicit_flush(0);
  
  return
1;
}

// fin du stream et sauvegarde
function end() {

  
$this->fpto = @fopen($this->pathDumped, 'w');
  
$contents = str_replace('  ', ' ', ob_get_contents());
  
$contents = str_replace("\t", '', $contents);
  
$contents = str_replace("\n", '', $contents);
  
$contents = str_replace("\r", '', $contents);
  
fwrite($this->fpto, $contents);
  
fclose($this->fpto);
  
ob_end_flush();

}
}

// Exemple
//
// $exodp = new exoDumpInline();
//
// if($exodp->start()) {
//
?>
// <p>Voilà du contenu sauvé dans <?= $exodp->pathDumped ?>
// pour <? echo floor($exodp->lifeTime / 60) ?> minutes.<br>
// Quelle heure est-il ? <? echo date('H:i') ?></p>
// <?
// $exodp->end();
// }
//
?>
// <p><i>En fait, il est <? echo date('H:i') ?>.</i></p>
// <?
// --------------
//

?>