За последние 24 часа нас посетили 51652 программиста и 1760 роботов. Сейчас ищут 857 программистов ...

Обход QuickTime?

Тема в разделе "PHP для новичков", создана пользователем newnoob, 24 сен 2008.

  1. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    Сейчас пишу поисковик по mp3 и возникла проблема, у большинства людей при скачке прямых ссылок песен вылазит плеер QuickTime (При этом запускаеться в винде QuickTasks.exe), отсюда хотел поинтересоваться может кто то решал проблему? Проблему можно было бы решить если файлы лежали бы у меня на сервере, но они лежат на других серверах не на тех что сайт и доступа разумееться я к ним не имею что бы обрабатывать через заголовки всё.
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Не давайте прямую ссылку на файл. Отдавайте скриптом по частям, тогда музыка будет отдаваться как обычный файл.
     
  3. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    А конкретнее пример не могли бы показать? Просто уже 3-ий день ломаю голову и вариант отдачи файла через read не подошел, а вот по частям как отдать хез );

    P.S. Если нужно заплачу разумеется понимаю что время стоит :)
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    немного переделать
    PHP:
    1. <?
    2.  
    3. class download{
    4.  
    5.     private $properties = array('old_name' => "",
    6.                                 'new_name' => "",
    7.                                 'type' => "",
    8.                                 'size' => "",
    9.                                 'resume' => "",
    10.                                 'max_speed' => ""
    11.                                 );
    12.  
    13.     private $range = 0;
    14.  
    15.     function __construct($path, $name="", $resume=0, $max_speed=0){
    16.  
    17.         $name = ($name == "") ? substr(strrchr("/".$path,"/"),1) : $name;
    18.  
    19.         $file_size = @filesize($path);
    20.  
    21.         $this->properties =  array(
    22.                                     'old_name' => $path,
    23.                                     'new_name' => $name,
    24.                                     'type'=> "application/force-download",
    25.                                     'size' => $file_size,
    26.                                     'resume' => $resume,
    27.                                     'max_speed' => $max_speed
    28.                                     );
    29.  
    30.             if ($this->properties['resume']) {
    31.  
    32.                 if(isset($_SERVER['HTTP_RANGE'])) {
    33.  
    34.                     $this->range = $_SERVER['HTTP_RANGE'];
    35.                     $this->range = str_replace("bytes=", "", $this->range);
    36.                     $this->range = str_replace("-", "", $this->range);
    37.  
    38.                 } else {
    39.  
    40.                         $this->range = 0;
    41.  
    42.                 }
    43.  
    44.                 if ($this->range > $this->properties['size']) $this->range = 0;
    45.  
    46.             } else {
    47.  
    48.                 $this->range = 0;
    49.  
    50.             }
    51.  
    52.     }
    53.  
    54.  
    55.    public function download_file(){
    56.  
    57.                 if ($this->range) {
    58.                     header($_SERVER['SERVER_PROTOCOL']." 206 Partial Content");
    59.                 } else {
    60.                     header($_SERVER['SERVER_PROTOCOL']." 200 OK");
    61.                 }
    62.  
    63.  
    64.             header("Pragma: public");
    65.             header("Expires: 0");
    66.             header("Cache-Control:");
    67.             header("Cache-Control: public");
    68.             header("Content-Description: File Transfer");
    69.             header("Content-Type: ".$this->properties["type"]);
    70.             header('Content-Disposition: attachment; filename="'.$this->properties["new_name"].'";');
    71.             header("Content-Transfer-Encoding: binary");
    72.  
    73.             if ($this->properties['resume']) header("Accept-Ranges: bytes");
    74.  
    75.             if ($this->range) {
    76.  
    77.             header("Content-Range: bytes {$this->range}-".($this->properties['size']-1)."/".$this->properties['size']);
    78.             header("Content-Length: ".($this->properties['size']-$this->range));
    79.  
    80.  
    81.             } else {
    82.  
    83.             header("Content-Length: ".$this->properties['size']);
    84.  
    85.             }
    86.  
    87.             @ini_set('max_execution_time', 0);
    88.             @set_time_limit();
    89.  
    90.             $this->_download($this->properties["old_name"], $this->range);
    91.     }
    92.  
    93.    private function _download ($filename, $range=0)
    94.     {
    95.         @ob_end_clean();
    96.  
    97.         if (($speed = $this->properties['max_speed']) > 0)
    98.             $sleep_time = (8 / $speed) * 1e6;
    99.         else
    100.             $sleep_time = 0;
    101.  
    102.         $handle = fopen($filename, 'rb');
    103.         fseek($handle,$range);
    104.  
    105.         if ($handle === false)
    106.         {
    107.             return false;
    108.         }
    109.  
    110.         while (!feof($handle))
    111.         {
    112.             print (fread($handle, 1024*8));
    113.             ob_flush();
    114.             flush();
    115.             usleep($sleep_time);
    116.         }
    117.  
    118.         fclose($handle);
    119.  
    120.         return true;
    121.     }
    122.  
    123. }
    124.  
    125. ?>
     
  5. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0
    Спасибо большое то что нужно и работает как нужно, только вот почему то файл полностью перекидываеться но сама песня идет кусками тоесть ацкие помехи по сравнению с оригиналом.
     
  6. newnoob

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

    С нами с:
    8 авг 2006
    Сообщения:
    151
    Симпатии:
    0