Лучше не изобретать велосипед, а использовать готовый инструмент. Например, Imagine для манипуляций с изображением.
Основной алгоритм следующий:
1. Через форму принимает файл.
2. Проверка ограничений (размер файла, размер фото, допустимого расширения)
3. Генерация названия и пути хранения для файла.
4. Перемещение файла по сгенерированному пути.
5. Запись в БД информации о файле (оригинальное название, мета информация, а также путь и название фактическое)
6. Запуск операций манипулирования для загруженного файла (генерация миниатюр, уменьшение, водяной знак)
Проверять MIME тип это уже для параноиков.
Основной алгоритм следующий:
1. Через форму принимает файл.
2. Проверка ограничений (размер файла, размер фото, допустимого расширения)
3. Генерация названия и пути хранения для файла.
4. Перемещение файла по сгенерированному пути.
5. Запись в БД информации о файле (оригинальное название, мета информация, а также путь и название фактическое)
6. Запуск операций манипулирования для загруженного файла (генерация миниатюр, уменьшение, водяной знак)
Проверять MIME тип это уже для параноиков.