PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
new01
Отправлено: 11 Августа, 2013 - 12:50:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




Задача такая: скачать mp3 файл по ссылке (ссылка прямо введет на mp3 файл) сам mp3 файл находится не на моем сервере. Использую ниже приведенный скрипт. Он работает, но с некоторыми ошибками:
1) Файл сразу начинает скачиваться, но его полный размер неизвестен.
2) Хотелось бы изменить имя сохраняемого файла на компьютер.

Заранее всем спасибо.
PHP:
скопировать код в буфер обмена
  1.  
  2. function file_force_download($file) {
  3.     if (ob_get_level()) {
  4.       ob_end_clean();
  5.     }
  6.     header('Content-Description: File Transfer');
  7.     header('Content-Type: application/octet-stream');
  8.     header('Content-Disposition: attachment; filename='.basename($file));
  9.     header('Content-Transfer-Encoding: binary');
  10.     header('Expires: 0');
  11.     header('Cache-Control: must-revalidate');
  12.     header('Pragma: public');
  13.     header('Content-Length: ' . filesize($file));
  14.     ob_clean();
  15.     flush();
  16.     readfile($file);
  17.    exit;
  18. }
  19.  


-----
new01
 
 Top
Мелкий Супермодератор
Отправлено: 11 Августа, 2013 - 13:03:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11874
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 612 раз(а)




1) и не будет известен. Загрузите файл предварительно себе на сервер, с него отдавайте пользователю - будет известен размер.
2) измените его в 8 строке.


-----
PostgreSQL DBA
 
 Top
new01
Отправлено: 11 Августа, 2013 - 13:06:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




Мелкий, спасибо. А без загрузки к себе на сервер никак нельзя? К примеру, обратиться на сервер и узнать размер файла?

Нашёл вот такой вариант через HEAD заголовки, заранее обратиться к серверу и вытащить оттуда размер. Вроде то.

PHP:
скопировать код в буфер обмена
  1.  
  2. $head = get_headers("$urlfile");
  3. echo $head[4]; // Результат "Content-Length: 7551751" в байтах
  4.  

(Отредактировано автором: 11 Августа, 2013 - 13:14:51)



-----
new01
 
 Top
Мелкий Супермодератор
Отправлено: 11 Августа, 2013 - 13:13:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 11874
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 612 раз(а)




Если скажет размер файла - то можно.
Открываете сокет, шлёте GET-запрос, читаете заголовки, выгребаете из них размер файла (если есть, конечно), выдаёте пользователю свои заголовки, читаете дальше ответа сервера и транслируете пользователю файл.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB