[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как хранить на сервере документы в формате pdf?
zvezda_t
Всем привет! smile.gif

Поделитесь пожалуйста, Вашим экспертным мнением, как лучше реализовать такую задачу:

Мне нужно дать возможность пользователям сохранить на сервере документы в формате pdf, а потом просматривать их.

Скажите пожалуйста, как лучше делать:
1) лучше сохранять содержимое документов прям в таблицу БД, а потом открывать указав формат. (если так возможно с pdf)
2) сохранять документы прям в папочку на сервере через ftp.

Или есть другой, более лучший способ? rolleyes.gif




Спустя 6 минут, 9 секунд (29.04.2011 - 14:12) ApuktaChehov написал(а):
Зливайте файлы на сервер в папку. А названия файлов храните в БД. Т.е. вы знаете где файлы лежат, в БД хранить ссылки незачем. Хотя можно и без БД, за php все сделать.

Спустя 1 минута, 38 секунд (29.04.2011 - 14:13) zvezda_t написал(а):
ApuktaChehov
а почему так лучше?

Спустя 4 минуты, 8 секунд (29.04.2011 - 14:17) sharki написал(а):
zvezda_t
Если PDF сгенерины с помощью PHP, то лучше всё что было генерино переделать в XML, а потом собирать любые форматы с помощью парсинга XML.
Т.е пользователь захотел скачать документацию в PDF, отпарвляет запрос, и на сервере какой нибудь скрипт парсит из БД XML, и формирует PDF формат

Спустя 11 секунд (29.04.2011 - 14:18) ApuktaChehov написал(а):
Дело тут не в том что лучше. А в том что надо. Если нужно просто хранить файлы в одном месте и просматривать их, то зачем БД?

А если пользователи захотят что бы была возможность видеть только свои файлы? Тут уже можно ввести БД. А вдруг они захотят функционал как у галерей?

Так что вам решать, что вы собираетесь сделать. А вместе мы можем придумать наилучший путь для достижения цели. Вот. rolleyes.gif

Спустя 51 секунда (29.04.2011 - 14:18) ApuktaChehov написал(а):
sharki - нафиг такие извращения? Не проще хранить файлы как есть?

Спустя 3 минуты, 38 секунд (29.04.2011 - 14:22) sharki написал(а):
ApuktaChehov
При таком подходе будет много место занято всякимм разными форматами: PDF, DOC, TXT, HTML, XSL и т.п

А так в БД есть сформированный XML, а на выходе даешь то, что нужно человеку.

Спустя 45 секунд (29.04.2011 - 14:23) zvezda_t написал(а):
Цитата
Если PDF сгенерины с помощью PHP,

нет, это сканы документов, которые переделаны в pdf формат.

Спустя 55 секунд (29.04.2011 - 14:24) sharki написал(а):
zvezda_t
Ну тогда стоит воспользоваться советом ApuktaChehov

Спустя 9 минут, 5 секунд (29.04.2011 - 14:33) zvezda_t написал(а):
ApuktaChehov
Ситуация такая:
Пользователи сохраняют документы и просматривают только те документы которые сохранили сами.
А администратор просматривает вообще все документы.
smile.gif

Спустя 16 минут, 38 секунд (29.04.2011 - 14:49) ApuktaChehov написал(а):
Проще будет БД использовать.

Когда юзер загружает файлы, то имя файла пишется в БД, а файл кладется в папку, к примеру: d:\work\Иванов_В\файл.pdf.

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

Я вот так думаю.

Спустя 9 минут, 46 секунд (29.04.2011 - 14:59) zvezda_t написал(а):
а почему этот метод оптимальнее, чем полностью доки в БД загружать? rolleyes.gif

Спустя 5 минут, 48 секунд (29.04.2011 - 15:05) ApuktaChehov написал(а):
Что значит полностью в БД? В формате XML?
Я не сторонник хранения файлов в БД. В любом виде. Если что-то случиться с бд, то файлы останутся, если они отдельно. К тому же если нагнется хард, то можно будет восстановить часть файлов. Обычно при отказе харда можно восстановить очень много. Если это разные файлы. А что делать с БД? Если ее файлы повреждены? К тому же не вижу никаких проблем в хранении файлов как есть.

