From 0697a120ee1ac3883693d6d3671bfb2a2ae617b2 Mon Sep 17 00:00:00 2001 From: Steve Clay Date: Tue, 29 Jul 2008 03:48:10 +0000 Subject: [PATCH] + Minify::$uploaderHoursBehind + fixed backtrace limit issue in Minify_HTML + default max-age of 30 minutes (instead of 0) --- lib/Minify.php | 15 ++++++++++++++- lib/Minify/Controller/Base.php | 2 +- lib/Minify/HTML.php | 6 +++--- lib/Minify/Source.php | 4 +++- web/test/_test_files/html/before.html | 3 ++- web/test/test_Minify.php | 14 ++++++++------ 6 files changed, 31 insertions(+), 13 deletions(-) diff --git a/lib/Minify.php b/lib/Minify.php index e5f1a5c..abb9cbf 100644 --- a/lib/Minify.php +++ b/lib/Minify.php @@ -35,6 +35,19 @@ class Minify { // Apache default and what Yahoo! uses.. const TYPE_JS = 'application/x-javascript'; + /** + * How many hours behind are the file modification times of uploaded files? + * + * The mtime of files on Windows can behind what they should be on the server. + * Immediately after modifying and uploading a file, use the touch command + * to update the mtime on the server. If the mtime jumps ahead by a + * number of hours, set this variable to that number. If the mtime moves back, + * this should not be needed. + * + * @var int $uploaderHoursBehind + */ + public static $uploaderHoursBehind = 0; + /** * @see setCache() * @param mixed $cache object with identical interface as Minify_Cache_File or @@ -179,7 +192,7 @@ class Minify { 'lastModifiedTime' => self::$_options['lastModifiedTime'] ,'isPublic' => self::$_options['isPublic'] ); - if (null !== self::$_options['maxAge']) { + if (self::$_options['maxAge'] > 0) { $cgOptions['maxAge'] = self::$_options['maxAge']; } $cg = new HTTP_ConditionalGet($cgOptions); diff --git a/lib/Minify/Controller/Base.php b/lib/Minify/Controller/Base.php index 5f3390b..d8e632f 100644 --- a/lib/Minify/Controller/Base.php +++ b/lib/Minify/Controller/Base.php @@ -45,7 +45,7 @@ abstract class Minify_Controller_Base { ,'encodeLevel' => 9 ,'minifierOptions' => array() // no minifier options ,'contentTypeCharset' => 'UTF-8' - ,'maxAge' => null // no Expires/max-age + ,'maxAge' => 1800 // 30 minutes ,'quiet' => false // serve() will send headers and output ,'debug' => false diff --git a/lib/Minify/HTML.php b/lib/Minify/HTML.php index 70276bc..2172a30 100644 --- a/lib/Minify/HTML.php +++ b/lib/Minify/HTML.php @@ -56,15 +56,15 @@ class Minify_HTML { ,array('Minify_HTML', '_removePreCB') , $html); - // remove leading and trailing ws from each line. + // trim each line. // @todo take into account attribute values that span multiple lines. - $html = preg_replace('/^\\s*(.*?)\\s*$/m', "$1", $html); + $html = preg_replace('/^\\s+|\\s+$/m', '', $html); // remove ws around block/undisplayed elements $html = preg_replace('/\\s*(<\\/?(?:area|base(?:font)?|blockquote|body' .'|caption|center|cite|col(?:group)?|dd|dir|div|dl|dt|fieldset|form' .'|frame(?:set)?|h[1-6]|head|hr|html|legend|li|link|map|menu|meta' - .'|ol|opt(?:group|ion)|p|param|t(?:able|body|head|d|h||r|foot)|title' + .'|ol|opt(?:group|ion)|p|param|t(?:able|body|head|d|h||r|foot|itle)' .'|ul)\\b[^>]*>)/i', '$1', $html); // remove ws between and inside elements. diff --git a/lib/Minify/Source.php b/lib/Minify/Source.php index a47794f..32837b0 100644 --- a/lib/Minify/Source.php +++ b/lib/Minify/Source.php @@ -51,7 +51,9 @@ class Minify_Source { } $this->_filepath = $spec['filepath']; $this->_id = $spec['filepath']; - $this->lastModified = filemtime($spec['filepath']); + $this->lastModified = filemtime($spec['filepath']) + // offset for Windows uploaders with out of sync clocks + + round(Minify::$uploaderHoursBehind * 3600); } elseif (isset($spec['id'])) { $this->_id = 'id::' . $spec['id']; if (isset($spec['content'])) { diff --git a/web/test/_test_files/html/before.html b/web/test/_test_files/html/before.html index a952635..bc5d3f3 100644 --- a/web/test/_test_files/html/before.html +++ b/web/test/_test_files/html/before.html @@ -77,7 +77,8 @@ css hack {
 	White  space  is  important   here!
diff --git a/web/test/test_Minify.php b/web/test/test_Minify.php
index 6c5a12e..3075a55 100644
--- a/web/test/test_Minify.php
+++ b/web/test/test_Minify.php
@@ -10,8 +10,8 @@ function test_Minify()
     global $thisDir;
     
     $minifyTestPath = dirname(__FILE__) . '/_test_files/minify';
-    $tomorrow = time() + 86400;
-    $lastModified = time() - 86400;
+    $tomorrow = $_SERVER['REQUEST_TIME'] + 86400;
+    $lastModified = $_SERVER['REQUEST_TIME'] - 86400;
     
     // Test 304 response
     
@@ -24,9 +24,10 @@ function test_Minify()
         ,'statusCode' => 304    
         ,'content' => '',
         'headers' => array(
-        	'Last-Modified' => gmdate('D, d M Y H:i:s \G\M\T', $lastModified),
-            'ETag' => "\"{$lastModified}pub\"",	
-        	'Cache-Control' => 'max-age=0, public, must-revalidate',
+            'Expires' => gmdate('D, d M Y H:i:s \G\M\T', $_SERVER['REQUEST_TIME'] + 1800),
+            'Last-Modified' => gmdate('D, d M Y H:i:s \G\M\T', $lastModified),
+            'ETag' => "\"{$lastModified}pub\"",
+        	'Cache-Control' => 'max-age=1800, public, must-revalidate',
         	'_responseCode' => 'HTTP/1.0 304 Not Modified',
         )
     );
@@ -101,7 +102,7 @@ function test_Minify()
         ,'statusCode' => 200	
     	,'content' => file_get_contents($minifyTestPath . '/minified.css')
         ,'headers' => array (
-            'Last-Modified' => gmdate('D, d M Y H:i:s \G\M\T', $lastModified),
+        	'Last-Modified' => gmdate('D, d M Y H:i:s \G\M\T', $lastModified),
             'ETag' => "\"{$lastModified}pub\"",
             'Cache-Control' => 'max-age=0, public, must-revalidate',
             'Content-Length' => filesize($minifyTestPath . '/minified.css'),
@@ -116,6 +117,7 @@ function test_Minify()
         ,'quiet' => true
         ,'lastModifiedTime' => $lastModified
         ,'encodeOutput' => false
+        ,'maxAge' => false
     ));
     
     $passed = assertTrue($expected === $output, 'Minify : CSS and Etag/Last-Modified');