Сохраняйте ID удалённых записей в пуле. А при создании новой записи делайте выборку доступных id и создавайте запись с id из этого пула. После создания, не забудьте удалить id из пула.
Конечно в конфиге. А конфиг хранить в зашифрованном виде на отдельном сервере с ограниченным доступом по IP. Получать конфиг по API с временным токеном.
Можно создать роутер, который обслуживает url и контроллер, который, в зависимости от состояния роутера, будет подключать тот или иной класс, и вызывать требуемый метод.
По всей видимости, сервер не распознаёт тип вашего файла и отвергает его.
Нужно разбираться с API. Какие файлы принимает сервер (форматы, расширения), нет ли ограничений на размер файла. Возможно, при отправке данных нужно задать какие-то заголовки.
И это естественно, так как при каждом следующем запросе вы перезаписываете переменную $result.
Вам нужно каждый запрос получить в свою переменную $result1, $result2, $result3, потом объеденить их в одну и уже её передать в рендер.
На onchange инпута нужно навесить вызов ajax запроса, который передаст в введённую строку внешнему обработчику, который подключится к ftp и передаст данные.