поиск и замена соответствующего класса в CSS-файле с помощью php

#php

#php

Вопрос:

Я хочу открыть файл CSS, выполнить поиск известного имени класса и перезаписать старую часть новым стилем

У меня есть этот массив, который содержит имя класса и новые стили

 $newstyle['myclassname'][0]='color:red';
$newstyle['myclassname'][1]='another style';
$newstyle['myclassname'][2]='another style';
...
  

Итак, я создаю новый стиль на основе этого

 $change=implode(';',$newstyle['myclassname']);
  

Я работаю над проектом codeigniter, поэтому я начинаю открывать файл

 $fp = fopen($path.'myfile.css','wb');
  

Теперь у меня есть идея, что я должен сделать, но я не знаю самого простого способа.

После открытия файла я должен выполнить поиск по «.myclassname» или «#myclassname», после чего я должен удалить или заменить часть между {…старыми стилями …} новыми стилями, которые я должен создать из массива.

Как я могу найти или заменить старые стили на новые?

Надеюсь, кто-нибудь сможет показать мне простой способ выполнить эти шаги!?

Большое спасибо.

Комментарии:

1. Это одноразовая вещь, или вы пытаетесь создать систему, в которой определенные стили настраиваются с помощью какого-то серверной части? Потому что для последнего это не самый лучший подход для начала, ИМХО. Для этой цели лучше использовать переменные CSS (плюс полизаполнение, если вам нужно поддерживать IE), или пусть таблица стилей изначально будет PHP-скриптом, чтобы вы могли выводить значения PHP-переменных в правильных местах. (При желании выходные данные такого скрипта можно было бы затем кэшировать на диске.)

2. @04FS это часть небольшой cms

3. @treyBake без дублирования, я не только хочу заменить одну строку другой строкой. Я не знаю, как я могу найти нужную мне часть и заменить ее — это не вопрос или ответ в предложенном вами другом вопросе

4. предлагаемый ответ заменяет строку в файле.. как вы хотите? o.O

5. @DarkBee не уверен, что tbh — но да, preg_replace обычно это лучший вариант для более сложных str_replace

Ответ №1:

Вы можете использовать шаблон регулярных выражений, чтобы найти нужный класс в вашем файле и выполнить preg_replace() замену вашего класса CSS:

 $css = '.myClass { color:blue; background-color:red; }';
$class = 'myClass';
$classCss = 'color:red;';

$newCss = preg_replace('/(.*(?:.|#)' . $class . '.*){.*}/s', '$1 { ' . $classCss . ' }', $css);
  

Поскольку мы на самом деле не знаем, как выглядит ваш CSS, приведенный выше код является простым примером, поэтому, если в вашем CSS-файле много блоков с классом, который вы ищете, он может работать не так, как задумывалось, и вам, возможно, придется адаптировать шаблон регулярных выражений.

Комментарии:

1. о, хорошо, использование preg_replace должно быть правильным. Есть ли способ проверить, находится ли класс, который мы ищем, внутри файла, и если нет, добавить их вместо замены?

2. preg_match() возвращает, true если указанный шаблон найден в теме. Если это так, то это замена. Остальное вы можете добавить.

3. 🙂 top — знаете ли вы более разумный способ проверить css. файл вместо fopen или file_get_contents?

4. Лично я бы использовал file_get_contents . Возможно, есть способ получше, но я пока не знаю, если это так! Лучше опубликуйте новый вопрос, чтобы получить свой ответ!

5. после тестирования вашего кода кажется, что он не возвращает false, кажется, что он делает каждый раз что угодно!? Проверяя, не находится ли класс внутри файла, он возвращает true вместо false