Подходящая технология для обработки большого количества файловых загрузок - PullRequest
3 голосов
/ 14 марта 2011

Я работаю на сайте, который получает около 500 загрузок фотографий в день от своих пользователей. Хотя это не очень большое число, мы сталкиваемся с некоторыми конфликтами между различными загрузками. Некоторые пользователи сообщают, что видели миниатюру другого изображения вместо загруженного. Я искал объяснение этой проблемы, и я нашел пару вопросов в stackoverflow:

Имена временных файлов PHP для загрузок, конфликтующих

Файлы PHP загружены "частично"

Как я прочитал, проблема, похоже, связана со столкновением в имени файла tmp. Чтобы избежать этого, мы рассматривали возможность изменения переменной PHP upload_tmp_dir, добавляемой к целому числу, вычисленному из зарегистрированного имени пользователя, чтобы уменьшить вероятность столкновения. Однако эта переменная не может быть изменена во время выполнения, так как, когда PHP начинает выполняться, файл уже отправлен на сервер.

Я не уверен, как решить эту проблему, и я хотел бы исправить ее, чтобы предотвратить будущие проблемы, если ежедневная скорость загрузки продолжает расти.

Есть много сайтов, которые обрабатывают большие объемы загрузок, поэтому мне интересно, как избежать этой проблемы коллизий. Сайт, на котором я работаю, работает на PHP 5.2.14. Я бы предпочел решение PHP для простоты, но я также заинтересован в существующих решениях, использующих другие языки сценариев, если они гарантируют, что между загрузками не будет конфликтов.

1 Ответ

1 голос
/ 14 марта 2011

Проблема также может лежать в вашем DBlogic.Безопасным способом является вставка строки в БД, получение первичного ключа вашей записи.Использование этого числа в качестве имени файла предотвратит конфликты.Вы можете сделать что-то вроде:

LOCK TABLES image WRITE;
INSERT INTO image (id) VALUES (NULL);
SELECT LAST_INSERT_ID();
UNLOCK TABLES;

Затем укажите свой идентификатор (auto_increment).Вы можете сохранить оставшиеся данные (например, теги в другой таблице) и обработать файл, и имена не будут конфликтовать.

...