Example #1
0
 /**
  * 处理单条数据
  * 
  * @param string $path  路径
  * @param array  $files 文件列表
  */
 protected function _showSource($path, $files)
 {
     $extension = pathinfo($path, PATHINFO_EXTENSION);
     $type_constant = 'Minify::TYPE_' . strtoupper($extension);
     if (defined($type_constant)) {
         $content_type = constant($type_constant);
     } else {
         $content_type = Minify::TYPE_HTML;
     }
     $sources = array();
     foreach ($files as $value) {
         $source_path = str_replace('//', ROOT_PATH, $value);
         if (!is_file($source_path)) {
             echo "[Not Found] {$source_path}<br />\r\n";
             continue;
         }
         $content = file_get_contents($source_path);
         $sources[] = new Minify_Source(array('id' => $value, 'contentType' => $content_type, 'filepath' => $source_path));
     }
     $minify = new Minify(new Minify_Cache_Null());
     $combined = $minify->combine($sources, $this->_minify_config);
     $to_file_path = ROOT_PATH . "static/{$extension}/{$path}";
     $to_dir = dirname($to_file_path);
     if (!is_dir($to_dir)) {
         mkdir($to_dir, 0775, true);
     }
     file_put_contents($to_file_path, $combined);
     chmod($to_file_path, 0777);
 }
 /**
  * @param $sources
  * @param $extension
  * @param $use_cache
  * @param $options
  * @return array
  */
 public function filter($sources, $extension, $use_cache, $options)
 {
     $files = array();
     // handle request
     if (!$options['combine']) {
         foreach ($sources as $file) {
             $cache_filename = basename($file) . '.' . md5($file) . '.' . $extension;
             $destination_file = $this->cache_path . $cache_filename;
             if (!file_exists($destination_file) || !$use_cache) {
                 $this->cache->write($destination_file, \Minify::combine($file, array('minifiers' => array('application/x-javascript' => ''))));
             }
             if (file_exists($destination_file)) {
                 $files[] = $this->host . $this->fileUtility->getRelativePath($this->storeRootDir, $destination_file);
             }
         }
     } else {
         $cache_filename = md5(serialize($sources)) . '.' . $extension;
         $destination_file = $this->cache_path . $cache_filename;
         if (($cache_file = $this->cache->exists($destination_file)) === false || !$use_cache) {
             // Todo: what to do if we do not turn on the minify?
             $cache_file = $this->cache->write($destination_file, \Minify::combine($sources, $options));
         }
         if (file_exists($destination_file)) {
             $files[] = $this->fileUtility->getRelativePath($this->storeRootDir, $destination_file);
         }
     }
     return $files;
 }
Example #3
0
 private function handleStatic($filenames, $type)
 {
     /* Fix to prevent debug bar from rendering on this page */
     $config = Kohana::config('debug_toolbar');
     if ($config) {
         $config->set('auto_render', false);
     }
     /* end fix */
     if ($filenames === null) {
         $this->response = "/* No {$type} TO BE FOUND */";
         return;
     }
     if (Kohana_Core::$environment != Kohana::DEVELOPMENT && self::check(300) === FALSE) {
         self::set(300);
     }
     $this->response->headers('Content-Type', File::mime_by_ext($type));
     $body = "";
     $filenames = preg_replace("/\\.{$type}\$/", '', $filenames);
     foreach (explode(',', $filenames) as $key) {
         $key = basename($key, ".{$type}");
         $file = Kohana::find_file('views/' . $type, $key, $type);
         if (!$file) {
             $body .= "/* No such file or directory ({$key}.{$type}) */\n";
             continue;
         }
         $body .= implode('', array('/* (', str_replace(DOCROOT, '', $file), ") */\n"));
         $body .= file_get_contents($file);
     }
     /* Play nice with minify module if its enabled */
     if (Kohana::config('minify.enabled', false) && class_exists('Minify')) {
         $body = Minify::factory($type)->set($body)->min();
     }
     $this->response->body($body);
 }
	public function actionIndex()
	{
		$incPath = get_include_path();
		$docRoot = $_SERVER['DOCUMENT_ROOT'];
		$_SERVER['DOCUMENT_ROOT'] = dirname(Yii::app()->request->getScriptFile());
		set_include_path(Yii::app()->getExtensionPath()."/minify" . PATH_SEPARATOR . $incPath);
		require 'Minify.php';
		$option['debug'] = $this->_debug;
		$option['maxAge'] = $this->_maxAge;
		$option['bubbleCssImports'] = $this->_bubbleCssImports;
		$option['encodeOutput'] = $this->_encodeOutput;
		$option['encodeMethod'] = $this->_encodeMethod;
		foreach ($this->_symlinks as $link => $target) {
			$link = str_replace('//', realpath($_SERVER['DOCUMENT_ROOT'])."/", $link);
			$link = strtr($link, '/', DIRECTORY_SEPARATOR);
			$option['minifierOptions']['text/css']['symlinks'][$link] = realpath($target);
		}
		Minify::setCache(Yii::app()->getRuntimePath(), $this->_cacheFileLocking);
		if ($this->_errorLogger) {
			require_once 'Minify/Logger.php';
			require_once 'FirePHP.php';
			Minify_Logger::setLogger(FirePHP::getInstance(true));
		}
		$mgv = Yii::app()->getRuntimePath()."/minifyGroups.var";
		$minifyGroups = unserialize(file_get_contents($mgv));
		$option['files'] = $minifyGroups[$_GET['group']];
		Minify::serve('Files', $option);
		set_include_path($incPath);
		$_SERVER['DOCUMENT_ROOT'] = $docRoot;
	}
Example #5
0
function test_Lines()
{
    global $thisDir;
    $exp = file_get_contents("{$thisDir}/_test_files/minify/lines_output.js");
    $env = new Minify_Env();
    $sourceFactory = new Minify_Source_Factory($env, array(), new Minify_Cache_Null());
    $controller = new Minify_Controller_Files($env, $sourceFactory);
    $minify = new Minify(new Minify_Cache_Null());
    $ret = $minify->serve($controller, array('debug' => true, 'quiet' => true, 'encodeOutput' => false, 'files' => array("{$thisDir}/_test_files/js/before.js")));
    $passed = assertTrue($exp === $ret['content'], 'Minify_Lines');
    if (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])) {
        echo "\n---Output: " . countBytes($ret['content']) . " bytes\n\n{$ret['content']}\n\n";
        if (!$passed) {
            echo "---Expected: " . countBytes($exp) . " bytes\n\n{$exp}\n\n\n";
        }
    }
}
Example #6
0
 /**
  * Get last modified
  *
  * @return string
  */
 public function getLastModified()
 {
     if (0 === stripos(PHP_OS, 'win')) {
         Minify::setDocRoot();
         // we may be on IIS
     }
     return $this->lastModified;
 }
Example #7
0
 public function initialize()
 {
     $assets = $this->request->getQuery('r');
     if ($assets != null) {
         $this->assetsList = explode(',', $assets);
     }
     set_include_path(LIB_PATH . 'Minify/' . PATH_SEPARATOR . get_include_path());
     \Minify::setCache(new \Minify_Cache_APC());
 }
 public function init()
 {
     self::$css = [];
     self::$js = [];
     $ci =& get_instance();
     $config = empty($ci->config->config) ? [] : $ci->config->config;
     $auto_pick = empty($config['minify_auto']) ? true : (bool) $config['minify_auto'];
     $this->auto_pick = $auto_pick === null ? true : $this->auto_pick;
 }
Example #9
0
 public function action_minify()
 {
     // load config
     $config = Kohana::config('minify');
     //require  MINIFY_MIN_DIR.'/Minify.php';
     Minify::$uploaderHoursBehind = $config['uploaderHoursBehind'];
     Minify::setCache(isset($config['cachePath']) ? $config['cachePath'] : '', $config['cacheFileLocking']);
     if ($config['documentRoot']) {
         $_SERVER['DOCUMENT_ROOT'] = $config['documentRoot'];
     } elseif (0 === stripos(PHP_OS, 'win')) {
         Minify::setDocRoot();
         // IIS may need help
     }
     $config['serveOptions']['minifierOptions']['text/css']['symlinks'] = $config['symlinks'];
     // auto-add targets to allowDirs
     foreach ($config['symlinks'] as $uri => $target) {
         $config['serveOptions']['minApp']['allowDirs'][] = $target;
     }
     if ($config['allowDebugFlag']) {
         if (!empty($_COOKIE['minDebug'])) {
             foreach (preg_split('/\\s+/', $_COOKIE['minDebug']) as $debugUri) {
                 if (false !== strpos($_SERVER['REQUEST_URI'], $debugUri)) {
                     $config['serveOptions']['debug'] = true;
                     break;
                 }
             }
         }
         // allow GET to override
         if (isset($_GET['debug'])) {
             $config['serveOptions']['debug'] = true;
         }
     }
     if ($config['errorLogger']) {
         //require _once MINIFY_MIN_DIR . '/Minify/Logger.php';
         if (true === $config['errorLogger']) {
             //require _once MINIFY_MIN_DIR . '/FirePHP.php';
             Minify_Logger::setLogger(FirePHP::getInstance(true));
         } else {
             Minify_Logger::setLogger($config['errorLogger']);
         }
     }
     // check for URI versioning
     if (preg_match('/&\\d/', $_SERVER['QUERY_STRING'])) {
         $config['serveOptions']['maxAge'] = 31536000;
     }
     if (isset($_GET['g'])) {
         // well need groups config
         $config['serveOptions']['minApp']['groups'] = $config['groupsConfig'];
     }
     if (isset($_GET['f']) || isset($_GET['g'])) {
         // serve!
         Minify::serve('MinApp', $config['serveOptions']);
         exit;
     }
 }
Example #10
0
 public function serve_css($files)
 {
     $opt = array('files' => $this->get_css_files($files), 'contentTypeCharset' => $this->charset);
     /*
      * Bazı sunucularda fpassthru engelli olduğundan problem çıkarabiliyor.
      * Bu durumda fonksiyonun kullanıldığı filelocking seçeneğini FALSE gönderiyoruz.
      * Bu işlemi de function_exists(fpassthru) ile otomatik yapıyoruz.
      */
     Minify::setCache($this->cache_path, function_exists('fpassthru'));
     Minify::serve('Files', $opt);
 }
