/** * 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; }