За последние 24 часа нас посетили 20302 программиста и 1726 роботов. Сейчас ищут 2159 программистов ...

редиректы на скачивание файла [UNSOLVED] :)

Тема в разделе "Прочие вопросы по PHP", создана пользователем winterheart, 5 май 2006.

  1. winterheart

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

    С нами с:
    5 май 2006
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Ufa
    Задача вот какая.
    Есть SQL-база, в которой храняться сведения о файлах. Если файл есть, то пользователю отдается он самый.
    Если его нет то должен быть отправлен файл с тем же именем, что и искомый, но с другим расширением и содержащие в себе причины отказа.
    Сначала я пробовал все это устроить с помощью header("HTTP/1.1 302 Found"); посылкой по редиректу. Тут же создается временный файл, куда записывается причина отказа, и клиент получает птицу-обломинго. Но после этого надо удалять временный файл, а это, во-первых, лениво, а во-вторых, сразу за header(Location:...) unlink сделать нельзя, клиент получит ошибку 404 (типа файл раньше удалился, чем был отправлен, и временные задержки не помогают). Потом меня надоумили на такое:
    Код (Text):
    1. header("Content-Type: application/x-force-download");
    2. header("content-disposition: attachment; filename="$name_to_download");
    3. print $msg;
    Казалось бы, радуйся и прыгай до потолка, но качалка wget (она будет использоваться пользователями) не распознает $name_to_download, а сохраняет файл как script.php?want=$name_to_download
    Как можно выкрутиться с этой ситуации?
     
  2. olo

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

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Мод реврайт тебя спасет. Перенаправляй все файлы с определенным расширением на обработчик который будет генерить отмазы :)
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    winterheart
    я делаю так:

    header('Content-type: application/octet-stream ');
    header('Content-Disposition: attachment; filename="'.$M->name.'"');

    имя в кавычках
     
  4. winterheart

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

    С нами с:
    5 май 2006
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Ufa
    Спасибо, не помогло -_-.

    Дело в том, как я понял, что wget использует до сих пор HTTP/1.0, и не понимает header("content-disposition: attachment; filename=...");, так что придется пойти другим путем. Всем спасибо!