Example #11
0
 /**
  * Set up groups of files as sources
  * 
  * @param array $options controller and Minify options
  * @return array Minify options
  * 
  */
 public function setupSources($options)
 {
     // PHP insecure by default: realpath() and other FS functions can't handle null bytes.
     if (isset($_GET['files'])) {
         $_GET['files'] = str_replace("", '', (string) $_GET['files']);
     }
     self::_setupDefines();
     if (MINIFY_USE_CACHE) {
         $cacheDir = defined('MINIFY_CACHE_DIR') ? MINIFY_CACHE_DIR : '';
         Minify::setCache($cacheDir);
     }
     $options['badRequestHeader'] = 'HTTP/1.0 404 Not Found';
     $options['contentTypeCharset'] = MINIFY_ENCODING;
     // The following restrictions are to limit the URLs that minify will
     // respond to. Ideally there should be only one way to reference a file.
     if (!isset($_GET['files']) || !preg_match('/^[^,]+\\.(css|js)(,[^,]+\\.\\1)*$/', $_GET['files'], $m) || strpos($_GET['files'], '//') !== false || strpos($_GET['files'], '\\') !== false || preg_match('/(?:^|[^\\.])\\.\\//', $_GET['files'])) {
         return $options;
     }
     $extension = $m[1];
     $files = explode(',', $_GET['files']);
     if (count($files) > MINIFY_MAX_FILES) {
         return $options;
     }
     // strings for prepending to relative/absolute paths
     $prependRelPaths = dirname($_SERVER['SCRIPT_FILENAME']) . DIRECTORY_SEPARATOR;
     $prependAbsPaths = $_SERVER['DOCUMENT_ROOT'];
     $sources = array();
     $goodFiles = array();
     $hasBadSource = false;
     $allowDirs = isset($options['allowDirs']) ? $options['allowDirs'] : MINIFY_BASE_DIR;
     foreach ($files as $file) {
         // prepend appropriate string for abs/rel paths
         $file = ($file[0] === '/' ? $prependAbsPaths : $prependRelPaths) . $file;
         // make sure a real file!
         $file = realpath($file);
         // don't allow unsafe or duplicate files
         if (parent::_fileIsSafe($file, $allowDirs) && !in_array($file, $goodFiles)) {
             $goodFiles[] = $file;
             $srcOptions = array('filepath' => $file);
             $this->sources[] = new Minify_Source($srcOptions);
         } else {
             $hasBadSource = true;
             break;
         }
     }
     if ($hasBadSource) {
         $this->sources = array();
     }
     if (!MINIFY_REWRITE_CSS_URLS) {
         $options['rewriteCssUris'] = false;
     }
     return $options;
 }
Example #12
0
 public function after()
 {
     if ($this->auto_render) {
         $styles = array('base.css', 'master.css');
         $scripts = array('jquery-1.4.1.js');
         $this->template->styles = array_merge($styles, $this->template->styles);
         $this->template->scripts = array_merge($scripts, $this->template->scripts);
         $this->template->styles = Minify::factory('css')->minify($this->template->styles);
         $this->template->scripts = Minify::factory('js')->minify($this->template->scripts);
     }
     parent::after();
 }
Example #13
0
 /**
  * Runs minify
  */
 function process()
 {
     require_once W3TC_LIB_MINIFY_DIR . '/Minify.php';
     require_once W3TC_LIB_MINIFY_DIR . '/HTTP/Encoder.php';
     HTTP_Encoder::$encodeToIe6 = $this->_config->get_boolean('minify.comprss.ie6');
     Minify::$uploaderHoursBehind = $this->_config->get_integer('minify.fixtime');
     Minify::setCache($this->_get_cache());
     $serve_options = $this->_config->get_array('minify.options');
     $serve_options['maxAge'] = $this->_config->get_integer('minify.maxage');
     $serve_options['encodeOutput'] = $this->_config->get_boolean('minify.compress');
     $serve_options['postprocessor'] = array(&$this, 'postprocessor');
     if (stripos(PHP_OS, 'win') === 0) {
         Minify::setDocRoot();
     }
     foreach ($this->_config->get_array('minify.symlinks') as $link => $target) {
         $link = str_replace('//', realpath($_SERVER['DOCUMENT_ROOT']), $link);
         $link = strtr($link, '/', DIRECTORY_SEPARATOR);
         $serve_options['minifierOptions']['text/css']['symlinks'][$link] = realpath($target);
     }
     if ($this->_config->get_boolean('minify.debug')) {
         $serve_options['debug'] = true;
     }
     if ($this->_config->get('minify.debug')) {
         require_once W3TC_LIB_MINIFY_DIR . '/Minify/Logger.php';
         Minify_Logger::setLogger($this);
     }
     if (isset($_GET['f']) || isset($_GET['gg']) && isset($_GET['g']) && isset($_GET['t'])) {
         if (isset($_GET['gg']) && isset($_GET['g']) && isset($_GET['t'])) {
             $serve_options['minApp']['groups'] = $this->get_groups($_GET['gg'], $_GET['t']);
             if ($_GET['t'] == 'js' && (in_array($_GET['g'], array('include', 'include-nb')) && $this->_config->get_boolean('minify.js.combine.header') || in_array($_GET['g'], array('include-footer', 'include-footer-nb')) && $this->_config->get_boolean('minify.js.combine.footer'))) {
                 $serve_options['minifiers']['application/x-javascript'] = array($this, 'minify_stub');
             }
             /**
              * Setup user-friendly cache ID for disk cache
              */
             if ($this->_config->get_string('minify.engine') == 'file') {
                 $cacheId = sprintf('%s.%s.%s', $_GET['gg'], $_GET['g'], $_GET['t']);
                 Minify::setCacheId($cacheId);
             }
         }
         @header('Pragma: public');
         try {
             Minify::serve('MinApp', $serve_options);
         } catch (Exception $exception) {
             printf('<strong>W3 Total Cache Error:</strong> Minify error: %s', $exception->getMessage());
         }
     } else {
         die('This file cannot be accessed directly');
     }
 }
 /**
  * Generate minified HTML code
  *
  * @param string $content
  * @param array $options
  *
  * - `html` - boolean - Minify HTML code
  * - `js`   - boolean - Minify JS
  * - `css`  - boolean - Minify CSS
  *
  * @return string modified content if avaible, otherwise origin content
  */
 public static function minify($content, $options = array())
 {
     $options += array('html' => true, 'js' => true, 'css' => true);
     $minifyOptions = array();
     if ($options['html'] === true) {
         App::uses('Minify', 'Tidy.Vendor/Minify');
         $minifyOptions['xhtml'] = false;
         if ($options['js'] === true) {
             App::uses('JSMin', 'Tidy.Vendor/Minify');
             $minifyOptions['jsMinifier'] = array("JSMin", "minify");
         }
         if ($options['css'] === true) {
             App::uses('Minify_CSS', 'Tidy.Vendor/Minify');
             $minifyOptions['cssMinifier'] = array("Minify_CSS", "minify");
         }
         $Minify = new Minify();
         $minified = $Minify->process($content, $minifyOptions);
         if (!empty($minified)) {
             return $minified;
         }
     }
     return $content;
 }
