Valider fb46196a rédigé par Fil's avatar Fil
Parcourir les fichiers

nouvelle methode ob_...

Elle permet au script suivant de fonctionner :

<?php

	//
	// Ce script s'execute lentement, et si SPIP est en mode 'buffered'
	// on n'obtient normalement les resultats qu'a la fin du calcul ; mais
	// on a ajoute la commande spip_ob_flush() de maniere a flusher le
	// resultat au fur et a mesure...
	// (NB: en contrepartie on perd la compression)
	//

	$q = spip_query('SELECT * FROM spip_articles LIMIT 0,10');
	while ($r = spip_fetch_array($q)) {
		echo "<br>".$r[titre];
		for ($i=0; $i< 80000; $i++) echo ' '; // pour simuler un peu de contenu

		## commenter la ligne ci-dessous pour tester en mode habituel
		spip_ob_flush();
		sleep(1);
	}

?>
parent 8cb5bbe0
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+3 −17
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -2888,7 +2888,9 @@ function fin_html() {
	}

	echo "</body></html>\n";
	flush();

	if ($GLOBALS['flag_ob'])
		@ob_end_flush();
}


@@ -2899,22 +2901,6 @@ function fin_page($credits='') {

	echo "</td></tr></table>";

	// ici le javascript des popup multilingues.
	if ($multi_popup) {
		echo "<script type='text/javascript'><!-- \n";
		echo "function openmulti(i) {\n";

		/*	// desactivation de ce truc pas fini ; il faudrait
			// afficher le texte i dans une fenetre du type
			// http://www.dynamicdrive.com/dynamicindex11/abox.htm
		echo "textes_multi = new Array;\n";
		echo $multi_popup;
		echo "alert (textes_multi[i]);";
		*/
		echo "}\n";
		echo "// --></script>\n";
	}

	debut_grand_cadre();

	echo "<div align='right' class='verdana2'>";
+26 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -454,7 +454,7 @@ function tester_upload() {
// si un buffer est deja ouvert, stop
if ($flag_ob AND !strlen(@ob_get_contents())) {
	@header("Vary: Cookie, Accept-Encoding");
	@ob_start("spip_ob_function");
	@ob_start("spip_ob_handler");
} else {
	$flag_ob = false;
	@header("Vary: Cookie");
@@ -463,8 +463,14 @@ if ($flag_ob AND !strlen(@ob_get_contents())) {
//
// La fonction elle-meme
//
function spip_ob_function ($page) {
function spip_ob_handler ($page) {
	global $var_recherche, $flag_pcre, $flag_preserver, $flag_ecrire;
	static $buffer_continuation = false;

	// buffer de continuation ?
	global $ob_send;
	if ($ob_send)
		$buffer_continuation = true;

	// Surligner les mots sur le site public
	if ($var_recherche AND $flag_pcre AND !$flag_preserver AND !$flag_ecrire) {
@@ -475,6 +481,8 @@ function spip_ob_function ($page) {

	// Tests compression
	$use_gz = $GLOBALS['auto_compress'] && $GLOBALS['flag_obgz']
	// pas de continuation detectee
	&& !$buffer_continuation
	// special bug de proxy
	&& !eregi("NetCache|Hasd_proxy", $HTTP_VIA)
	// special bug Netscape Win 4.0x
@@ -488,12 +496,25 @@ function spip_ob_function ($page) {
	if ($use_gz AND ($page_gz = @ob_gzhandler($page,5)) !== false)
		$page = $page_gz;

	# spip_log('Content-Length: '.strlen($page).($page_gz? ', compression':''));
	# spip_log('Content-Length: '.strlen($page).($page_gz? ', compression':'').($buffer_continuation ? ", portion":""));
	if (!$buffer_continuation) {
		@header('Content-Length: '.strlen($page));
		@header('Connection: close');
	}

	return $page;
}

// La fonction ci-dessous permet a un script de flusher ses resultats partiels
// (en contrepartie cela desactive la compression)
function spip_ob_flush() {
	$GLOBALS['ob_send'] = true;
	ob_end_flush();
	ob_start('spip_ob_handler');
}



class Link {
	var $file;
	var $vars;
+0 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -378,7 +378,6 @@ if (abs($t_jour - date('d')) > 2) {
if (!$bonjour) {
	if ($optimiser == 'oui' || (time() - lire_meta('date_optimisation')) > 24 * 3600) {
		if (timeout('optimisation')) {
			@flush();
			ecrire_meta("date_optimisation", time());
			ecrire_metas();
			include ("optimiser.php3");