Skip to content
Extraits de code Groupes Projets
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
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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'>";
......
......@@ -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':''));
@header('Content-Length: '.strlen($page));
@header('Connection: close');
# 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;
......
......@@ -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");
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter