Переход от публичной к приватной файловой системе на Drupal 6

Главные вкладки

Аватар пользователя pachkow@drupal.org pachkow@drupal.org 19 мая 2009 в 10:47

Как известно, Drupal поддерживает два метода загрузки:

  • Публичный (Public) - файлы доступны напрямую по протоколу HTTP;
  • Приватный (Private) - файлы передаются через Drupal.

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

1. На странице admin/settings/file-system меняем путь к файловой система с sites/default/files на /var/www/my_site/data/files. Указанная папка должна существовать и быть доступной для записи в неё файлов сайтом.

2. На той же странице выбираем метод загрузки Приватный. И нажимаем «Сохранить настройки».

3. Копируем файлы из папки sites/default/files в новое место /var/www/my_site/data/files.

4. Меняем путь к файлам в таблице files

UPDATE files SET filepath = REPLACE(filepath, 'sites/default/files', '/var/www/my_site/data/files');

5. Меняем путь к загруженным файлам в node_revisions

UPDATE node_revisions SET body = REPLACE(body, '/sites/default/files', '/system/files');
UPDATE node_revisions SET teaser = REPLACE(teaser, '/sites/default/files', '/system/files');

6. Меняем путь к аватарам пользователя

UPDATE users SET picture = REPLACE(picture, 'sites/default/files', '/var/www/my_site/data/files');

7. У меня использовался модуль Image resize filter поэтому устанавливаем заплатку image_resize_filter_private_uploads_372607_05.patch (drupal.org/node/372607).

8. У меня в настройках темы был прописан свой путь к логотипу, поэтому меняем в настройках темы путь к произвольному логотипу с sites/default/files/logo.gif на system/files/logo.gif.

9. В связи с переходом на приватную файловую систему проявилась ещё одна особенность MySQL. По умолчанию в MySQL строки (char, varchar, text) регистронезависимы. Таким образом строки "Пример" и "примеР" идентичны. Это проявилось при просмотре фотоальбомов, на сервере есть файлы с одинаковыми именами, но с разным регистром расширений: «11_7.jpg» и «11_7.JPG». И при попытке просмотреть файл «11_7.JPG» выдавалась страничка с отказом в доступе. Это лечится следующей командой на MySQL-сервере:

ALTER TABLE files MODIFY filepath VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin;

10. И в конце не забываем почистить кэш на странице admin/settings/performance.

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

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

Комментарии

Аватар пользователя zradeg zradeg 19 декабря 2010 в 18:56

Попробовал сделать изменения на работающем сайте (6.19), но получилось не до конца - изображения доступны, без проблем открываются, а вот при попытке скачать приложенный к ноду файл выдается 404 - Not Found. Даже для залогиненного админа, даже для файлов, которые им же и залиты.
Права на изображения и на прочие файлы при закачке автоматически устанавливаются как 644, т.е. должны быть доступны для чтения всем, по идее.
Пробовал перезакачивать эти файлы уже после переключения настройки, результат тот же.

UPD: оказывается, если сохранять по правой кнопке мышки файл через контекстное меню "сохранить как...", то все отлично работает. Но, к сожалению, далеко не все посетители догадаются так сделать.
Что можно сделать, чтобы по ЛКМ тоже открывался диалог скачивания файла?

UPD2: При скачивании файлов (через контекстное меню), не изменяется счетчик скачиваний в download_counter.

UPD3: А, нет, не отлично оно сохраняет файлы по правой кнопке - внутри вордовского документа оказывается та же ошибка 404. Это вот вообще как?

Аватар пользователя iNFerNo iNFerNo 18 декабря 2010 в 13:33

а что еще не придуман модуль котрым можно разделить на приватный и не првиатный... для разных файловвв

Аватар пользователя zradeg zradeg 19 декабря 2010 в 18:56

"iNFerNo" wrote:

iNFerNo

а что еще не придуман модуль котрым можно разделить на приватный и не првиатный... для разных файловвв


А есть такой для 6.x?
Подскажите название, плз.