1
0
mirror of https://github.com/e107inc/e107.git synced 2025-04-21 21:21:54 +02:00

cross-browser cache issues

This commit is contained in:
secretr 2011-01-14 12:19:03 +00:00
parent 7918c28698
commit 0c794e2fb4
4 changed files with 25 additions and 117 deletions

View File

@ -18,8 +18,6 @@
// prevent notices/warnings to break JS source
error_reporting(0);
session_cache_limiter('private');
//admin or front-end call
if (strpos($_SERVER['QUERY_STRING'], '_admin') !== FALSE)
{
@ -40,7 +38,6 @@ else
}
if(!e_NOCACHE) session_cache_limiter('private');
else session_cache_limiter('nocache');
//output cache if available before calling the api
e_jslib_cache_out();
@ -69,7 +66,6 @@ exit;
*/
function e_jslib_cache_out()
{
if(e_NOCACHE) return;
$encoding = e_jslib_browser_enc(); //NOTE - should be called first
$cacheFile = e_jslib_is_cache($encoding);
@ -78,6 +74,7 @@ function e_jslib_cache_out()
//kill any output buffering - better performance and 304 not modified requirement
while (@ob_end_clean());
/* IT CAUSES GREAT TROUBLES ON SOME BROWSERS!
if (function_exists('date_default_timezone_set'))
{
date_default_timezone_set('UTC');
@ -89,8 +86,7 @@ function e_jslib_cache_out()
// send last modified date
//header('Cache-Control: must-revalidate');
//header('Last-modified: '.gmdate('r', $lmodified), true);
if($lmodified) header('Last-modified: '.gmdate("D, d M Y H:i:s", $lmodified).' GMT', true);
if($lmodified) header('Last-modified: '.gmdate("D, d M Y H:i:s", $lmodified).' GMT', true);*/
// send content type and encoding
header('Content-type: text/javascript', true);
@ -99,7 +95,9 @@ function e_jslib_cache_out()
header('Content-Encoding: '.$encoding, true);
}
// Expire header - 1 year
if (!e_NOCACHE) header("Cache-Control: must-revalidate", true);
/*// Expire header - 1 year
$time = time()+ 365 * 86400;
//header('Expires: '.gmdate('r', $time), true);
header('Expires: '.gmdate("D, d M Y H:i:s", $time).' GMT', true);
@ -111,8 +109,8 @@ function e_jslib_cache_out()
{
header("HTTP/1.1 304 Not Modified", true);
exit;
}
}*/
$page = @file_get_contents($cacheFile);
$etag = md5($page).($encoding ? '-'.$encoding : '');
@ -120,7 +118,7 @@ function e_jslib_cache_out()
header('ETag: '.$etag, true);
// not modified check by Etag
if (isset($_SERVER['HTTP_IF_NONE_MATCH']))
if (!e_NOCACHE && isset($_SERVER['HTTP_IF_NONE_MATCH']))
{
$IF_NONE_MATCH = str_replace('"','',$_SERVER['HTTP_IF_NONE_MATCH']);

View File

@ -35,7 +35,7 @@ class e_jslib
{
$hash = md5(serialize(varset($pref['e_jslib'])).e107::getPref('e_jslib_browser_cache', 0).THEME.e_LANGUAGE.ADMIN).'_'.$where;
// TODO disable cache in debug mod
$hash .= (e107::getPref('e_jslib_nocache') ? '_nocache' : '').(e107::getPref('e_jslib_gzip') ? '' : '_nogzip');
$hash .= (e107::getPref('e_jslib_nocache') || deftrue('e_NOCACHE') ? '_nocache' : '').(e107::getPref('e_jslib_gzip') ? '' : '_nogzip');
$ret = "<script type='text/javascript' src='".e_FILE_ABS."e_jslib.php?{$hash}'></script>\n";
if($return) $ret;
echo $ret;
@ -90,12 +90,10 @@ class e_jslib
// send content type
header('Content-type: text/javascript', true);
$this->content_out($lmodified);
if(deftrue('e_NOCACHE'))
{
$this->content_out($lmodified);
}
// IT CAUSES GREAT TROUBLES ON SOME BROWSERS!
/*
if (function_exists('date_default_timezone_set'))
{
date_default_timezone_set('UTC');
@ -103,7 +101,7 @@ class e_jslib
// send last modified date
header('Cache-Control: must-revalidate', true);
if(deftrue('e_NOCACHE')) header('Cache-Control: must-revalidate', true);
if($lmodified) header('Last-modified: '.gmdate("D, d M Y H:i:s", $lmodified).' GMT', true);
//if($lmodified) header('Last-modified: '.gmdate('r', $lmodified), true);
@ -124,101 +122,7 @@ class e_jslib
}
//Output
$this->content_out($lmodified);
/*
//array - uses the same format as $core_jslib
if (!isset($THEME_CORE_JSLIB) || ! is_array($THEME_CORE_JSLIB))
$THEME_CORE_JSLIB = array();
//array - uses the same format as $core_jslib
if (!isset($THEME_JSLIB) || ! is_array($THEME_JSLIB))
$THEME_JSLIB = array();
//available values - admin,front,all,none
$core_jslib = array( //FIXME - core jslib prefs, debug options
'jslib/prototype/prototype.js' => 'all' ,
'jslib/scriptaculous/scriptaculous.js' => 'all',
'jslib/scriptaculous/effects.js' => 'all',
'jslib/e107.js.php' => 'all'
//'jslib/core/decorate.js' => 'all'
);
$core_jslib = array_merge($core_jslib, $THEME_CORE_JSLIB, varsettrue($pref['e_jslib_core'], array()));
$where_now = $eplug_admin ? 'admin' : 'front';
//1. Core libs - prototype + scriptaculous effects
echo "// Prototype/Scriptaculous/Core libraries \n";
foreach ($core_jslib as $core_path => $where)
{
if ($where != 'all' && $where != $where_now)
continue;
if (substr($core_path, - 4) == '.php')
{
include_once (e_FILE . '/' . trim($core_path, '/'));
echo "\n\n";
}
else
{
echo file_get_contents(e_FILE . '/' . trim($core_path, '/'));
echo "\n\n";
}
}
//2. Plugins output - all 3-rd party libs
if (varsettrue($pref['e_jslib_plugin']))
{
foreach ($pref['e_jslib_plugin'] as $plugin_name => $plugin_libs)
{
if ($plugin_libs)
{
foreach ($plugin_libs as $plugin_lib => $where)
{
//available values - admin,front,all
if ($where != 'all' && $where != $where_now)
continue;
$lib_path = $plugin_name . '/' . trim($plugin_lib, '/');
echo "// $plugin_name libraries \n\n";
if (substr($plugin_lib, - 4) == '.php')
{
include_once (e_PLUGIN . $lib_path);
echo "\n\n";
}
else
{
echo file_get_contents(e_PLUGIN . $lib_path);
echo "\n\n";
}
}
}
}
}
//3. Theme libs
if (varset($THEME_JSLIB) && is_array($THEME_JSLIB))
{
echo "// Theme libraries \n\n";
foreach ($THEME_JSLIB as $lib_path => $where)
{
if ($where != 'all' && $where != $where_now)
continue;
if (substr($lib_path, - 4) == '.php')
{
include_once (THEME . '/' . trim($lib_path, '/'));
echo "\n\n";
}
else
{
echo file_get_contents(THEME . '/' . trim($lib_path, '/'));
echo "\n\n";
}
}
}
*/
$this->content_out($lmodified);*/
}
/**
@ -227,13 +131,15 @@ class e_jslib
*/
function content_out($lmodified)
{
global $pref, $admin_log;
global $admin_log;
$pref = e107::getPref();
$encoding = $this->browser_enc();
$contents = ob_get_contents();
ob_end_clean();
if(!deftrue('e_NOCACHE')) header('Cache-Control: must-revalidate', true);
$etag = md5($page).($encoding ? '-'.$encoding : '');
header('ETag: '.$etag, true);
if($encoding) header('Content-Encoding: ' . $encoding);
@ -290,7 +196,7 @@ class e_jslib
*/
function set_cache($contents, $encoding = '', $lmodified = 0)
{
if (!deftrue('e_NOCACHE') && e107::getPref('syscachestatus'))
if (e107::getPref('syscachestatus'))
{
$cacheFile = $this->cache_filename($encoding);
if(!$lmodified) $lmodified = time();

View File

@ -441,7 +441,11 @@ class e_session
{
session_cache_limiter((string) $this->_sessionCacheLimiter);
}
elseif(!defined('e_NOCACHE') || !e_NOCACHE)
{
session_cache_limiter('private');
}
session_start();
return $this;

View File

@ -301,7 +301,7 @@ $etag = md5($page);
//header('Pragma:');
// previously disabled or there is posted data
if(!deftrue('e_NOCACHE') && empty($_POST))
if(!deftrue('e_NOCACHE') && $_SERVER['REQUEST_METHOD'] === 'GET')
{
header("Cache-Control: must-revalidate", true);
if (function_exists('date_default_timezone_set'))