У меня есть куча CSS-файлов, которые загружаются на каждую страницу (верхний колонтитул, глобальный, главная страница, нижний колонтитул и т. Д.).
Я написал простой PHP-скрипт, который компилирует их в одну строку и затем выводит эту строку.
<?php
set_include_path('../');
header('Content-Type: text/css');
$q = $_GET['q'];
$patterns = array(
'/.*[\.]{2,}.*/',
'/,\//',
'/^\//'
);
$replacements = array(
'',
',',
''
);
$q = preg_replace($patterns, $replacements, $q);
$css = explode(",", $q);
$output = '';
foreach( $css as $link )
{
$output .= include($link);
}
print $output;
?>
это можно назвать (и как я я называю это) так:
<?php
$cssLinks = array(
"/global/global.css",
"/styles/local.css",
$tmpl->headerContent['css']['link'],
$tmpl->appContent['css']['link'],
"/styles/css3buttons.css"
);
$css = implode(",", $cssLinks);
?>
<link rel="stylesheet" href="/components/CSS.php?q=<?= $css; ?>" type="text/css" />
Что приводит к такой строке:
<link rel="stylesheet" href="/components/CSS.php?q=/global/global.css,/styles/local.css,/styles/header.css,/styles/index.css,/styles/css3buttons.css" type="text/css" />
Это нормально, и, что более важно, работает .
Тогда какой у меня вопрос, спросите вы?
Это два участника:
- Какие уязвимости безопасности я пропускаю в скрипте?
- Я удалил все возможности обхода каталогов, но что еще?
- Мне нужно уметь изменять ссылки, поэтому я не могу жестко закодировать их в этот скрипт. Например,
$tmpl->appContent['css']['link']
- это динамическая таблица стилей для каждой страницы, которых будет много.
- Как добавить разрывы строк между включенными файлами?
- Я добавил
$output .= '\n\n';
в цикл foreach()
, но он не работает.
- Я все еще застрял с выводом вроде:
#footer, #push {
height: 3em;
padding-top: 1em;
}#header{
CSS в списке работает , но я бы предпочел, чтобы блок #header
был на две строки ниже, например:
#footer, #push {
height: 3em;
padding-top: 1em;
}
#header{
(я извиняюсь за странный блок кода, Markdown ужасно сломался на этих хешах, и я не мог понять, как это исправить).
Обратите внимание, что отсутствие разрывов строк происходит только на стыке двух разных файлов. Код внутри каждого CSS-файла форматируется так, как и должно быть.