Спустя 52 минуты, 25 секунд (29.04.2011 - 15:57) Invis1ble написал(а):
Я б вообще давал бы файлам при сохранении имя, сформированное на основе id юзера. Т.е. например для юзера с id = 10 сохраняются документы 10_01.pdf, 10_02.pdf в отдельную директорию , на которые выставить соответствующие права.
Потом просто смотришь например в сессии id юзера и выбираешь glob() нужные файлы из директории по регулярке.

Спустя 42 минуты, 31 секунда (29.04.2011 - 16:40) Oyeme написал(а):
С точки реализации Вам не выгодно хранить файлы на серваке.
При десятки тысяч пользователей Вам потребуется огромное файловое хранилище. А если содержимое часто меняется то тем более, Вы будете нагружать всё в двойне.

Скажу на своём примере, работал года 3 назад в одной фирме по отплате телефонных считов.Колличество пользователей превышает миллионы. Мы генерировали документы как exel так и pdf на лету.
Я бы Вам советовал. Генерировать документы сразу же на лету.
Выбераете данные из базы данных,после чего генерируете pdf файл.
Если же Ваше количество пользователей не так много(меньше сотни) и содержимое не меняется. То вы можете хранить это на серваке. Хряня ссылку на файл.Вам даже будет проще создать отдельную папку для каждого пользователя. Тем самым облегчите себе поиск.

Спустя 2 часа, 49 минут, 14 секунд (29.04.2011 - 19:29) liw написал(а):
Если это сканы документов загруженные пользователями, то лучше делать так как сказал ApuktaChehov.

При другом раскладе конечно может быть лучше было бы хранить текстом в базе.

Спустя 10 часов, 41 минута, 36 секунд (30.04.2011 - 06:11) zvezda_t написал(а):
Цитата
Выбераете данные из базы данных,после чего генерируете pdf файл.

Oyeme, а ничего страшного что это сканы документов, переделанные в pdf?

Цитата
Если же Ваше количество пользователей не так много(меньше сотни) и содержимое не меняется. То вы можете хранить это на серваке. Хряня ссылку на файл.Вам даже будет проще создать отдельную папку для каждого пользователя. Тем самым облегчите себе поиск.

Документов очень много, в день по 300 пользователей, а значит по 1500 новых экземпляров документов, но содержимое их не меняется.


Спустя 1 час, 20 минут, 30 секунд (30.04.2011 - 07:31) Nikitian написал(а):
Файлы хранят как файлы, данные - как данные. Что тут может быть не понятно? pdf - это файл, который в данные можно перевести только в двоичные (не будем затрагивать тему распознания - не тут). Соответственно pdf храним в файловой системе.
Принадлежность файлов пользователям храним в базе - эти данные могут выбираться различными способами и необходимо обеспечить гибкость выборок.
Возникает вопрос организации файловой структуры, чтобы пользователи могли смотреть только свои файлы. Сканы документов обычно очень объёмные для обработки php, поэтому их выдачу надо вести легковесными веб-серверами. Де-факто это nginx. Закрываем директорию с файлами pdf от доступа
.htaccess
Order allow, deny
Deny from all

Далее в конфиге nginx для этой директории пишем:
nginx.conf

location /pdf_files {
root /full/path/to/pfd_files;
internal;
}

Этим доступ к директории /pdf_files извне закрыт окончательно и доступен только по внутреннему редиректу.
Организуем выдачу файлов через скрипт php:
getpdf.php
<?php
//Проверяем, имеет ли этот пользователь доступ к некоторому запрошенному файлу $_GET['pdf']
if($access){
header("X-Accel-Redirect: /pfd_files/".basename($_GET['pdf']));die;
}
echo'Access denied';
die;


Что имеем в итоге:
  • pdf можно получить только через скрипт getpdf.php?pdf=mypdf.pdf с любой выборкой прав доступа для разных пользователей;
  • независимо от размеров pdf-файлов они не забъют память php, т.к. через него не передаются
  • база не нагружается объёмными данными (блобы pdf-ок) и работает шустрее