Example #15
0
function test_Lines()
{
    global $thisDir;
    $exp = file_get_contents("{$thisDir}/_test_files/minify/lines_output.js");
    Minify::setCache(null);
    // no cache
    $ret = Minify::serve('Files', array('debug' => true, 'quiet' => true, 'encodeOutput' => false, 'files' => array("{$thisDir}/_test_files/minify/email.js", "{$thisDir}/_test_files/minify/lines_bugs.js", "{$thisDir}/_test_files/minify/QueryString.js", "{$thisDir}/_test_files/js/before.js")));
    $passed = assertTrue($exp === $ret['content'], 'Minify_Lines');
    if (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])) {
        echo "\n---Output: " . countBytes($ret['content']) . " bytes\n\n{$ret['content']}\n\n";
        if (!$passed) {
            echo "---Expected: " . countBytes($exp) . " bytes\n\n{$exp}\n\n\n";
        }
    }
}
Example #16
0
 public function get()
 {
     $_assetsList = array();
     for ($i = 0; $i < count($this->assetsList); $i++) {
         if (file_exists(PUBLIC_PATH . 'css/' . $this->assetsList[$i])) {
             $_assetsList[] = '//css/' . $this->assetsList[$i];
         }
     }
     unset($this->assetsList);
     if (count($_assetsList) > 0) {
         $options = array('files' => $_assetsList, 'maxAge' => \Application::$config['assets']['maxAge'], 'debug' => \Application::$config['assets']['debug']);
         \Minify::serve('Files', $options);
         unset($options);
     }
 }
 /**
  * {@inheritdoc}
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $container = $this->getContainer();
     $assetHelper = $container->get('mautic.helper.assetgeneration');
     $factory = $container->get('mautic.factory');
     // Combine and minify bundle assets
     $assetHelper->getAssets(true);
     // Minify Mautic Form SDK
     file_put_contents($factory->getSystemPath('assets') . '/js/mautic-form.js', \Minify::combine(array($factory->getSystemPath('assets') . '/js/mautic-form-src.js')));
     /** @var \Symfony\Bundle\FrameworkBundle\Translation\Translator $translator */
     $translator = $this->getContainer()->get('translator');
     $translator->setLocale($this->getContainer()->get('mautic.factory')->getParameter('locale'));
     // Update successful
     $output->writeln('<info>' . $translator->trans('mautic.core.command.asset_generate_success') . '</info>');
     return 0;
 }
Example #18
0
 public function serve()
 {
     // Adapted from index.php and config.php in the Minify distribution
     $min_serveOptions = array();
     $min_uploaderHoursBehind = isset($this->_config['min_uploaderHoursBehind']) ? $this->_config['min_uploaderHoursBehind'] : 0;
     Minify::$uploaderHoursBehind = $min_uploaderHoursBehind;
     $min_cacheFileLocking = isset($this->_config['min_cacheFileLocking']) ? $this->_config['min_cacheFileLocking'] : true;
     $min_cachePath = $this->_config['cache_dir'];
     Minify::setCache($min_cachePath, $min_cacheFileLocking);
     $min_symlinks = isset($this->_config['min_symlinks']) ? $this->_config['min_symlinks'] : array();
     foreach ($min_symlinks as $link => $target) {
         $link = str_replace('//', realpath($_SERVER['DOCUMENT_ROOT']), $link);
         $link = strtr($link, '/', DIRECTORY_SEPARATOR);
         $min_serveOptions['minifierOptions']['text/css']['symlinks'][$link] = realpath($target);
     }
     $min_serveOptions['minifierOptions']['text/css']['symlinks'] = $min_symlinks;
     if (isset($this->_config['debug_minify_logger'])) {
         require_once 'Minify/Logger.php';
         if (true === $this->_config['debug_minify_logger']) {
             require_once 'FirePHP.php';
             Minify_Logger::setLogger(FirePHP::getInstance(true));
         } else {
             Minify_Logger::setLogger($this->_config['debug_minify_logger']);
         }
     }
     // check for URI versioning
     if (!empty($this->_version)) {
         $min_serveOptions['maxAge'] = 31536000;
     } else {
         # don't cache if we are not using a version number
         $min_serveOptions['maxAge'] = 0;
     }
     $min_serveOptions['swift']['files'] = array();
     foreach ($this->_current_modules as $module) {
         if (!empty($this->_config['debug_use_alt_resources']) && !empty($this->_config['modules'][$module]['debug_path'])) {
             $min_serveOptions['swift']['files'][] = $this->_config['modules'][$module]['debug_path'];
         } else {
             $min_serveOptions['swift']['files'][] = $this->_config['modules'][$module]['path'];
         }
     }
     # check what format we're working on by looking at the extension on the first file
     # if we are in debug mode for the current type of files use Minify's debug mode
     if (!empty($this->_config['debug_minify_js_off']) && pathinfo($min_serveOptions['swift']['files'][0], PATHINFO_EXTENSION) == 'js' || !empty($this->_config['debug_minify_css_off']) && pathinfo($min_serveOptions['swift']['files'][0], PATHINFO_EXTENSION) == 'css') {
         $min_serveOptions['debug'] = true;
     }
     Minify::serve('Swift', $min_serveOptions);
 }
Example #19
0
 public static function serve()
 {
     // try to disable output_compression (may not have an effect)
     ini_set('zlib.output_compression', '0');
     Minify::setCache(OX_PATH . '/var/cache', true);
     if (isset($_GET['g'])) {
         // serve!
         $options = array();
         $options['minApp']['groupsOnly'] = true;
         $options['rewriteCssUris'] = false;
         $options['minApp']['groups'] = self::prepareGroups();
         Minify::serve('MinApp', $options);
     } else {
         header("Location: /");
         exit;
     }
 }
