В условиях оферты (а иначе это не назовешь) может быть написано всё, что угодно, вплоть до прижизненного отчуждения имущества, включая собственное тело. Другой вопрос -- насколько условия этой оферты соответствуют принятому законодательству.
Если сервер возвращает в заголовках ответа размер файла и дату последнего изменения, можно попробовать докачивать после обрыва связи/таймаута/всякого-такого, отправляя Range-заголовок в последующих запросах. Ну, это если сервер вообще его обучен понимать.
Поглядеть в первую строчку application/controllers/Notfound.php и выяснить, откуда там берётся лишний вывод. Может быть, там BOM затесался в начале файла.
Mozzarella, ну, в общем-то, я сразу и предложил модифицировать модели. Тогда было бы всё прозрачней и проще -- передаём в метод интерфейса (или абстрактного класса) модели экземпляр нужного обработчика, а тот уже как нужно взаимодействует с моделью любым дозволенным образом.
Mozzarella, не, это только через рефлексию. Потому что я пока что понимаю задачу как "найти имя нужного класса по типу переданного в метод параметра", а дженериками это дело не обустроить.
Mozzarella, ясно-понятно. Ну, а классы Handler-ов откуда будут браться? Тем более, что их там, оказывается, может быть несколько для каждого потомка Car.
При указанных условиях через дженерики в одном классе -- никак, только через рефлексию или switch. А для чего вообще такой огород городить? Модель сама может реализовывать handle() из какого-нибудь интерфейса CarHandler, например.
SOTVM, у любого вменяемого движка обычно бывают озвучены требования к привилегиям. Все права, которые относятся к управлению пользователями MySQL (GRANT) или выполнению стороннего кода (EXECUTE), точно не должны входить в этот список. Я бы оставил только те, что перечислены в секциях "Доступ к данным" и "Доступ к структуре".