Спустя 2 дня, 22 часа, 39 минут, 8 секунд (3.05.2011 - 06:10) zvezda_t написал(а):
Скажите пожалуйста, а nginx можно устанавливать на одном компе с Apache? rolleyes.gif

Спустя 5 часов, 47 минут, 36 секунд (3.05.2011 - 11:58) Nikitian написал(а):
Да
фывфвфывфывфв

Спустя 7 дней, 18 часов, 58 минут, 53 секунды (11.05.2011 - 06:57) zvezda_t написал(а):
Здравствуйте, уважаемые программисты!

Мой начальник настроен на то, чтобы хранить pdf документы в БД, считает что это самый безопасный и быстрый способ.

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

Очень Вас прошу помогите мне, пожалуйста, аргументировать убедительно, что вариант с фтп гораздо лучше!!!!

Спустя 25 минут, 58 секунд (11.05.2011 - 07:23) inpost написал(а):
Безопасность файлов: доступ из файла php, то есть оттуда открываешь файл и передаёшь его заголовки, таким образом ты создаёшь доступ к файлу.
Заблокировать из-вне тебе поможет .htaccess, где ты закрываешь прямой доступ к данному типу файлов. А доступ к специальному файлу, который читает эти файлы под внутренним паролем, только для админа.
У меня такая структура для внутренних зип-архиватора, чтобы из-вне никто не мог своровать.

А в целом, не вижу ничего плохого храниться файлы в БД, целостность сохраняется, конечно, как мне кажется, медленнее работать будет, но это не так страшно.

Зато фтп - привычнее и удобнее.

Спустя 15 дней, 4 часа, 8 минут, 53 секунды (26.05.2011 - 11:32) zvezda_t написал(а):
Начальник, говорит что в БД самый безопасный способ хранить файлы.
Мол "как мы на сервере защиту сделаем? Запретим читать папку с файлами?"
Не хочет чтоб у наших админов была возможность скопировать содержимое папки.

посоветуйте, пожалуйста, как быть?

Спустя 4 минуты, 18 секунд (26.05.2011 - 11:36) waldicom написал(а):
Цитата (zvezda_t @ 11.05.2011 - 04:57)
считает что это самый ... быстрый способ.

начальник в данном случае мощно ошибается.
Цитата (zvezda_t @ 26.05.2011 - 09:32)
как мы на сервере защиту сделаем?

Вообще-то начальник должен знать, что такое задание необходимо делегировать админу.
Цитата (zvezda_t @ 26.05.2011 - 09:32)
Не хочет чтоб у наших админов была возможность скопировать содержимое папки.

Эммм... Не доверять своим админам, которые в принципе имеют доступ на все - это какая ступень паранои?

Спустя 3 минуты, 35 секунд (26.05.2011 - 11:40) zvezda_t написал(а):
waldicom
я написала безопасный, а не быстрый smile.gif

Цитата
Не доверять своим админам

уж не знаю из каких соображений...
вот из БД они не могут скачать инфу...

Спустя 5 минут, 52 секунды (26.05.2011 - 11:45) waldicom написал(а):
Цитата (zvezda_t @ 26.05.2011 - 09:40)
я написала безопасный, а не быстрый smile.gif

Да ладно?! Я, конечно, уже не молодой и с глазами напряженка и все такое. Но выше я вижу вот это (выделенно мной):
Цитата (zvezda_t @ 26.05.2011 - 09:40)
Мой начальник настроен на то, чтобы хранить pdf документы в БД, считает что это самый безопасный и быстрый способ.


Цитата (zvezda_t @ 26.05.2011 - 09:40)
вот из БД они не могут скачать инфу...

Ну что тут сказать: не могут скачать из БД, значит надо хранить там. Все определяется именно вашими требованиями к системе.

Спустя 1 минута, 47 секунд (26.05.2011 - 11:47) zvezda_t написал(а):
waldicom
извини)
и Спасибо за ответ!


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.