/** * Rewrite file relative URIs as root relative in CSS files * * @param string $css * * @param string $currentDir The directory of the current CSS file. * * @param string $prependAbsolutePath * * @param string $prependAbsolutePathCallback * * @param string $docRoot The document root of the web site in which * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']). * * @param array $symlinks (default = array()) If the CSS file is stored in * a symlink-ed directory, provide an array of link paths to * target paths, where the link paths are within the document root. Because * paths need to be normalized for this to work, use "//" to substitute * the doc root in the link paths (the array keys). E.g.: * <code> * array('//symlink' => '/real/target/path') // unix * array('//static' => 'D:\\staticStorage') // Windows * </code> * * @param int $browserCacheId * * @param array $browserCacheExtensions * * @return string */ private static function _rewrite($css, $currentDir, $prependAbsolutePath = null, $prependAbsolutePathCallback = null, $docRoot = null, $symlinks = array(), $browserCacheId = 0, $browserCacheExtensions = array()) { self::$_docRoot = self::_realpath($docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT']); self::$_currentDir = self::_realpath($currentDir); self::$_prependAbsolutePath = $prependAbsolutePath; self::$_prependAbsolutePathCallback = $prependAbsolutePathCallback; self::$_symlinks = array(); self::$_browserCacheId = $browserCacheId; self::$_browserCacheExtensions = $browserCacheExtensions; // normalize symlinks foreach ($symlinks as $link => $target) { $link = $link === '//' ? self::$_docRoot : str_replace('//', self::$_docRoot . '/', $link); $link = strtr($link, '/', DIRECTORY_SEPARATOR); self::$_symlinks[$link] = self::_realpath($target); } self::$debugText .= "docRoot : " . self::$_docRoot . "\n" . "currentDir : " . self::$_currentDir . "\n"; if (self::$_symlinks) { self::$debugText .= "symlinks : " . implode(', ', self::$_symlinks) . "\n"; } self::$debugText .= "\n"; $css = self::_trimUrls($css); // rewrite $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/', array(self::$className, '_processUriCB'), $css); $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/', array(self::$className, '_processUriCB'), $css); return $css; }
/** * Rewrite file relative URIs as root relative in CSS files * * @param string $css * * @param string $currentDir The directory of the current CSS file. * * @param string $docRoot The document root of the web site in which * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']). * * @param array $symlinks (default = array()) If the CSS file is stored in * a symlink-ed directory, provide an array of link paths to * target paths, where the link paths are within the document root. Because * paths need to be normalized for this to work, use "//" to substitute * the doc root in the link paths (the array keys). E.g.: * <code> * array('//symlink' => '/real/target/path') // unix * array('//static' => 'D:\\staticStorage') // Windows * </code> * * @return string */ static public function rewrite($css, $currentDir, $docRoot = null, $symlinks = array()) { self::$_docRoot = self::_realpath( $docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT'] ); self::$_currentDir = self::_realpath($currentDir); self::$_symlinks = array(); // normalize symlinks foreach ($symlinks as $link => $target) { $link = ($link === '//') ? self::$_docRoot : str_replace('//', self::$_docRoot . '/', $link); $link = strtr($link, '/', DIRECTORY_SEPARATOR); self::$_symlinks[$link] = self::_realpath($target); } self::$debugText .= "docRoot : " . self::$_docRoot . "\n" . "currentDir : " . self::$_currentDir . "\n"; if (self::$_symlinks) { self::$debugText .= "symlinks : " . var_export(self::$_symlinks, 1) . "\n"; } self::$debugText .= "\n"; $css = self::_trimUrls($css); // rewrite $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/' ,array(self::$className, '_processUriCB'), $css); $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/' ,array(self::$className, '_processUriCB'), $css); return $css; }
/** * Rewrite file relative URIs as root relative in CSS files * * @param string $css * * @param string $currentDir The directory of the current CSS file. * * @param string $docRoot The document root of the web site in which * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']). * * @param array $symlinks (default = array()) If the CSS file is stored in * a symlink-ed directory, provide an array of link paths to * target paths, where the link paths are within the document root. Because * paths need to be normalized for this to work, use "//" to substitute * the doc root in the link paths (the array keys). E.g.: * <code> * array('//symlink' => '/real/target/path') // unix * array('//static' => 'D:\\staticStorage') // Windows * </code> * * @return string */ public static function rewrite($css, $currentDir, $docRoot = null, $symlinks = array()) { self::$_docRoot = $docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT']; self::$_docRoot = realpath(self::$_docRoot); self::$_currentDir = realpath($currentDir); self::$_symlinks = array(); // normalize symlinks foreach ($symlinks as $link => $target) { $link = str_replace('//', realpath(self::$_docRoot), $link); $link = strtr($link, '/', DIRECTORY_SEPARATOR); self::$_symlinks[$link] = realpath($target); } $css = self::_trimUrls($css); // rewrite $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/' ,array(self::$className, '_uriCB'), $css); $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/' ,array(self::$className, '_uriCB'), $css); return $css; }
/** * Rewrite file relative URIs as root relative in CSS files * * @param string $css * * @param string $currentDir The directory of the current CSS file. * * @param string $docRoot The document root of the web site in which * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']). * * @return string */ public static function rewrite($css, $currentDir, $docRoot = null, $prependPath = null) { self::$_docRoot = self::_realpath($docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT']); self::$_currentDir = self::_realpath($currentDir); self::$_prependPath = $prependPath ? $prependPath : ''; self::$debugText .= "docRoot : " . self::$_docRoot . "\n" . "currentDir : " . self::$_currentDir . "\n"; // if (self::$_symlinks) { // self::$debugText .= "symlinks : " . var_export(self::$_symlinks, 1) . "\n"; // } self::$debugText .= "\n"; $css = self::_trimUrls($css); // rewrite $css = preg_replace_callback('/@import\\s+(?:url)(.+);/', array(self::$className, '_processImportUriCB'), $css); $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/', array(self::$className, '_processUriCB'), $css); return $css; }
/** * Rewrite file relative URIs as root relative in CSS files * * @param string $css * * @param string $currentDir The directory of the current CSS file. * * @param string $docRoot The document root of the web site in which * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']). * * @return string */ public static function rewrite($css, $currentDir, $docRoot = null) { self::$_docRoot = $docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT']; self::$_docRoot = realpath(self::$_docRoot); self::$_currentDir = realpath($currentDir); // remove ws around urls $css = preg_replace('/ url\\( # url( \\s* ([^\\)]+?) # 1 = URI (really just a bunch of non right parenthesis) \\s* \\) # ) /x', 'url($1)', $css); // rewrite $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/', array('Minify_CSS_UriRewriter', '_uriCB'), $css); $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/', array('Minify_CSS_UriRewriter', '_uriCB'), $css); return $css; }