Example #20
0
 public function action_template_header()
 {
     $modified = Stack::get_sorted_stack('template_header_javascript');
     foreach ($modified as $key => $value) {
         Stack::remove('template_header_javascript', $key);
     }
     Stack::add('template_header_javascript', Site::get_url('user') . "/files/minified.js", 'Minified');
     if (!Cache::has(self::$cache_name . '_js') || !Cache::has(self::$cache_name . '_css')) {
         set_include_path(dirname(__FILE__) . '/min/lib' . PATH_SEPARATOR . get_include_path());
         require_once 'Minify/Source.php';
         require_once 'Minify/HTML.php';
         require_once 'Minify/CSS.php';
         require_once 'Minify/HTML.php';
         require_once 'Minify.php';
         require_once 'Minify/Cache/File.php';
     }
     if (!Cache::has(self::$cache_name . '_js')) {
         $js_stack = array();
         foreach ($modified as $js) {
             $js_stack[] = Site::get_path('base') . str_replace(Site::get_url('habari') . '/', '', $js);
         }
         $options = array('files' => $js_stack, 'encodeOutput' => false, 'quiet' => true, 'maxAge' => 86400);
         $result = Minify::serve('Files', $options);
         file_put_contents(site::get_dir('user') . '/files/minified.js', $result['content']);
         Cache::set(self::$cache_name . '_js', 'true');
     }
     /* CSS */
     $modified = Stack::get_sorted_stack('template_stylesheet');
     $tmp = array();
     foreach ($modified as $key => $value) {
         $tmp[] = $value[0];
         Stack::remove('template_stylesheet', $key);
     }
     Stack::add('template_stylesheet', array(Site::get_url('user') . "/files/minified.css", 'screen'), 'style');
     if (!Cache::has(self::$cache_name . '_css')) {
         $css_stack = array();
         foreach ($tmp as $css) {
             $css_stack[] = Site::get_path('base') . str_replace(Site::get_url('habari') . '/', '', $css);
         }
         $options = array('files' => $css_stack, 'encodeOutput' => false, 'quiet' => true, 'maxAge' => 86400);
         // handle request
         $result = Minify::serve('Files', $options);
         file_put_contents(site::get_dir('user') . '/files/minified.css', $result['content']);
         Cache::set(self::$cache_name . '_css', 'true');
     }
 }
Example #21
0
function minify($files)
{
    global $CFG;
    $cachedir = $CFG->cachedir . '/js';
    // make sure the cache dir exist
    if (!file_exists($cachedir)) {
        @mkdir($cachedir, $CFG->directorypermissions, true);
    }
    if (0 === stripos(PHP_OS, 'win')) {
        Minify::setDocRoot();
        // IIS may need help
    }
    Minify::setCache($cachedir, true);
    $options = array('maxAge' => 60 * 60 * 24 * 20, 'files' => $files);
    Minify::serve('Files', $options);
    die;
}
Example #22
0
 public function action_index()
 {
     $group = $this->request->param('group');
     if (!empty($group)) {
         $_GET['g'] = $group;
     }
     $config = Kohana::$config->load('minify');
     Minify::$uploaderHoursBehind = $config['uploaderHoursBehind'];
     Minify::setCache(isset($config['cachePath']) ? $config['cachePath'] : '', $config['cacheFileLocking']);
     if ($config['documentRoot']) {
         $_SERVER['DOCUMENT_ROOT'] = $config['documentRoot'];
         Minify::$isDocRootSet = TRUE;
     }
     $serve_options = $config['serveOptions'];
     $serve_options['minifierOptions']['text/css']['symlinks'] = $config['symlinks'];
     foreach ($config['symlinks'] as $uri => $target) {
         $serve_options['minApp']['allowDirs'][] = $target;
     }
     if ($config['allowDebugFlag']) {
         $serve_options['debug'] = Minify_DebugDetector::shouldDebugRequest($_COOKIE, $_GET, $_SERVER['REQUEST_URI']);
     }
     if ($config['errorLogger']) {
         if (TRUE === $config['errorLogger']) {
             Minify_Logger::setLogger(FirePHP::getInstance(true));
         } else {
             Minify_Logger::setLogger($config['errorLogger']);
         }
     }
     // Check for URI versioning
     if (preg_match('/&\\d/', Arr::get($_SERVER, 'QUERY_STRING'))) {
         $serve_options['maxAge'] = 31536000;
     }
     if (isset($_GET['g'])) {
         // well need groups config
         $serve_options['minApp']['groups'] = $config['groupsConfig'];
     }
     if (isset($_GET['f']) or isset($_GET['g'])) {
         $response = Minify::serve(new Minify_Controller_MinApp(), array('quiet' => TRUE) + $serve_options);
         $this->response->headers($response['headers'])->status($response['statusCode'])->body($response['content']);
     }
 }
 /**
  * @param string $id
  * @param string $script
  * @param bool|string $cacheKey
  * @param null $position
  * @param array $htmlOptions
  * @return MinifyClientScript
  */
 public function registerScriptCache($id, $script, $cacheKey = false, $position = null, array $htmlOptions = array())
 {
     $script = self::registerScript($id, $script, $position, $htmlOptions);
     if (!$cacheKey) {
         return $script;
     }
     $files = array();
     $path = Yii::getPathOfAlias('webroot.assets') . '/' . $cacheKey;
     @mkdir($path);
     @chmod($path, 0777);
     foreach ($script->scripts as $scriptKey => $scriptVal) {
         foreach ($scriptVal as $scriptItemKey => $scriptItem) {
             $file = $id . '.js';
             file_put_contents($path . '/' . $file, $scriptItem);
             @chmod($file, 0777);
             $files[] = $path . '/' . $file;
         }
     }
     $file = $cacheKey . '.js';
     file_put_contents($path . '/' . $file, Minify::combine($files));
     return self::registerScriptFile('/assets/' . $cacheKey . '/' . $file);
 }
