Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как скачать файл с удаленного сервера
Форумы портала PHP.SU » » Вопросы новичков » Как скачать файл с удаленного сервера

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

1. new01 - 11 Августа, 2013 - 12:50:12 - перейти к сообщению
Задача такая: скачать 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.  
2. Мелкий - 11 Августа, 2013 - 13:03:16 - перейти к сообщению
1) и не будет известен. Загрузите файл предварительно себе на сервер, с него отдавайте пользователю - будет известен размер.
2) измените его в 8 строке.
3. new01 - 11 Августа, 2013 - 13:06:06 - перейти к сообщению
Мелкий, спасибо. А без загрузки к себе на сервер никак нельзя? К примеру, обратиться на сервер и узнать размер файла?

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

PHP:
скопировать код в буфер обмена
  1.  
  2. $head = get_headers("$urlfile");
  3. echo $head[4]; // Результат "Content-Length: 7551751" в байтах
  4.  
4. Мелкий - 11 Августа, 2013 - 13:13:43 - перейти к сообщению
Если скажет размер файла - то можно.
Открываете сокет, шлёте GET-запрос, читаете заголовки, выгребаете из них размер файла (если есть, конечно), выдаёте пользователю свои заголовки, читаете дальше ответа сервера и транслируете пользователю файл.

 

Powered by ExBB FM 1.0 RC1