Ну, это широкий вопрос, и ответ зависит от типа файлов и алгоритма, который вы решите выбрать.
Для изображений вы можете просто использовать JPG и выбрать желаемый процент качества (чем меньше, тем лучшеразмер, но хуже выглядит результирующая картинка).Пример: http://blog.clonesinfo.com/how-to-reduce-compress-image-file-size-uploading-using-php-code/
Если вам нужны дополнительные параметры или, например, качество без потерь, вам определенно стоит поискать какую-нибудь библиотеку или инструмент, посмотрите в этом вопросе дополнительную информацию: Какой метод PHP самый лучшийуменьшить размер изображения без потери качества
Для видео это становится немного сложнее, поскольку для уменьшения размера видео требуется его перекодирование, а также выбор правильных настроек (кодек, который вы обычно выбираете)будет наиболее совместимым и эффективным - H.264 или что-то вроде VP9 от Google).Обратите внимание, что перекодирование требует значительных вычислительных ресурсов на вашем сервере (может возникнуть проблема, если видео будет длинным и большим).Кодирование видео - это очень широкая тема, которую я не могу охватить здесь в 1 ответе. Вы можете начать с поисков работы H.264.
Для кодирования видео вам также понадобится инструмент, вероятно, лучшийвыбор будет ffmpeg / avconv, плюс некоторая библиотека PHP, чтобы упростить использование.