Example #24
0
 public function action_index()
 {
     extract(Kohana::$config->load('minify')->as_array(), EXTR_SKIP);
     if ($this->request->param('group')) {
         $_GET['g'] = $this->request->param('group');
     }
     Minify::$uploaderHoursBehind = $uploaderHoursBehind;
     Minify::setCache(isset($cachePath) ? $cachePath : '', $cacheFileLocking);
     if ($documentRoot) {
         $_SERVER['DOCUMENT_ROOT'] = $documentRoot;
         Minify::$isDocRootSet = TRUE;
     }
     $serveOptions['minifierOptions']['text/css']['symlinks'] = $symlinks;
     $serveOptions['minApp']['allowDirs'] += array_values($symlinks);
     if ($allowDebugFlag) {
         $serveOptions['debug'] = Minify_DebugDetector::shouldDebugRequest($_COOKIE, $_GET, $_SERVER['REQUEST_URI']);
     }
     if ($errorLogger) {
         if (TRUE === $errorLogger) {
             $errorLogger = FirePHP::getInstance(TRUE);
         }
         Minify_Logger::setLogger($errorLogger);
     }
     // Check for URI versioning
     if (preg_match('/&\\d/', $_SERVER['QUERY_STRING'])) {
         $serveOptions['maxAge'] = 31536000;
     }
     if (isset($_GET['g'])) {
         // Well need groups config
         $serveOptions['minApp']['groups'] = $groupsConfig;
     }
     if (isset($_GET['f']) or isset($_GET['g'])) {
         set_time_limit(0);
         // Serve!
         $response = Minify::serve(new Minify_Controller_MinApp(), array('quiet' => TRUE) + $serveOptions);
         $this->response->headers($response['headers'])->body($response['content'])->status($response['statusCode']);
     }
 }
