<?php /** * Выдача удаленного файла скриптом с докачкой * автор: Nc_Soft * 26.10.09 */ //урл удаленного файла $url = 'http://snippets.pp.ru/1.mp3'; //инициализация сеанса curl $ch = curl_init($url); //если клиент запрашивает докачку if(isset($_SERVER['HTTP_RANGE'])) { curl_setopt($ch, CURLOPT_RANGE, str_replace('bytes=', '', $_SERVER['HTTP_RANGE'])); } //бинарные данные curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); //функция обратного вызова для заголовков (выдает такие же заголовки как и удаленный сервер) curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'curlHeaderCallback'); //падаем в случаи ошибки curl_setopt($ch, CURLOPT_FAILONERROR, 1); //браузер curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 5.1; U; ss; MRA 5.4 (build 02647); ru) Presto/2.2.15 Version/10.00'); //accept браузера $info = array( 'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1', 'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8', 'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1', ); curl_setopt($ch, CURLOPT_HTTPHEADER, $info); //запуск curl_exec($ch); function curlHeaderCallback($ch, $strHeader) { //выдаем такой же заголовок, как и удаленный сервер, где лежит файл. //заголовки идут по порядку header($strHeader); return strlen($strHeader); } //запустив скрипт вы можете выдать удаленный файл через свой сайт. //а чтобы файл нормально сохранялся, а не с адресом скрипта, //надо настроить mod_rewrite, чтобы на запрос блаблабла/file.mp3 выдавался этот скрипт