From 26c91c7394a89a3a4fd61e6e56255b5a94ecdf19 Mon Sep 17 00:00:00 2001 From: skodak Date: Thu, 17 Aug 2006 23:50:18 +0000 Subject: [PATCH] major upgrade logging speed improvement - write buffer implemented --- lib/adminlib.php | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/adminlib.php b/lib/adminlib.php index d44226d1df..c3208bc428 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -403,7 +403,10 @@ function print_progress($done, $total, $updatetime=5, $sleeptime=1, $donetext='' //////////////////////////////////////////////// $upgradeloghandle = false; -global $upgradeloghandle; // needed for access from callback funtion +$upgradelogbuffer = ''; +// I did not find out how to use static variable in callback function, +// the problem was that I could not flush the static buffer :-( +global $upgradeloghandle, $upgradelogbuffer; /** * Check if upgrade is already running. @@ -454,14 +457,19 @@ function upgrade_log_start() { * This function may be called repeatedly. */ function upgrade_log_finish() { - global $upgradeloghandle; + global $upgradeloghandle, $upgradelogbuffer; if (empty($_SESSION['upgraderunning'])) { return; // logging already terminated } @ob_end_flush(); - @fclose($upgradeloghandle); + if ($upgradelogbuffer !== '') { + @fwrite($upgradeloghandle, $upgradelogbuffer); + } + if ($upgradeloghandle and ($upgradeloghandle !== 'error')) { + @fclose($upgradeloghandle); + } @session_start(); // ignore header errors, we only need to reopen session $_SESSION['upgraderunning'] = 0; // clear upgrade indicator if (connection_aborted()) { @@ -477,11 +485,15 @@ function upgrade_log_finish() { * This function must not output any characters or throw warnigns and errors! */ function upgrade_log_callback($string) { - global $CFG, $upgradeloghandle; + global $CFG, $upgradeloghandle, $upgradelogbuffer; if (empty($CFG->disableupgradelogging) and ($string != '') and ($upgradeloghandle !== 'error')) { if ($upgradeloghandle or ($upgradeloghandle = @fopen($CFG->dataroot.'/upgradelogs/upg_'.date('Ymd-Hi').'.html', 'a'))) { - @fwrite($upgradeloghandle, $string); + $upgradelogbuffer .= $string; + if (strlen($upgradelogbuffer) > 2048) { // 2kB write buffer + @fwrite($upgradeloghandle, $upgradelogbuffer); + $upgradelogbuffer = ''; + } } else { $upgradeloghandle = 'error'; } -- 2.39.5