1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Загрузка файлов с сервера

Тема в разделе "Web Coding", создана пользователем IchWill, 29 апр 2007.

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

    IchWill Прохожие

    Надо чтобы пользователи могли загружать с сервера файлы с русскими именами. для этого я сделал следующее
    Изначала $file получается в виде имени файла без расширения в кодировке utf8. оно вылазиет как название файла при сохранении. утф8 нужно для того чтобы сохранялись не каракули.
    $files - имя файла на сервере. К сожалению совместить его с $file не получилось.
    PHP:
    $file "$file.mp3";
    header('Content-type: application/force-download');
    header("Content-Disposition: attachment; filename=$file");
    $open fopen("$files""rb");
    while(!
    feof($open)) {
    $line fgets($open);
    echo 
    "$line";
    }
    fclose($open);
    }
    Вся проблема в том что файлы большие(>10mb) а сервер слабенький. Поэтому пользователь должен долго ждать ответа(пока генерится на сервере этот файл) и только потом появляется окошка желаете ли сохранить. Можете посоветовать чтонибуть для того чтобы файл не генерировался на сервере а отдовался сразу же. с именем $file
     
  2. I_not

    I_not su -root

    Регистр.:
    9 янв 2007
    Сообщения:
    124
    Симпатии:
    50
    чтобы пользователи не ждали можно так сделать
    echo "$line"; ob_flush();
     
  3. webness

    webness Прохожие

    можно юзать функцию readfile($file);

    т.е. она сразу отдает файл в поток

    вообще, если смысл в том, чтобы отдать юзеру файл,
    при этом не показывая его урла и не создавая нагрузки на сервер,
    то проще создавать на файл симлинк (symlink(); )
    и показывать юзерам симлинки
     
  4. IchWill

    IchWill Прохожие

    Спасибо:)
    И еще один вопросик. Как можно зделать чтоб передавался размер файла т.к сейчас все качается в слепую.
    Про fileread скрипт начинает по бешеному тупить и загрузка страници идет несколь минут.
    Про symlink();
    нашол такое вот замечание:
    Замечание: Для Windows-платформ эта функция не реализована.
     
  5. webness

    webness Прохожие

    если я правильно понял вопрос,
    то
    header('Content-Length: '.$filesize);

    а насчет тупения - таки да

    большие файлы нужно симлинками отдавать

    на таком принципе делается антилич -
    создается временная папка,
    имеющая имя вроде
    ad87a6923h423o8sdufl, т.е. к примеру,
    хеш код (md5(); ) рандомного числа от 100000 до 999999,
    туда кидается симлинк на нужный файл

    после, предположим, 30 минут, папка удаляется

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

    имеется ввиду, что сервер на винде

    а если сервер на *никсах, что нормально в случае с
    юзанием php, то нет проблем
     
  6. gob1in

    gob1in Постоялец

    Регистр.:
    10 май 2006
    Сообщения:
    140
    Симпатии:
    17
    Для вындовса есть такой вариант

    $filename = './download/data.zip';
    header("Content-Disposition: attachment; filename=\"".basename($filename)."\";");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".@filesize($filename));
    set_time_limit(0);
    @readfile($filename) or die("File not found.");
    die();

    или для того чтоб не грузить сервак можно попробовать при отгрузке через echo сбрасывать буффер каждые 4-16кб прочитанного файла.
     
    Кристя нравится это.
Статус темы:
Закрыта.