В своих проектах я в последнее время для загрузки пользовательских картинок использую jQuery File Upload . Если вкратце, то этот чудесный продукт в виде нескольких файлов на JavaScript + класса на PHP позволяет дать нашим юзерам загружать им картинки в наши проекты через AJAX и сразу несколько картинок.

Собственно загружать можно не только картинки. У jQuery File Upload есть куча всяких функций по контролю за размерами картинок, за типа загружаемых файлов и т.п. Всё это хозяйство легко встраивается в проекты. Я делал проекты в которых использовал jQuery File Upload на CodeInteger, Yii ( для Yii даже есть готовый плагин, но я его не использовал ) и для плагинов WordPress ( довольно глупое решение, ибо в WP есть свой загрузчик, логично было бы использовать его, но надо было по быстрому приколхозить ).

Но есть у jQuery File Upload и недостатки, которые пришлось поправлять.

Так по мелочи на самом деле. Но…

1. На хостинге с PHP <5.3 File Upload выдавал ошибку на функцию array_replace_recursive. Так как она есть только в PHP 5.3, пришлось делать так:

Вместо


Делаем


И добавляем перед закрытием класса:

Аналогичная ситуация с:

Которую иногда просто любят отключать на некоторых хостингах. Хотя это довольно редкая ситуация.
Меняем на:

И перед закрытием класса:

Следующий тюнинг не проблема jQuery File Upload, а скорее необходимы функционал

Многие юзеры загружают картинки со всякими идиотскими названиями. Часто названия совпадают. Что делать при таких коллизиях? Хорошо бы их при загрузке на сервер как то уникально переименовывать. Для этого сразу после:

Добавить что-то типа:

В данном случае новое имя файла это дата со временем плюс случайное число. Всё в целом исключаем возможность коллизий. Можно придумать и какие то другие правила переименования файла. Например добавлять имя юзера, транслитерацию заголовка поста или что-то типа того.