За последние 24 часа нас посетили 17739 программистов и 1655 роботов. Сейчас ищут 912 программистов ...

Получение файлов с удаленного сервера

Тема в разделе "Прочие вопросы по PHP", создана пользователем energy2008, 2 июл 2008.

  1. energy2008

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

    С нами с:
    24 июн 2008
    Сообщения:
    47
    Симпатии:
    0
    Есть площадка с сайтом где находится скрипт, но для создания большого файлового хранилища не подходит, поэтому хочу использовать для храниния файлов вторую площадку, с большим пространством.
    Скрипт который выдает пользователю файл выглядит так:
    PHP:
    1.  
    2.  $file = 'http://br.tunes.ru/idm/02-alphatown_-_hot_stuff-zzzz.mp3';
    3.  @$fh = fopen( $file, 'r' );
    4.  if (!$fh)
    5.    {
    6.     header ("HTTP/1.0 404 Not Found");
    7.     echo 404;
    8.     exit;
    9.    }
    10.  $filename = basename($file);
    11. // echo  $filename;
    12.  header('Content-disposition: attachment;  filename='.$filename);
    13.  header("Content-type: audio/mpeg");
    14.  
    15.         fpassthru( $fh );
    16.             @fclose( $fh );
    17.             exit();
    18.  
    19.  
    Имя файла и путь будут переменными, сейчас все на стадии тестирования.
    Этот скрипт дает сохранить файл на диск, только после скачки в кеш браузера.
    то есть пользователь жмет на ссылку, появляется пусте окно и минуты через три (как только файл загрузится) появляется окно с предложением сохранить файл, при сохранении файл записывается моментально, без всяких дополнительных закачек.
    Хотелось бы сделать так чтобы при нажатии на ссылку со скриптом предложение сохранить файл появлялось бы сразу..
     
  2. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    energy2008

    пробуй читать файл построчно, построчно выводить и озать функцию flush() через каждые n итераций
     
  3. плоский мозг

    плоский мозг Активный пользователь

    С нами с:
    6 июл 2008
    Сообщения:
    6
    Симпатии:
    0
    пробуй так


    Код (Text):
    1. <?php
    2. //имя файла который будешь отдавать
    3. $local_file = 'file.zip';
    4. //имя файла которое увидит узер
    5. $download_file = 'name.zip';
    6.  
    7. // тут скорость ограничиваешь (=> 20,5 kb/s)
    8. $download_rate = 20.5;
    9. //тут проверяешь есть ли такой файл
    10. if(file_exists($local_file) && is_file($local_file))
    11. {
    12.     header('Cache-control: private');
    13.     header('Content-Type: application/octet-stream');
    14.     header('Content-Length: '.filesize($local_file));
    15.     header('Content-Disposition: filename='.$download_file);
    16.  
    17.     flush();
    18.     $file = fopen($local_file, "r");
    19. //это тот цикл то что тебе надо
    20. //пока нет символа конца файла он будет выдавать файл порциями
    21.     while(!feof($file))
    22.     {
    23.         //выдает порцию файла
    24.         print fread($file, round($download_rate * 1024));
    25.         //вытолкнуть порцию файла браузеру
    26.         flush();
    27.         sleep(1);
    28.     }
    29.     fclose($file);}
    30. else {
    31. //если такого файла нет это увидишь
    32.     die('Error: The file '.$local_file.' does not exist!');
    33. }
    34.  
    35. ?>