Example #25
0
function minify($files)
{
    global $CFG;
    $cachedir = $CFG->cachedir . '/js';
    // make sure the cache dir exist
    if (!file_exists($cachedir)) {
        @mkdir($cachedir, $CFG->directorypermissions, true);
    }
    if (0 === stripos(PHP_OS, 'win')) {
        Minify::setDocRoot();
        // IIS may need help
    }
    Minify::setCache($cachedir, true);
    $options = array('maxAge' => 60 * 60 * 24 * 20, 'files' => $files);
    try {
        Minify::serve('Files', $options);
        die;
    } catch (Exception $e) {
        $error = $e->getMessage();
        $error = str_replace("\r", ' ', $error);
        $error = str_replace("\n", ' ', $error);
    }
    // minification failed - try to inform the developer and include the non-minified version
    $js = <<<EOD
try {console.log('Error: Minimisation of javascript failed!');} catch (e) {}

// Error: {$error}
// Problem detected during javascript minimisation, please review the following code
// =================================================================================


EOD;
    echo $js;
    foreach ($files as $jsfile) {
        echo file_get_contents($jsfile) . "\n";
    }
}
Example #26
0
 /**
  * Runs minify
  *
  * @param string|null $file
  *
  * @return void
  */
 function process($file = NULL)
 {
     w3_require_once(W3TC_LIB_W3_DIR . '/Request.php');
     /**
      * Check for rewrite test request
      */
     $rewrite_test = W3_Request::get_boolean('w3tc_rewrite_test');
     if ($rewrite_test) {
         echo 'OK';
         exit;
     }
     $rewrite_test = W3_Request::get_string('test_file');
     if ($rewrite_test) {
         $cache = $this->_get_cache();
         header('Content-type: text/css');
         if ($cache->store(basename($rewrite_test), 'content ok')) {
             if (function_exists('gzencode') && $this->_config->get_boolean('browsercache.enabled') && $this->_config->get_boolean('browsercache.cssjs.compression')) {
                 if (!$cache->store(basename($rewrite_test) . '.gzip', gzencode('content ok'))) {
                     echo 'error storing';
                     exit;
                 }
             }
             if ($this->_config->get_string('minify.engine') != 'file') {
                 if ($cache->fetch(basename($rewrite_test)) == 'content ok') {
                     echo 'content ok';
                 } else {
                     echo 'error storing';
                 }
             } else {
                 echo 'retry';
             }
         } else {
             echo 'error storing';
         }
         exit;
     }
     if (is_null($file)) {
         $file = W3_Request::get_string('file');
     }
     if (!$file) {
         $this->error('File param is missing', false);
         return;
     }
     // remove blog_id
     $levels = '';
     if (defined('W3TC_BLOG_LEVELS')) {
         for ($n = 0; $n < W3TC_BLOG_LEVELS; $n++) {
             $levels .= '[0-9]+\\/';
         }
     }
     if (preg_match('~^(' . $levels . '[0-9]+)\\/(.+)$~', $file, $matches)) {
         $file = $matches[2];
     }
     // parse file
     $hash = '';
     $matches = null;
     $location = '';
     $type = '';
     if (preg_match('~^' . MINIFY_AUTO_FILENAME_REGEX . '$~', $file, $matches)) {
         list(, $hash, $type) = $matches;
     } elseif (preg_match('~^' . MINIFY_MANUAL_FILENAME_REGEX . '$~', $file, $matches)) {
         list(, $theme, $template, $location, , , $type) = $matches;
     } else {
         $this->error(sprintf('Bad file param format: "%s"', $file), false);
         return;
     }
     w3_require_once(W3TC_LIB_MINIFY_DIR . '/Minify.php');
     w3_require_once(W3TC_LIB_MINIFY_DIR . '/HTTP/Encoder.php');
     /**
      * Fix DOCUMENT_ROOT
      */
     $_SERVER['DOCUMENT_ROOT'] = w3_get_document_root();
     /**
      * Set cache engine
      */
     Minify::setCache($this->_get_cache());
     /**
      * Set cache ID
      */
     $cache_id = $this->get_cache_id($file);
     Minify::setCacheId($cache_id);
     /**
      * Set logger
      */
     w3_require_once(W3TC_LIB_MINIFY_DIR . '/Minify/Logger.php');
     Minify_Logger::setLogger(array(&$this, 'error'));
     /**
      * Set options
      */
     $browsercache = $this->_config->get_boolean('browsercache.enabled');
     $serve_options = array_merge($this->_config->get_array('minify.options'), array('debug' => $this->_config->get_boolean('minify.debug'), 'maxAge' => $this->_config->get_integer('browsercache.cssjs.lifetime'), 'encodeOutput' => $browsercache && $this->_config->get_boolean('browsercache.cssjs.compression'), 'bubbleCssImports' => $this->_config->get_string('minify.css.imports') == 'bubble', 'processCssImports' => $this->_config->get_string('minify.css.imports') == 'process', 'cacheHeaders' => array('use_etag' => $browsercache && $this->_config->get_boolean('browsercache.cssjs.etag'), 'expires_enabled' => $browsercache && $this->_config->get_boolean('browsercache.cssjs.expires'), 'cacheheaders_enabled' => $browsercache && $this->_config->get_boolean('browsercache.cssjs.cache.control'), 'cacheheaders' => $this->_config->get_string('browsercache.cssjs.cache.policy'))));
     /**
      * Set sources
      */
     if ($hash) {
         $_GET['f'] = $this->get_custom_files($hash, $type);
     } else {
         $_GET['g'] = $location;
         $serve_options['minApp']['groups'] = $this->get_groups($theme, $template, $type);
     }
     /**
      * Set minifier
      */
     $w3_minifier = w3_instance('W3_Minifier');
     if ($type == 'js') {
         $minifier_type = 'application/x-javascript';
         switch (true) {
             case ($hash || $location == 'include') && $this->_config->get_boolean('minify.js.combine.header'):
             case $location == 'include-body' && $this->_config->get_boolean('minify.js.combine.body'):
             case $location == 'include-footer' && $this->_config->get_boolean('minify.js.combine.footer'):
                 $engine = 'combinejs';
                 break;
             default:
                 $engine = $this->_config->get_string('minify.js.engine');
                 if (!$w3_minifier->exists($engine) || !$w3_minifier->available($engine)) {
                     $engine = 'js';
                 }
                 break;
         }
     } elseif ($type == 'css') {
         $minifier_type = 'text/css';
         if (($hash || $location == 'include') && $this->_config->get_boolean('minify.css.combine')) {
             $engine = 'combinecss';
         } else {
             $engine = $this->_config->get_string('minify.css.engine');
             if (!$w3_minifier->exists($engine) || !$w3_minifier->available($engine)) {
                 $engine = 'css';
             }
         }
     }
     /**
      * Initialize minifier
      */
     $w3_minifier->init($engine);
     $serve_options['minifiers'][$minifier_type] = $w3_minifier->get_minifier($engine);
     $serve_options['minifierOptions'][$minifier_type] = $w3_minifier->get_options($engine);
     /**
      * Send X-Powered-By header
      */
     if ($browsercache && $this->_config->get_boolean('browsercache.cssjs.w3tc')) {
         @header('X-Powered-By: ' . W3TC_POWERED_BY);
     }
     /**
      * Minify!
      */
     try {
         Minify::serve('MinApp', $serve_options);
     } catch (Exception $exception) {
         $this->error($exception->getMessage());
     }
     if (!$this->_error_occurred && $this->_config_admin->get_boolean('notes.minify_error')) {
         $error_file = $this->_config_admin->get_string('minify.error.file');
         if ($error_file == $file) {
             $this->_config_admin->set('notes.minify_error', false);
             $this->_config_admin->save();
         }
     }
 }
Example #27
0
/**
 * check_files_folders
 * This checks for filer or folders existence
 * If the folder doesn't exists the script will attempt to create it.
 */
