]*?\srel=["\']?stylesheet["\'].*?\shref=["\']?\/(.*?)["\'][^>]*?>/i'; $outputString = preg_replace_callback($pattern, function($match) { $href = $match[1]; $cssFilePath = $_SERVER['DOCUMENT_ROOT'] . '/' . $href; $cssContent = file_get_contents($cssFilePath); $cssDir = dirname($cssFilePath); $cssContent = preg_replace_callback('/url\(["\']?(\/.*?|.*?)["\']?\)/i', function($urlMatch) use ($cssDir) { $url = $urlMatch[1]; // Check if the URL starts with any protocol or // if (!preg_match('/^([a-zA-Z]+:)?\/\//', $url)) { $absolutePath = $cssDir . '/' . $url; $relativePath = ltrim(substr($absolutePath, strlen($_SERVER['DOCUMENT_ROOT'])), '/'); return 'url("' . $relativePath . '")'; } else { // If the URL starts with a protocol or //, leave it unchanged return 'url("' . $url . '")'; } }, $cssContent); // Minify the CSS content $cssContent = minifyCss($cssContent); return ""; }, $inputString); return $outputString; } function inlineScriptFromSrc($inputString) { $pattern = '/\s*<\/script>/i'; $outputString = preg_replace_callback($pattern, function($match) { $src = $match[1]; $jsContent = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/' . $src); // Minify the JavaScript content $jsContent = minifyJs($jsContent); return ""; }, $inputString); return $outputString; } function minifyCss($css) { // Remove comments $css = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css); // Remove whitespace $css = preg_replace('/\s+/', ' ', $css); // Remove unnecessary semicolons $css = str_replace(';}', '}', $css); // Remove spaces around colons $css = str_replace(': ', ':', $css); // Remove spaces around commas $css = str_replace(', ', ',', $css); return trim($css); } function minifyJs($js) { // Remove newlines and tabs $js = str_replace("\t", '', $js); // Remove spaces around operators $js = preg_replace('~\s*([=+\-*/])\s*~', '$1', $js); return trim($js); }