Вот сценарий: пользователь создает новый файл X.php , скажем, с помощью nano. Пользователь пишет некоторый контент, сохраняет файл (Этап S1), но не выходит из нано. Он снова вносит некоторые изменения и затем выходит из nano после повторного сохранения файла (этап S2).

Вопрос: У меня есть фрагмент кода (триггер), который мне нужно внедрить в каждый php- файл в каталоге. Я могу это сделать. Но в верхнем сценарии, как только я обнаруживаю, что создается новый файл (с использованием inotifywait) (этап S1), я внедряю в него свой код. Однако, поскольку nano никогда не закрывался, таким образом, при следующем сохранении (Этап S2) мой введенный код перезаписывается новыми изменениями пользователя. Как я могу избавиться от этой проблемы?

PS: Редактором может быть любой текстовый редактор, и я не знаю редактора, используемого пользователем для создания файла.

2 ответа2

0

Извините, но редакторы буферизируют процесс редактирования разными способами. Если вы не создадите свой собственный редактор с учетом желаемой архитектуры и не заставите всех использовать этот конкретный редактор, вы будете очень разочарованы и столкнетесь с множеством сложностей, в которых проблема все еще остается.

Обертки на редакторах тоже не помогут. Пока файл открыт логически (в буферизованном режиме), вы будете обречены на провал.

0

Вам нужно изменить процесс инжектора кода, чтобы он действовал всякий раз, когда PHP-файл был изменен или создан, и сделать его достаточно умным, чтобы проверить, есть ли ваш код, и вставить его, если его нет.  В противном случае вы уязвимы для следующего сценария:

  1. Пользователь создает X.php, сохраняет его и выходит из редактора.
  2. Ваш процесс вставляет ваш код.
  3. Пользователь редактирует файл, видит ваш код, говорит «WTF?» и удаляет его (и сохраняет файл).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .