PHP Write To File Перезаписывает только выбранные разделы

Я пытаюсь динамически записать в файл CSS. Файл уже содержит некоторый контент, и я хочу, чтобы динамически сгенерированные правила CSS добавлялись в конец файла.

Однако мой код всегда перезаписывает файл, удаляя все предыдущие данные, но когда я использую FILE_APPEND флаг. Проблема в том, что когда я снова пишу файл, он снова добавляет данные внизу, дублируя существующие правила.

Вот окончательный код, в который я попал после долгих проб и ошибок:

function mytheme_save_page_css( $post_id ) {

$margin = get_post_meta( $post_id, '_page_margin', true );
$padding = get_post_meta( $post_id, '_page_padding', true );
$bgcol = get_post_meta( $post_id, '_page_bg_col', true );

$newmargin = sanitize_text_field( $_POST['pagemargin'];
$newpadding = sanitize_text_field( $_POST['pagepadding'];
$newbgcol = sanitize_text_field( $_POST['pagebg'];

if ( $margin != $newmargin || $padding != $newpadding || $bgcol != $newbgcol ) {

$file = get_stylesheet_directory() . '/lib/css/sections/style.css';
$css = 'header{margin:'.$newmargin.';padding:'.$newpadding.';background-color:'.$newbgcol.';}';

file_put_contents($file, $css, FILE_APPEND | LOCK_EX);

}

update_post_meta( $post_id, '_page_margin', $newmargin );
update_post_meta( $post_id, '_page_padding', $newpadding );
update_post_meta( $post_id, '_page_bg_col', $newbgcol );

}

Есть ли способ заменить только эти правила вместо того, чтобы просто дублировать их снова и снова (и создать отдельный файл CSS)?

0

Решение

Это проигрышная ситуация … так как php должен знать, что сохранить и что изменить. Это подразумевает разбор css-контента, который, я полагаю, находится за пределами вашей компетенции.

Мое решение было бы иметь отдельный css-файл, где живут все «заменяемые» css-правила, и где вы заменяете все при каждой записи.

В качестве альтернативы, вы можете использовать специальный comment-delimiter (уникальная строка) вокруг правил, которые вы хотите заменить, в главном css-файле, а затем найдите этот разделитель … оставив все снаружи и заменив все внутри. Это немного сложнее, но выполнимо.

PS: Вы должны знать о полу-гоночных условиях, когда клиент запрашивает ваш файл, в то время как он EX-заблокирован … блокировка не будет (насколько я знаю) помешать простому серверу, запрошенному клиентом … только головы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]