За последние 24 часа нас посетили 19453 программиста и 1604 робота. Сейчас ищут 910 программистов ...

Ссылка на скачивание фотографии

Тема в разделе "Прочие вопросы по PHP", создана пользователем rumis, 24 сен 2013.

  1. rumis

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

    С нами с:
    15 дек 2011
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Здравствуйте! Помогите разобраться в проблеме.
    Хочу, что бы при нажатии на ссылку, браузер выдавал диалоговое окно на сохранение картинки.
    Если использовать просто <a href=".."></a>, картинка просто открывается в новом окне, а хотелось бы все-таки диалоговое.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    для этого есть специальный заголовок. из скрипта вызывается типа так:
    Код (Text):
    1. header('Content-Disposition: attachment; filename="download.jpg"');
    если надо отдавать статические файлы из определенной папки, то можно настроить .htaccess. примерно так:
    Код (Text):
    1. <IfModule mod_headers.c>
    2.     <FilesMatch "\.(jpg|gif|png)$">
    3.         ForceType application/octet-stream
    4.         Header set Content-Disposition "attachment"
    5.         Allow from all
    6.     </FilesMatch>
    7. </IfModule
    естественно надо чтобы mod_headers был подключен
     
  3. rumis

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

    С нами с:
    15 дек 2011
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    После вставки следующего кода

    Код (Text):
    1.  
    2. header('Content-Type: image/jpeg');
    3. header('Content-Disposition: attachment; filename="'.htmlspecialchars($_GET['name']).'"');
    4. header('Content-Length: '.filesize($file));
    файл на скачку запускается, однако при попытке его открытия на локальном компьютере возникает ошибка "невозможно прочитать заголовок файла файл имеет неизвестный формат".

    Отмечу, что размер и название строятся корректно.

    В чем может быть проблема?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Так посмотри что внутри
     
  5. rumis

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

    С нами с:
    15 дек 2011
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Внутри в смысле в скаченном файле? Ну я смог определить, что размер не совпадает с тем, что на сервере. Видимо не хватает еще какого-то заголовка, хотя я могу ошибаться
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    там в файле может оказаться текст ошибки.

    Добавлено спустя 30 секунд:
    ну и тупо не с тем расширением сохранен
     
  7. rumis

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

    С нами с:
    15 дек 2011
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Может быть кто-нибудь посмотрит на конкретном примере?
    http://www.oldos.ru/kids/test/
    Красная ссылка "Скачать" под фотографией как раз реализует этот функционал.
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    за тебя отлаживаться никто не будет. загляни в файл.
     
  9. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Тут есть две распространённые ошибки:
    1. На сервере всплывает сообщение об ошибке (Notice, Error, Warrning), которое успешно отдаётся клиенту внутри файла-изображения. Можно просто пробежаться "глазами" по получаемому файлу и обнаружить эти ошибки. Обычно там же указано место, где произошла ошибка
    2. В файл-изображение, отправляемое пользователю, вставляется в самом начале пустая строка. Лечится просто: уничтожением закрывающего php-тэга (?>) во всём проекте в конце всех файлов
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Предположу, что автор залип на операции "заглянуть в файл". По Enter винда ему пытается открыть картинку, а картинка битая. Как еще можно в файл заглянуть у автора нет идей, а спросить стесняется.

    Заглянуть можно хотябы Блокнотом. Если там некий текст, ты его увидишь. Будет над чем работать дальше.
     
  11. rumis

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

    С нами с:
    15 дек 2011
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Нет, как заглянуть в файл, я догадался)
    И обнаружил там действительно лишний код, точнее даже не просто лишний код, а всю html страницу. И сейчас думаю, как это могло произойти.
    Собственно, на этом месте и залип.
    Есть у кого-нибудь идеи, откуда там не просто лишние артефакты, а довольно большой объем html кода?

    Добавлено спустя 10 минут 44 секунды:
    Почему-то размер скаченного файла - 0 байт.

    Добавлено спустя 7 минут 38 секунд:
    Ура, я разобрался! Все спасибо за подсказки! Не знаю, правильный способ или нет, но вдруг кому-нибудь понадобится. Весь код следующий:
    Код (Text):
    1. header('Content-Type: image/jpeg');
    2. header('Content-Disposition: attachment; filename="'.htmlspecialchars($_GET['name']).'"');
    3. header('Content-Length:'.filesize($file).'');
    4. header('Cache-Control: no-cache');
    5. header('Content-Transfer-Encoding: chunked');
    6. readfile($file);
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    красавчик
     
  13. Wrisee

    Wrisee Новичок

    С нами с:
    25 сен 2013
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Киев
    Блин, круто!!!
    Молодец!!! Жму твою мужскую руку!))))
    А то я всё думала, как?...КАК?...)))