отдача файла, но скрыть его местонахождение

Тема в разделе "PHP", создана пользователем dimida, 18 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. dimida

    dimida Создатель

    Регистр.:
    23 ноя 2008
    Сообщения:
    17
    Симпатии:
    0
    как можно отдать файл с хостинга под средством пхп, чтоб при скачивании файла не было видно прямого урла, так же чтоб и в сёрче не было видно... спасибо
     
  2. a1ien.n3t

    a1ien.n3t Постоялец

    Регистр.:
    12 июл 2008
    Сообщения:
    52
    Симпатии:
    7
    PHP:
            header"Pragma: public" );
            
    header"Expires: 0" );
            
    header"Cache-Control:" );
            
    header"Cache-Control: public" );
            
    header"Content-Description: File Transfer" );
            
    header"Content-Type: application/force-download" );
            
    header'Content-Disposition: attachment; filename=file.rar;' );
            
    header"Content-Transfer-Encoding: binary" );
    header"Content-Length: тут_размер файла" );
    file_get_contents("../../../uploads/1.rar")
    Ну там параметризацию и так далее сам сделаешь.
     
    dimida нравится это.
  3. alexz15

    alexz15

    Регистр.:
    3 окт 2008
    Сообщения:
    394
    Симпатии:
    190
    я делаю так
    PHP:
    function SaveToClient($filename,$name) {
    if(
    ereg('Opera(/| )([0-9].[0-9]{1,2})'$_SERVER['HTTP_USER_AGENT']))
    $UserBrowser "Opera";
    else if(
    ereg('MSIE ([0-9].[0-9]{1,2})'$_SERVER['HTTP_USER_AGENT']))
    $UserBrowser "IE";
    else
    $UserBrowser '';

    $mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 'application/octetstream' 'application/octet-stream';

    header('Content-Type: ' $mime_type);
    header('Content-Encoding: none');
    header('Expires: ' gmdate('D, d M Y H:i:s') . ' GMT');
    if (
    $UserBrowser == 'IE') {
    header('Content-Disposition: inline; filename="'.$name.'";');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    }
    else {
    header('Content-Disposition: attachment; filename="'.$name.'"');
    header('Pragma: no-cache');
    }
    @
    readfile($filename);
    exit();
    }
    пример использования
    PHP:
    SaveToClient('http://site/file.zip','file.zip');
     
  4. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Раз 15 перечитывал, так и не понял что Вы хотите сделать?
    Как можно скрыть урл?
    Если, например, стоит ФлэшГот (аддон к ФФ) то можно без труда увидеть, какая ссылка была передана.
    Или я что-то не так понял?
     
  5. a1ien.n3t

    a1ien.n3t Постоялец

    Регистр.:
    12 июл 2008
    Сообщения:
    52
    Симпатии:
    7
    Он хотел скрыть истинный путь до файла.
    Что и было предложено.
    Тобеж файл отдаеться при помощи пхп скрипта. В котором можно организовать проверку куков сессии и вобще чего угодно. И если все нормально то пхп скрипт просто будет отдавайть файл.
    Правда у такого метода есть существенный недостаток.
    Он довольно прилично нагружает систему.
    Намного больше чем просто ссылка на файл.
     
  6. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    2a1ien.n3t

    наверное надо было написать
    Да и вообще, универсальней будет черещ fopen открывать и показывать через fgets, т.к. с легкостью можно будет жевать большие файлы, чего не скажешь при работе с функциями reafile,file,file_get_contents
     
  7. a1ien.n3t

    a1ien.n3t Постоялец

    Регистр.:
    12 июл 2008
    Сообщения:
    52
    Симпатии:
    7
    Спс за замечание. Опечатался
    Кстати насчет того что лучше.
    Зачем тогда в доках написано
     
  8. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Угу, но только для мелких размеров. Ты сам то прикинь, через сколько скачиваний у тебя сервак зависнет если такие файлы по несколько сотен mB в оперативку сувать.
     
  9. a1ien.n3t

    a1ien.n3t Постоялец

    Регистр.:
    12 июл 2008
    Сообщения:
    52
    Симпатии:
    7
    Ну про несколько дасятков мб да ты прав. неподумал.
    Тогда за одно еще один вопрос впринципе пересекающийся с темой топика.
    Что насчет passthru насклько нормально он выводит большой бинарный поток полученный после выполнения.
     
Статус темы:
Закрыта.