function check_files_folders($elements, $type)
{
    global $install_errors;
    $type = strtolower($type);
    foreach ($elements as $element) {
        if ($type == 'directory') {
            @mkdir($element);
        }
        if (preg_match('/.+\\.min\\.(js|css)$/i', $element)) {
            if (conditional_config('minify') && !file_exists($element)) {
                require_once __CHV_PATH_CLASSES__ . 'class.minify.php';
                $minify = new Minify();
                try {
                    $minify->addSource(preg_replace('/(.+)\\.min(\\.(js|css))$/i', '$1$2', $element));
                    $minify->exec();
                } catch (MinifyException $e) {
                    if (conditional_config('error_reporting')) {
                        debug($e->getMessage());
                    }
                }
            }
        }
        if (!file_exists($element)) {
            $install_errors[] = '<code>' . absolute_to_relative($element) . '</code>';
        }
    }
    if (count($install_errors) == 0) {
        return true;
    }
}
Example #28
0
    public function save($content, $path)
    {
        $content = '<?php
		if(extension_loaded(\'zlib\')){
			ob_start(\'ob_gzhandler\');
		}
		header ("content-type: text/javascript; charset: utf-8");
		header ("cache-control: must-revalidate");
		$last_modified_time = filemtime(__FILE__);
		header("Last-Modified: ".date("D, d M Y H:i:s", $last_modified_time)." GMT");
		$offset = 60 * 60 * 24 * 7;
		$expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT";
		header ($expire);
		?>
		' . $content . '
		<?php
		if(extension_loaded(\'zlib\')){
			ob_end_flush();
		}?>';
        parent::save($content, $path);
    }
Example #29
0
 /**
  * Set $_SERVER['DOCUMENT_ROOT']. On IIS, the value is created from SCRIPT_FILENAME and SCRIPT_NAME.
  * 
  * @param string $docRoot value to use for DOCUMENT_ROOT
  */
 public static function setDocRoot($docRoot = '')
 {
     self::$isDocRootSet = true;
     if ($docRoot) {
         $_SERVER['DOCUMENT_ROOT'] = $docRoot;
     } elseif (isset($_SERVER['SERVER_SOFTWARE']) && 0 === strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/')) {
         $_SERVER['DOCUMENT_ROOT'] = substr($_SERVER['SCRIPT_FILENAME'], 0, strlen($_SERVER['SCRIPT_FILENAME']) - strlen($_SERVER['SCRIPT_NAME']));
         $_SERVER['DOCUMENT_ROOT'] = rtrim($_SERVER['DOCUMENT_ROOT'], '\\');
     }
 }
 /**
  * Generates and returns assets
  *
  * @param bool $forceRegeneration
  *
  * @return array
  */
 public function getAssets($forceRegeneration = false)
 {
     static $assets = array();
     if (empty($assets)) {
         $loadAll = true;
         $env = $forceRegeneration ? 'prod' : $this->factory->getEnvironment();
         $rootPath = $this->factory->getSystemPath('assets_root');
         $assetsPath = $this->factory->getSystemPath('assets');
         $assetsFullPath = "{$rootPath}/{$assetsPath}";
         if ($env == 'prod') {
             $loadAll = false;
             //by default, loading should not be required
             //check for libraries and app files and generate them if they don't exist if in prod environment
             $prodFiles = array('css/libraries.css', 'css/app.css', 'js/libraries.js', 'js/app.js');
             foreach ($prodFiles as $file) {
                 if (!file_exists("{$assetsFullPath}/{$file}")) {
                     $loadAll = true;
                     //it's missing so compile it
                     break;
                 }
             }
         }
         if ($loadAll || $forceRegeneration) {
             if ($env == 'prod') {
                 ini_set('max_execution_time', 300);
                 $inProgressFile = "{$assetsFullPath}/generation_in_progress.txt";
                 if (!$forceRegeneration) {
                     while (file_exists($inProgressFile)) {
                         //dummy loop to prevent conflicts if one process is actively regenerating assets
                     }
                 }
                 file_put_contents($inProgressFile, date('r'));
             }
             $modifiedLast = array();
             //get a list of all core asset files
             $bundles = $this->factory->getParameter('bundles');
             $fileTypes = array('css', 'js');
             foreach ($bundles as $bundle) {
                 foreach ($fileTypes as $ft) {
                     if (!isset($modifiedLast[$ft])) {
                         $modifiedLast[$ft] = array();
                     }
                     $dir = "{$bundle['directory']}/Assets/{$ft}";
                     if (file_exists($dir)) {
                         $modifiedLast[$ft] = array_merge($modifiedLast[$ft], $this->findAssets($dir, $ft, $env, $assets));
                     }
                 }
             }
             $modifiedLast = array_merge($modifiedLast, $this->findOverrides($env, $assets));
             //combine the files into their corresponding name and put in the root media folder
             if ($env == "prod") {
                 $checkPaths = array($assetsFullPath, "{$assetsFullPath}/css", "{$assetsFullPath}/js");
                 array_walk($checkPaths, function ($path) {
                     if (!file_exists($path)) {
                         mkdir($path);
                     }
                 });
                 $useMinify = class_exists('\\Minify');
                 foreach ($assets as $type => $groups) {
                     foreach ($groups as $group => $files) {
                         $assetFile = "{$assetsFullPath}/{$type}/{$group}.{$type}";
                         //only refresh if a change has occurred
                         $modified = $forceRegeneration || !file_exists($assetFile) ? true : filemtime($assetFile) < $modifiedLast[$type][$group];
                         if ($modified) {
                             if (file_exists($assetFile)) {
                                 //delete it
                                 unlink($assetFile);
                             }
                             if ($type == 'css') {
                                 $out = fopen($assetFile, 'w');
                                 foreach ($files as $relPath => $details) {
                                     $cssRel = '../../' . dirname($relPath) . '/';
                                     if ($useMinify) {
                                         $content = \Minify::combine(array($details['fullPath']), array('rewriteCssUris' => false, 'minifierOptions' => array('text/css' => array('currentDir' => '', 'prependRelativePath' => $cssRel))));
                                     } else {
                                         $content = file_get_contents($details['fullPath']);
                                         $search = '#url\\((?!\\s*([\'"]?(((?:https?:)?//)|(?:data\\:?:))))\\s*([\'"])?#';
                                         $replace = "url(\$4{$cssRel}";
                                         $content = preg_replace($search, $replace, $content);
                                     }
                                     fwrite($out, $content);
                                 }
                                 fclose($out);
                             } else {
                                 array_walk($files, function (&$file) {
                                     $file = $file['fullPath'];
                                 });
                                 file_put_contents($assetFile, \Minify::combine($files));
                             }
                         }
                     }
                 }
                 unlink($inProgressFile);
             }
         }
         if ($env == 'prod') {
             //return prod generated assets
             $assets = array('css' => array("{$assetsPath}/css/libraries.css?v{$this->version}", "{$assetsPath}/css/app.css?v{$this->version}"), 'js' => array("{$assetsPath}/js/libraries.js?v{$this->version}", "{$assetsPath}/js/app.js?v{$this->version}"));
         } else {
             foreach ($assets as $type => &$typeAssets) {
                 $typeAssets = array_keys($typeAssets);
             }
         }
     }
     return $assets;
 }