За последние 24 часа нас посетили 26284 программиста и 1814 роботов. Сейчас ищут 1027 программистов ...

ссылка на переменную,содержащую значение RTF файла

Тема в разделе "PHP и базы данных", создана пользователем gafarov_, 23 мар 2010.

  1. gafarov_

    gafarov_ Активный пользователь

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    Здравствуйте, форумчане!

    Подскажите пожалуйста, я извлек из BLOB поля текст - это RTF файл, можно ли создать ссылку на этот документ, не записывая значение переменной как файл на диск?

    Спасибо :)
     
  2. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    можно. только нужно извлекать блоб не в момент генерации страницы со ссылкой, а вместо этого
    сделать скрипт, который будет извлекать из блоба этот ртф и писать его в ответ в виде файла. тогда в ссылке нужно будет прописать этот самый скрипт. типа

    HTML:
    1. ляляля
    2. <a href='getrtf.php?id=256'>скачать rtf</a>
    в getrtf.php делаем:

    PHP:
    1. //получаем ртф из базы
    2. $sql = 'select rtf_contents from rtf_table where file_id=' . $_GET['id']; //не забываем про защиту от инъекций
    3. //вычитываем содержимое файла, подготавливаем http-хидеры, выводим в респонс содержимое файла.
    все это конечно же схематично.
     
  3. gafarov_

    gafarov_ Активный пользователь

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    уж легче тогда создавать временный файл :)
     
  4. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    а зачем тогда вообще в базе хранить? храни сразу в файлах.
     
  5. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Можно не создавать временный файл, а всегда доставать из базы - но это ресурсоемко
     
  6. gafarov_

    gafarov_ Активный пользователь

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    Дело в том, что разрабатывается не сайт, а веб-узел электронного документооборота. Акцент делается на обеспечении централизованной безопасности и централизованный бэкап, а не настройку политики безопасности сервера, и тем самым ограничение доступа к файлам "вредителей".
    Я сделал так: при запросе определенных файлов, я их сохраняю во временную директорию и делаю на них ссылки, а bat-файл удаляет эти временные файлы раз в неделю по расписанию.
     
  7. gafarov_

    gafarov_ Активный пользователь

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    А как организовывать ссылку на скачивание?
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Вполне нормальное решение. Впрочем удалять можно и чаще :) это не ресурсоемкая операция.

    Можно сделать сложнее, записывать где-то время жизни такого файла и сборщиком мусора проверять дату создания и время жизни - если закончилось, то капцы котенку - в смысле удаляем :)

    Следующий нюанс, при таком подходе - хранить файлы в БД не нужно вовсе. Если нужен доступ, в каталоге пользователя делаем link на этот файл и пользователь его может читать. Когда время кончилось удаляем этот линк (для создания ссылок в файловой системе требуется Win 2K и старше)

    Достаточно несложно, отдать пару заголовков и вывести содержимое файла. Только можно - не значит нужно. Т.е. я бы не рекомендовал так делать :) Ваш вариант с временным файлом - лучше :)
     
  9. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Друзья! Давайте жить дружно и договоримся озвучивать слово "header" как хедер, а не хидер :)